我正在开发C#应用程序,它每秒执行~30次sql查询...我有多个线程可以做到这一点。我的问题是,当我尝试使用SELECT ....
查询sql server时,它会返回不同的结果。
实施例:
如果同时从不同的线程同时运行SELECT * FROM Users
和SELECT * FROM Jobs
,我会得到如下响应:
SELECT * FROM Users
- > Job colums with Job values
SELECT * FROM Jobs
- > User colums with User values
我正在使用这样的Dapper:
using (var connection = new SqlConnection(_msSqlProvider.ConnectionString))
{
connection.Open();
return connection.Query<User>(
@"SELECT JobId
FROM Users
WHERE Id = @userId
ORDER BY Id ASC",
new {userId});
}
我的应用程序日志看起来像(即查询返回的不是用户模型数据):
获取用户工作时发生异常:无参数 默认构造函数或一个匹配的签名(System.Int32 Id, System.Int32 UserId,System.Decimal Salary,System.DateTime UpdatedAt) SampleApp.User实现
是必需的
我的应用程序与此非常不同且很复杂,但这应该是很好的例子......
解决方案: 如果有人在阅读这个问题时对解决方案感兴趣 - 启用MARS和连接池解决了我的问题......
答案 0 :(得分:0)
必须使用不同的sql reader或sql命令才能获得正确的解决方案。 试试这个;
double vId;
SqlDataReader dr = null;
if (db.OpenDR(ref dr, string.Format("select JobId from dbo.Users where Id={0}", vUSERID)))
{
if (dr.Read()) vId = dr["JobId"].dToDouble();
dr.Close();
}
return vId;