当nameOrConnectionString是连接字符串时 - 应该使用什么providerName?

时间:2014-02-16 08:29:04

标签: c# ado.net connection-string

我正在编写自己的类来包装一些ADO.NET调用,我想接受的参数之一是“nameOrConnectionString”,类似于许多ORM似乎接受的内容

如果参数是一个名称(我可以通过字符串中'='字符的数量来确定),那么我可以转到配置文件并获取实际的connectionString以及providerName - 没有问题。

但是如果我传递了一个connectionString,我如何确定要使用哪个providerName,connectionString中是否有一个可以指定此参数的参数,如果它默认为System.Data.SqlClient之类的合理内容,或者是否存在这个真正的标准?

一些代码来说明

    public Db(string nameOrConnectionString)
    {
        string connectionString;
        string providerName;

        string name;
        //some method that determines if the nameOrConnectionString is a name and outputs the name
        if(ParseConnectionStringName(out name)){
            //if its a name i can pull relevant details from config
            var settings = ConfigurationManager.ConnectionStrings[name];
            if (settings == null)
                throw new ArgumentException("nameOrConnectionString");
            connectionString = settings.ConnectionString;
            providerName = settings.ProviderName;
        }
        else
        {
            //nameOrConnectionString is a connectionString, but what is providerName
            connectionString = nameOrConnectionString;
            providerName = "????" //what should this be?
        }


        //I need provider name to get a DbProviderFactory
        DbProviderFactory = DbProviderFactories.GetFactory(providerName);

        //....
    }

3 个答案:

答案 0 :(得分:0)

OLE DB连接字符串将始终具有提供程序值,ODBC连接字符串将始终具有驱动程序。请注意,如果您使用带有ODBC的DSN,则驱动程序将位于DSN中。在所有情况下,确实无法确切知道。我没有使用过很多ORM,但Entity Framework也将提供程序存储在配置文件中。如果其他人也这样做我也不会感到惊讶。

答案 1 :(得分:0)

C#连接字符串包含提供程序名称。默认情况下,缺少平均提供者是System.Data.SqlClient。对于其他提供商,必须提供名称。

答案 2 :(得分:0)

您可以查看如何将提供程序名称添加到连接字符串http://msdn.microsoft.com/en-us/library/system.web.ui.webcontrols.sqldatasource.providername(v=vs.110).aspx

连接字符串具有此格式,您可以将字符串拆分为从nameOrConnectionString

获取提供程序名称
<add name="SqlWinApp.Properties.Settings.ConnectionString" connectionString="Server=215-   6576;User ID=sa; Database=All-PurposeHandyman; Password=password"
  providerName="System.Data.SqlClient" />
相关问题