为啥这个 OdbcConnection 会抛出 System.InvalidOperationException?

Posted

技术标签:

【中文标题】为啥这个 OdbcConnection 会抛出 System.InvalidOperationException?【英文标题】:Why does this OdbcConnection throw me a System.InvalidOperationException?为什么这个 OdbcConnection 会抛出 System.InvalidOperationException? 【发布时间】:2009-05-07 08:49:18 【问题描述】:

我正在构建一个 Winforms C# 2.0 应用程序。

我已经能够使用以下方法成功连接到我的 SLQ 服务器数据库: m_connexion = new SqlConnection("server=192.168.xxx.xxx;uid=...;pwd=...;database=...");

因为我的公司希望能够使用任何数据库,所以我继续使用 Odbc 驱动程序,我的命令继续如下:

m_connexion = new OdbcConnection("server=192.168.xxx.xxx;uid=...;pwd=...;database=...");

但是,这会抛出 System.InvalidOperationException。知道为什么吗?

我也在尝试使用 DSN,但值得称赞的是 OdbcConnection 连接 = 新 OdbcConnection("DSN=MyDataSourceName");建议 here 但它同样会抛出我的 System.InvalidOperationException

【问题讨论】:

【参考方案1】:

连接字符串需要一个 Provider= 以便 ODBC 驱动程序知道您要连接到哪个服务器。在这种情况下,我相信 Provider=SQLSERVER。

更新:应该是 Provider=SQLOLEDB

【讨论】:

成功了!如果我提供 DSN 名称和 uid 和 pwd,它现在可以工作。有什么办法可以摆脱 uid 和 pwd?目标是将那些从应用程序中取出 您可以添加 ;Integrated Security=SSPI;连接字符串以使用 Windows 身份验证,而不是用户名/密码。 好吧,您首先不想将连接字符串存储在应用程序中。相反,您将使用应用程序的 .config 文件中的 配置元素,并使用 .NET 中提供的内置加密来保护它。【参考方案2】:

我认为您需要指定驱动程序。详情看这里:http://connectionstrings.com/sql-server-2005#21

【讨论】:

我试过 Driver=SQL Native Client 但我得到了相同的结果 您是否尝试过重新安装 MDAC?您可以从 MS 下载它:microsoft.com/downloads/… +1 获得最佳网站和 MDAC 提及(好奇 m_OLogin 使用的是哪个操作系统!) 我使用的是 XP SP3。我尝试重新安装 MDAC 但结果相同【参考方案3】:

如果您指定 DSN,则必须使用 ODBC 控制面板配置 DSN。它在管理工具下称为“设置数据源 (ODBC)”。该面板还有一个“测试”按钮,它可能会告诉您更多关于出了什么问题。

附: “独立于数据库”比使用 ODBC 连接、命令和数据读取器要多得多。您必须确保您的查询在每个目标数据库上运行,如果您没有每个目标数据库的测试服务器,您将无法做到这一点。因此,如果我是你,我会使用 SqlConnection 对其进行编码,因为你已经开始工作了。

【讨论】:

以上是关于为啥这个 OdbcConnection 会抛出 System.InvalidOperationException?的主要内容,如果未能解决你的问题,请参考以下文章

为啥这个 Linq 方法会抛出空引用异常

为啥这个新创建的 MVC 应用程序会抛出这个错误?

为啥这段代码会抛出 java.lang.***Error [重复]

为啥当客户端断开连接时这个简单的 websocket 代码会抛出?

为啥geoip会抛出异常?

为啥 jsonwebtoken 会抛出“无效签名”错误?