2017-09-24 97 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;