Jac*_*Loo 5 c# sql-server exception invalidoperationexception
我在执行源代码时遇到此错误。但我在网上能找到的信息似乎不多。因此,我希望可以从这里的专业人士那里得到一些线索。
源代码
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;
}
Run Code Online (Sandbox Code Playgroud)
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;
}
Run Code Online (Sandbox Code Playgroud)
这是错误日志的一部分:-
System.InvalidOperationException:当前 TransactionScope 已完成。
在System.Transactions.Transaction.get_Current()
在System.Data.ProviderBase.DbConnectionPool.GetFromTransactedPool(Transaction& transaction)
在System.Data.ProviderBase.DbConnectionPool.TryGetConnection(DbConnection owningObject, UInt32 waitForMultipleObjectsTimeout, 布尔allowCreate, 布尔onlyOneCheckConnection, DbConnectionOptions userOptions, DbConnectionInternal&连接)
在System.Data.ProviderBase.DbConnectionPool.TryGetConnection(DbConnection owningObject,TaskCompletionSource 1重试,DbConnectionOptions userOptions,DbConnectionInternal oldConnection,DbConnectionInternal&连接) 在System.Data.ProviderBase.DbConnectionInternal.TryOpenConnectionInternal(DbConnectionouterConnection,DbConnectionFactoryconnectionFactory,TaskCompletion源1 重试、DbConnectionOptions userOptions) 在 System.Data.SqlClient.SqlConnection.TryOpenInner(TaskCompletionSource 1 重试) 在 System.Data.SqlClient.SqlConnection.Open()1 retry, DbConnectionOptions userOptions, DbConnectionInternal& connection)
at System.Data.ProviderBase.DbConnectionFactory.TryGetConnection(DbConnection owningConnection, TaskCompletionSource1 retry, DbConnectionOptions userOptions)
at System.Data.ProviderBase.DbConnectionClosed.TryOpenConnection(DbConnection outerConnection, DbConnectionFactory connectionFactory, TaskCompletionSource1 retry)
at System.Data.SqlClient.SqlConnection.TryOpen(TaskCompletionSource
这条线OpenConnection有点味道,我猜这就是你的问题所在
try
{
OpenConnection();
...
Run Code Online (Sandbox Code Playgroud)
这会更有意义
try
{
//OpenConnection();
conn.Open();
queryrunner.QueryList(sql, param)
}
finally
{
//CloseConnection();
conn.Close();
}
Run Code Online (Sandbox Code Playgroud)
这样,您就可以强迫自己控制连接生命周期,而不是试图变得棘手并在另一个上下文中进行第二次猜测
如果你把它放在一个声明中实际上会更好
using,但是我不确定你正在使用的框架和/或语法
| 归档时间: |
|
| 查看次数: |
7632 次 |
| 最近记录: |