Obtenir une exception étrange de ExecuteScalar()
laquelle je ne trouve aucune aide sur le web:
Impossible de poursuivre l'exécution car la session est à l'état d'arrêt.
J'utilise SqlConnection / SqlCommand
La command est un INSERT INTO de base … avec 105 colonnes (et 105 parameters pour définir datatables de la colonne) suivi d'un SELECT SCOPE_IDENTITY ();
J'ai vérifié la string de connection – c'est correct et la connection est ouverte.
Je ne suis même pas sûr de ce que cette erreur me dit de savoir où commencer à regarder celui-ci.
Alors, que signifie exactement cette erreur? Comment une session passe-t-elle à l'état de kill pour commencer?
Le code est assez simple:
using (SqlConnection conn = new SqlConnection(connSsortingng)) { conn.Open(); using (SqlCommand cmd = new SqlCommand(@"INSERT INTO VendorNote (VendorId, AdminComment...) VALUES (@VendorId, @AdminComment, ...); SELECT SCOPE_IDENTITY(); ", conn)) { cmd.Parameters.AddWithValue("@VendorId", VendorId); cmd.Parameters.AddWithValue("@AdminComment", AdminComment); Id = (int) cmd.ExecuteScalar(); } }
TROUVEZ-LE!
Une violation de contrainte dans la requête entraînait l'échec de l'exécution de la requête. Au lieu de rapporter cette information dans l'exception – cela indiquait que la session était dans un "état de destruction" (je devine) parce que la requête était terminée prématurément.
Je n'ai jamais vu cette erreur auparavant – normalement les erreurs de contraintes et autres ont quelque chose de plus utile dans l'exception.
Donc, tout le monde qui obtient cette erreur – VRAIMENT vérifier votre requête pour s'assurer que c'est valide.
Votre code devrait ressembler à ceci:
const ssortingng sqlSsortingng = "INSERT INTO dbo.Table ( ....) " + " VALUES ( .... );" + "SELECT SCOPE_IDENTITY();"; using (conn) { using (var cmd = new SqlCommand(sqlSsortingng, conn)) { cmd.Parameters.AddWithValue("@param", param); cmd.CommandType = CommandType.Text; conn.Open(); return (int) (decimal) cmd.ExecuteScalar(); } }
Mais notez parfois qu'une procédure stockée sera plus appropriée