Я получаю следующую ошибку, когда в своем коде я использую определенную функцию, которая выполняет тонну других вызовов базы данных с транзакцией.
System.ArgumentNullException: Value cannot be null.
Parameter name: connection
at Microsoft.Practices.EnterpriseLibrary.Data.Database.PrepareCommand(DbCommand command, DbConnection connection)
at Microsoft.Practices.EnterpriseLibrary.Data.Database.PrepareCommand(DbCommand command, DbTransaction transaction)
at Microsoft.Practices.EnterpriseLibrary.Data.Database.ExecuteNonQuery(DbCommand command, DbTransaction transaction)
at net.cadat.dataManager.dbConn.DataAccess.execute(String storedProcedure, StoredProcedureParameter[] sqlParameters)
Хотя было бы сложно опубликовать весь мой исходный код, в основном поток вызовов базы данных выглядит так:
_db = DatabaseFactory.CreateDatabase();
_conn = _db.CreateConnection();
_conn.Open();
if (_transaction == null)
_transaction = _conn.BeginTransaction();
// later in code
_command = _db.GetStoredProcCommand(storedProcedure);
DataSet ds = null;
if (_transaction == null)
ds = _db.ExecuteDataSet(_command);
else
ds = _db.ExecuteDataSet(_command, _transaction);
Очевидно, что приведенный выше код охватывает различные функции класса базы данных. Я называю это "класс DA". Таким образом, класс DA передается в каждом значении BY функции, и кажется, что когда DA передается, транзакции или соединения исчезают?!?!
Недавно я убедился, что сборка предназначена для платформы .Net 4.0, потому что раньше она была 2.0, и я понял, что в 2.0 есть ошибка, связанная с исчезновением параметра соединения в GC.
все же это все еще происходит. Параметр соединения исчезает при его передаче. Ошибка происходит, когда первый вызов базы данных происходит в этой конкретной функции и перед фиксацией транзакции.
Пожалуйста, помогите.