im试图开发带有多个数据库提供程序的dotnet应用程序,我需要知道最常用的数据库的连接串和提供商。我使用system.dbcommon。这是我的代码:
public class DBConnector
{
public void ConectDatabase()
{
{
string connectionString =
"Data Source=(DESCRIPTION=(ADDRESS=(PROTOCOL=TCP)" +
"(HOST=MYHOST)(PORT=1527))(CONNECT_DATA=(SID=MYSERVICE)));" +
"User Id=MYUSER;Password=MYPASS;"; //Connection String
string provider =
"Oracle.DataAccess.Client.OracleConnection, Oracle.DataAccess"; //I need this for the most used databases (Mysql, PostgreSQL, SqlServer)
using (DbConnection conn = (DbConnection)Activator.
CreateInstance(Type.GetType(provider), connectionString))
{
conn.Open();
string sql =
"select distinct owner from sys.all_objects order by owner";
using (DbCommand comm = conn.CreateCommand())
{
comm.CommandText = sql;
using (DbDataReader rdr = comm.ExecuteReader())
{
while (rdr.Read())
{
string owner = rdr.GetString(0);
Console.WriteLine("{0}", owner);
}
}
}
}
}
}
我在此网站中找到了连接弦https://www.connectionstrings.com/
,但我也需要提供商。谢谢
连接字符串属性中的提供商名称不是类,而是名称空间,例如system.data.sqlclient不是类,而是一个名称空间,在该名称空间下,您具有SQLConnection,SQLCommand等。
您可以尝试寻找实现IDbConnection
接口的所有类,然后基于该类型创建IDBConnection:
var types = AppDomain.CurrentDomain.GetAssemblies()
.SelectMany(s => s.GetTypes())
.Where(p => typeof(IDbConnection).IsAssignableFrom(p) && p.IsClass);
foreach(var dbConnection in types)
{
Console.WriteLine(dbConnection);
}
安装MySQL和Oracle软件包后,这是结果列表
- system.data.sqlclient.sqlconnection
- system.data.oledb.oledbconnection
- system.data.odbc.odbcconnection
- system.data.common.dbConnection
- mysql.data.mysqlclient.mysqlconnection
- oracle.manageddataaccess.client.oracleconnection
您可以在此处检查源代码https://github.com/kblok/stackoverflowexamples/blob/master/aspnetdemoproject/aspnetdemoproject/aspnetdemoproject/demos/demos/providerslist.aspx.aspx.cs
您可以列出这样的注册数据库提供商:
using System;
using System.Data;
using System.Data.Common;
namespace StackOverflowExamples
{
class AvailableDataProviders
{
public static void Main(string[] args)
{
using (DataTable providers = DbProviderFactories.GetFactoryClasses())
{
Console.WriteLine("Available Data Providers:");
foreach (DataRow provider in providers.Rows)
{
Console.WriteLine();
Console.WriteLine("Name: {0}", provider["Name"]);
Console.WriteLine("Description: {0}", provider["Description"]);
Console.WriteLine("Invariant Name: {0}", provider["InvariantName"]);
Console.WriteLine("AssemblyQualifiedName: {0}", provider["AssemblyQualifiedName"]);
}
}
}
}
}
您的应用程序程序集中可以提供提供商类,这些提供商可以由您的应用程序(app.config或web.config(或计算机(In Machine.config(或框架进行。
。您的应用程序只能使用应用程序配置的system.data -> DbProviderFactories
中注册的提供商。