C# - 数据库ConnectionsStrings提供商的列表



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中注册的提供商。

最新更新