我在执行源代码时遇到此错误 . 但似乎我无法在互联网上获得太多信息 . 因此,我希望可以从这里的专业人士那里获得一些线索 .
源代码
public List<string> GetData (List<long> Id)
{
List<string> data;
string sql = "select * from tblSample with(nolock) where SampleId in @sampleId";
Dapper.DynamicParameters param = new Dapper.DynamicParameters();
param.Add("@sampleId", Id);
try
{
data = this.queryrunner.QueryList(sql, param);
}
catch (Exception ex)
{
logger.Error(ex.Message, ex);
}
return data;
}
QueryRunner类方法
private void OpenConnection()
{
if (this.conn.State != ConnectionState.Open)
{
this.conn.Open();
}
}
public List<t> QueryList(String sql, DynamicParameters param)
{
List<t> t;
try
{
OpenConnection();
t = this.conn.Query<t>(sql, param).ToList();
}
catch (System.Data.SqlClient.SqlException ex)
{
logger.Debug(ex.Message, ex);
LogSqlErrorException(this.conn.Database, sql, param);
throw;
}
finally
{
CloseConnection();
}
return t;
}
以下是错误日志的一部分: -
System.InvalidOperationException:当前的TransactionScope已经完成 . 在System.Data.ProviderBase.DbConnectionPool.GetFromTransactedPool(事务和事务)的System.Transactions.Transaction.get_Current()处于System.Data.ProviderBase.DbConnectionPool.TryGetConnection(DbConnection owningObject,UInt32 waitForMultipleObjectsTimeout,Boolean allowCreate,Boolean onlyOneCheckConnection,DbConnectionOptions userOptions,在System.Data.ProviderBase.DbConnectionFactory.TryGetConnection的System.Data.ProviderBase.DbConnectionPool.TryGetConnection(DbConnection owningObject,TaskCompletionSource1 retry,DbConnectionOptions userOptions,DbConnectionInternal&connection)上的DbConnectionInternal&connection)(DbConnection owningConnection,TaskCompletionSource1 retry,DbConnectionOptions userOptions,DbConnectionInternal oldConnection,DbConnectionInternal& System.Data.ProviderBase.DbConnectionInternal.TryOpenConnectionInternal(DbConnection outerConnection,DbConnectionFactory connectionFactory,TaskCompletionSource1 retry,DbConnectionOptions userO)在System.Data.SqlClient.SqlConnection.TryOpen的System.Data.SqlClient.SqlConnection.TryOpenInner(TaskCompletionSource1 retry)处的System.Data.ProviderBase.DbConnectionClosed.TryOpenConnection(DbConnection outerConnection,DbConnectionFactory connectionFactory,TaskCompletionSource1 retry,DbConnectionOptions userOptions)处于() . System.Data.SqlClient.SqlConnection.Open()中的TaskCompletionSource1重试)
1 回答
这条线
OpenConnection
有点气味,我猜这是你的问题所在这会更有意义
这样你就迫使自己控制连接生命周期而不是试图变得棘手,然后在另一个环境中猜测它