【发布时间】:2014-08-30 13:24:26
【问题描述】:
我对 dapper 有一个非常奇怪的错误:
已经有一个打开的 DataReader 与此命令关联 必须先关闭
但我不使用 DataReader!我只是在我的服务器应用程序上调用选择查询并获取第一个结果:
//How I run query:
public static T SelectVersion(IDbTransaction transaction = null)
{
return DbHelper.DataBase.Connection.Query<T>("SELECT * FROM [VersionLog] WHERE [Version] = (SELECT MAX([Version]) FROM [VersionLog])", null, transaction, commandTimeout: DbHelper.CommandTimeout).FirstOrDefault();
}
//And how I call this method:
public Response Upload(CommitRequest message) //It is calling on server from client
{
//Prepearing data from CommitRequest
using (var tr = DbHelper.DataBase.Connection.BeginTransaction(IsolationLevel.Serializable))
{
int v = SelectQueries<VersionLog>.SelectVersion(tr) != null ? SelectQueries<VersionLog>.SelectVersion(tr).Version : 0; //Call my query here
int newVersion = v + 1; //update version
//Saving changes from CommitRequest to db
//Updated version saving to base too, maybe it is problem?
return new Response
{
Message = String.Empty,
ServerBaseVersion = versionLog.Version,
};
}
}
}
最可悲的是,这个异常出现在随机时间,我认为从两个客户端并发访问服务器有什么问题。
请帮忙。
【问题讨论】:
-
您是否对该代码段有另一个数据库查询?也许这部分在运行另一个查询的循环中?
-
你能把整个代码贴出来吗??
-
不,我没有其他查询,我只是获取版本,更新它并写入基础。我更新了我的第一条消息并编写了更多代码。代码太大,我稍微删减了(注释掉了)