2017-09-24 104 views
0

我正在开发每秒执行〜30个SQL查询的C#应用​​程序......我有多个线程可以做到这一点。我的问题是,当我试图用SELECT ....查询sql服务器时,它返回不同的结果。.NET/.NET核心和SQL Server连接不匹配问题

例子: 如果运行在不同的线程我得到相同的时间都SELECT * FROM UsersSELECT * FROM Jobs样应答:

SELECT * FROM Users - >Job colums with Job values

SELECT * FROM Jobs - >User colums with User values

我使用小巧精致的像这个:

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标识, System.Int32用户ID,System.Decimal工资, System.DateTime的UpdatedAt) 需要SampleApp.User物化

我的应用程序是从这个复杂的,但是这应该是好例子非常不同......

+0

也许看看这个:https://stackoverflow.com/questions/21917836/connection-pool-one-process-many-threads –

+0

在应用程序日志中的例外,是不是错的结果集从查询 - 它是关于能够在运行时实例化'new'匿名类型。 –

+0

而不是在您的选择查询中使用JobId,请选择*,因为您尝试使用您的用户类型实现,但您选择JobId –

回答

0

必须使用不同的阅读器的SQL或SQL COMM并为正确的解决方案。 尝试一下;

 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;