Вариант а - реализовать свой провайдер для работы с данными и соотв писать реализации для SQL и Oracle отдельно.
Вариант б - общий. У меня уложился примерно в такой набор методов:
protected string connStr;
protected string providerFactory;
public CommonDB(string ConnectionStringName)
{
connStr = ConfigurationManager.ConnectionStrings[ConnectionStringName] != null ? ConfigurationManager.ConnectionStrings[ConnectionStringName].ConnectionString : "";
providerFactory = ConfigurationManager.ConnectionStrings[ConnectionStringName] != null ? ConfigurationManager.ConnectionStrings[ConnectionStringName].ProviderName : "";
Init();
}
protected static DbConnection GetConnection(string factory, string str)
{
DbConnection ret = DbProviderFactories.GetFactory(factory).CreateConnection();
ret.ConnectionString = str;
return ret;
}
public static DbCommand GetCommand(DbConnection conn, string command)
{
DbCommand ret = conn.CreateCommand();
ret.CommandText = command;
ret.CommandType = CommandType.StoredProcedure;
ret.CommandTimeout = 30;
return ret;
}
protected static DbParameter GetParameter(string factory, string name, object value)
{
DbParameter ret = DbProviderFactories.GetFactory(factory).CreateParameter();
ret.ParameterName = name;
ret.Value = value;
return ret;
}
Ну и пример использования:
public virtual object Set(DbConnection myConn, DbTransaction myTran)
{
string key = GetKey(this.ID);
SetPrepare();
DbCommand myCmd = GetCommand(myConn, _setProcName);
myCmd.CommandTimeout = 180;
if (myTran != null)
myCmd.Transaction = myTran;
foreach (string field in fields)
{
if (_row.ContainsKey(field) && _row[field] != null && _row[field] != Convert.DBNull)
myCmd.Parameters.Add(GetParameter(providerFactory, "@" + field, _row[field]));
}
DbParameter ret = GetParameter(providerFactory, "RETURN_VALUE", null);
ret.Direction = ParameterDirection.ReturnValue;
myCmd.Parameters.Add(ret);
myConn.Open();
myCmd.ExecuteNonQuery();
object retValue = ret.Value;
return retValue;
}
Многие вещи нам непонятны не оттого, что наши понятия слабы, а оттого, что данные вещи не входят в круг наших понятий.
|