(1/3) означает целочисленное деление, поэтому вы не можете получить десятичное значение из этого деления. Для решения этой проблемы используйте:
public static void main(String[] args) {
double g = 1.0 / 3;
System.out.printf("%.2f", g);
}
DbConnection GetConnection(string connStr)
{ string providerName = null;
var csb = new DbConnectionStringBuilder{ConnectionString=connStr};
if (csb.ContainsKey("provider"))
{ providerName = csb["provider"].ToString();
}
else
{ var css = ConfigurationManager
.ConnectionStrings
.Cast<ConnectionStringSettings>()
.FirstOrDefault(x=>x.ConnectionString==connStr);
if (css != null) providerName = css.ProviderName;
}
if (providerName != null)
{ var providerExists = DbProviderFactories
.GetFactoryClasses()
.Rows.Cast<DataRow>()
.Any(r=>r[2].Equals(providerName));
if (providerExists)
{ var factory = DbProviderFactories.GetFactory(providerName);
var dbConnection = factory.CreateConnection();
dbConnection.ConnectionString = connStr;
return dbConnection;
}
}
return null;
}
если Вы используете платформу 2.0 или выше, и можно заставить их передавать во второй строке с классом драйвера, можно использовать dbProviderFactory класс для загрузки драйвера для Вас.
DbProviderFactory dbProviderFactory = DbProviderFactories.GetFactory(myDriverClass);
DbConnection dbConnection = dbProviderFactory.CreateConnection();
dbConnection.ConnectionString = myConnectionString;
Вот ссылка MSDN на класс Фабрики: http://msdn.microsoft.com/en-us/library/wda6c36e.aspx
Необходимо быть в состоянии проанализировать раздел Provider и передать его в DbProviderFactories. GetFactory, который возвратит OdbcFactory, OleDbFactory или SqlClientFactory и позволит Вам затем выполнить CreateConnection и т.д.
, я не уверен, как это работало бы с Oracle, если они не обеспечивают OracleDbFactory.
Большинство строк подключения (по крайней мере, в.NET 2.0) также имеет providerName свойство, которое идет с ними. Таким образом, строка подключения SQL сделает, чтобы поставщик Назвал как:
providerName="System.Data.SqlClient"
, Таким образом, Ваш метод должен был бы принять и строку подключения и имя поставщика, и затем Вы могли использовать DbProviderFactory , как упомянуто damieng.