Rambler's Top100
Главная
Новости
Статьи
Форумы
Книги
Коды
Сообщество
Блоги
О нас
 

Логин

Email:
  Пароль:

Войти
Зарегистрироваться
Забыл пароль

Поиск

 Искать :
 
Вперед

Сообщение

Dimon aka Manowar


Владетель

Зарегистрирован:
29 September 2002
Сообщения: 20461
Примеры кода: 12
 

RE: Вопрос про подключение к любой БД

26 June 2008 22:02  


Вариант а - реализовать свой провайдер для работы с данными и соотв писать реализации для 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;
}


Многие вещи нам непонятны не оттого, что наши понятия слабы, а оттого, что данные вещи не входят в круг наших понятий.
Наверх
  



Общие вопросы программирования на ASP.NET

 Вопрос про подключение к любой БДD_A_S1  26 June 2008 09:34
 Re: Вопрос про подключение к любой БДГость_М  15 July 2008 23:27
 RE: Вопрос про подключение к любой БДDimon aka Manowar  26 June 2008 22:02
 RE[2]: Вопрос про подключение к любой БДMax Pro  27 June 2008 11:25
 Re: Вопрос про подключение к любой БДDmitdd  26 June 2008 15:38
 Re: Вопрос про подключение к любой БДD_A_S1  26 June 2008 12:38
 Re: Вопрос про подключение к любой БДНахлобуч  26 June 2008 12:08
 Re: Вопрос про подключение к любой БДD_A_S1  26 June 2008 12:03
 Re: Вопрос про подключение к любой БДГость_М  26 June 2008 11:49
 Re: Вопрос про подключение к любой БДНахлобуч  26 June 2008 11:38
 Re: Вопрос про подключение к любой БДMax Pro  26 June 2008 11:31
 Re: Вопрос про подключение к любой БДMax Pro  26 June 2008 11:24
 Re: Вопрос про подключение к любой БДD_A_S1  26 June 2008 10:14
 Re: Вопрос про подключение к любой БДSQL_Lamer  26 June 2008 10:12
 Re: Вопрос про подключение к любой БДD_A_S1  26 June 2008 10:06
 Re: Вопрос про подключение к любой БДSQL_Lamer  26 June 2008 10:03
 Re: Вопрос про подключение к любой БДShSerge  26 June 2008 09:58
 Re: Вопрос про подключение к любой БДD_A_S1  26 June 2008 09:54
 Re: Вопрос про подключение к любой БДSQL_Lamer  26 June 2008 09:50
 
Наш Киев

Apartments for Rent

Rambler's Top100
Рейтинг@Mail.ru
Идея: Dimon aka Manowar Программирование: Dimon aka Manowar Дизайн: Dan Lebedev
Хостинг от компании Parking.ru
Карта сайта