2017-09-24 2 views
0

Je développe une application C# qui exécute des requêtes de ~ 30 sql toutes les secondes ... J'ai plusieurs threads qui font cela. Mon problème est que lorsque j'essaie d'interroger le serveur SQL avec SELECT .... il renvoie des résultats différents.Problème d'incompatibilité de connexion .NET/.NET Core et SQL Server

Exemple: Si exécuter à la fois SELECT * FROM Users et SELECT * FROM Jobs en même temps de différentes discussions que je reçois des réponses comme:

SELECT * FROM Users ->Job colums with Job values

SELECT * FROM Jobs ->User colums with User values

J'utilise Dapper comme ceci:

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}); 
      } 

Mes journaux d'application ressemblent à (c.-à-d. la requête retourne pas de données du modèle d'utilisateur):

Une exception est survenue lors de l'obtention de l'emploi de l'utilisateur: un constructeur par défaut sans paramètre ou une signature correspondante (System.Int32 Id, System.Int32 UserId, System.Decimal salaires, System.DateTime UpdatedAt) est nécessaire pour la matérialisation SampleApp.User

Mon application est très différent de ce complexe, mais cela devrait être bon comme exemple ...

+0

ont peut-être un coup d'œil à ceci: https://stackoverflow.com/questions/21917836/connection-pool-one-process-many-threads –

+0

L'exception dans votre journal d'application ne sont pas des jeux de résultats sur mauvais à partir des requêtes - il s'agit d'être capable d'instancier le 'new' type anonyme à l'exécution. –

+0

Au lieu d'utiliser JobId dans votre requête de sélection, vérifiez avec select * que vous essayez de matérialiser avec votre type d'utilisateur si vous sélectionnez JobId –

Répondre

0

Vous devez utiliser différents lecteur sql ou comm sql et pour la bonne solution. Essayez ceci;

 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;