c++ - 为什么我不能让我的 CDatabase 对象理解我的数据源名称?

标签 c++ sql sql-server mfc odbc

我正在使用 MFC 类 CDatabase。为了建立与 SQL Server 的连接,我使用连接字符串调用 OpenEx()。我的问题是该对象似乎无法解释字符串的 DSN 部分。连接字符串如下所示:

 ODBC;DSN=mySystemDSN;UID=myUsername;WSID=myMachineName;DATABASE=myDatabaseName;Trusted_Connection=Yes

这应该是正确的,因为我是通过使用 OpenEx( NULL )、手动选择数据源然后调用 GetConnect() 获得的。

但是这个字符串似乎没有包含足够的信息:OpenEx() 总是弹出一个对话框来询问更多信息。我从这个对话中选择什么似乎并不重要——我可以选择一个与完全不同的数据库关联的 DSN,并且一切仍然有效(在这种情况下调用 GetConnect() 表明它正在使用我的连接字符串,除了 DSN部分,这是从其他数据源借来的)。

我需要我的应用程序能够自动连接到数据库 - 对话框是一个交易破坏者。我试过无 DSN 的连接,结果相似。这是怎么回事,我该怎么办?

编辑以回答 Neil Butterworth 的问题:

我在ODBC Data Source Administrator中创建DSN时提供的信息如下:

驱动程序:SQL Server
名称:我的系统DSN
服务器:我的机器名
身份验证类型(可以是 Windows 或 SQL Server):Windows
复选框“连接到 SQL Server 以获取其他配置选项的默认设置。”:勾选
复选框“将默认数据库更改为”:勾选并从下拉菜单中选择 myDatabaseName
复选框“使用 ANSI 引用标识符”:勾选
复选框“使用 ANSI 空值、填充和警告”:勾选
复选框“对字符数据执行翻译”:勾选

最佳答案

您似乎缺少密码和服务器的主机名。我想这个有趣的问题是您在对话框中输入了哪些信息来创建 DSN?

编辑:您可能还想看看 this site ,其中有很多连接字符串示例。

Edit2: 我会删除“ODBC;”在字符串的开头。如果这不起作用,我会将 DSN 中的身份验证类型更改为 SQL Server 并显式提供用户 ID 和密码,只是为了检查身份验证不是问题所在。然后我可能会放弃 :-)

关于c++ - 为什么我不能让我的 CDatabase 对象理解我的数据源名称?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/725046/

相关文章:

.net - 使用多个网络服务器在现有 .NET/SQL Server 堆栈上实现 Lucene

c++ - 是类型名称=名称;在 C++ 中有用吗?

c++ - std::transform 与 std::for_each 不同吗?

c++ - 解决 VS 2003 中的 C++ 指向成员的错误

sql - 表和临时表之间的区别

Python - 从Sql Server语句中的字段获取值

c++ - 如何在 gcc 中链接到我自己的库?

sql - 改进 SQL 子字符串提取

mysql - 通过和失败记录相同的测试

java - 数据源 Microsoft JDBC Driver for SQL Server(AlwaysOn 可用性组)