我正在使用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空值,填充和警告”:勾选了
复选框“为字符数据执行翻译”:勾选
答案 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)
一些选项:
UID=myUsername
Driver=ODBC
代替ODBC
为什么使用DSN而不是更传统的自包含连接字符串?例如Driver=SQLOLEBD;WSID=myMachineName;DATABASE=myDatabaseName;Trusted_Connection=Yes;
答案 3 :(得分:0)
用于创建连接字符串我使用www.connectionstrings.com。非常适合在所有变种和数据库工程上创建连接字符串