.net - 我如何从用户指定的连接字符串中检测提供者?

标签 .net database connection-string

我的应用程序需要针对用户指定的连接字符串执行特定查询。查询将需要一些参数,所以我正在考虑结合使用 DbProviderFactory myConnection.GetSchema("DataSourceInformation").Rows[0]["ParameterMarkerFormat"]看看我是否需要使用 : (甲骨文),@ (SQL) 或 ? (OleDb) 将参数发送到数据库。

要使用 DbProviderFactory,我需要找出连接字符串需要什么 Provider。有什么好的方法可以做到这一点,还是我需要使用某种 if(conStr.indexOf("oledb") != -1) { type = DbTypes.OleDB; }逻辑? (或者是否有更好的方法连接到“未知”数据库类型?)

注意:DbProviderFactory 期望提供者采用 System.Data.SqlClient 的形式, 而不是 SQLNCLI.1这是在实际的连接字符串中。

最佳答案

问题在于,连接字符串仅在提供程序的上下文中有意义,反之则不然。换句话说,没有根据字符串识别提供者的标准。也就是说,您通常可以从字符串中推断提供者,正如您使用 IndexOf 所演示的那样。

您可以使用静态方法 DbProviderFactories.GetFactoryClasses() 获取已安装提供程序的列表。这将为每个提供者返回一个包含一行的数据表。该行将包含“InvariantName”列,该列将为您提供传递给 DbProviderFactories.GetFactory 的正确值。如果您的应用程序设计允许,您可以在获取连接字符串的同时公开可用提供程序列表,以便您的用户可以指定他们打算建立连接的提供程序。 “名称”列正是为此目的而设计的。

关于.net - 我如何从用户指定的连接字符串中检测提供者?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/1913144/

相关文章:

sql-server - 与主机服务器的连接失败。 java

ios - 如何在 iOS SQLite 中为搜索查询启用 soundex()?

php - 每个用户一个数据库

sql-server - ASP.NET MVC 中出现 "The network path was not found"的原因

C#:自定义转换为值类型

使用存储函数、过程清理 MySQL 数据库

C# 代码连接到本地主机中的 mysql。供应商错了吗?

.net - 混淆有多有效?

.net - 实现 DUKPT key 管理

c# - 使用 CSharpScript 创建一个函数并执行它