我正在编写自己的类来包装一些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);
//....
}
答案 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" />