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

时间:2009-04-07 10:44:06

标签: 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数据源管理器中创建DSN时提供的信息如下:

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

4 个答案:

答案 0 :(得分:2)

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

修改:您可能还想查看this site,其中包含大量连接字符串示例。

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

答案 1 :(得分:1)

感谢Neil Butterworth,我找到了一个有效的答案here

“Driver = {SQL Native Client}; Server = myMachineName; Database = myDatabaseName; Trusted_Connection = yes;”

我仍然感到困惑的是,为什么在连接工作时调用GetConnect()不会产生完美的DSN字符串,但现在我已经有了一个无DSN的解决方案,我不在乎! / p>

答案 2 :(得分:0)

一些选项:

  • 是系统还是用户DSN?也就是说,DSN对执行用户是否可见?
  • 尝试删除UID=myUsername
  • 尝试Driver=ODBC代替ODBC

为什么使用DSN而不是更传统的自包含连接字符串?例如Driver=SQLOLEBD;WSID=myMachineName;DATABASE=myDatabaseName;Trusted_Connection=Yes;

答案 3 :(得分:0)

用于创建连接字符串我使用www.connectionstrings.com。非常适合在所有变种和数据库工程上创建连接字符串