SqlTransaction après la connexion de transaction catch est null

J’ai une boucle où j’appelle une procédure stockée avec une valeur de paramètre différente. Appel suivant cmd.ExecuteNonQuery(); J’utilise transaction pour enregistrer tout ou annuler, et checkBox2 – enregistrer toujours. J’ai trouvé un problème et je ne trouve pas de solution. Après le premier problème lorsque le bloc catch est déclenché, l’object de transaction perd sa connexion. t.connection est nulle! Tout est bon mais l’object transaction est sans connexion au début il en a!

  try { while (!sr.EndOfStream) { strLine.Remove(0, strLine.Length); //c = sr.ReadLine(); while (c != "-") { c = sr.ReadLine(); strLine.Append(c ); if (sr.EndOfStream) break; } //strLine.Append("Nowa pozycja"); try { cmd.Parameters["@s"].Value = strLine.ToSsortingng(); cmd.Parameters["@Return_value"].Value = null; cmd.ExecuteNonQuery(); } catch { if (cmd.Parameters["@Return_value"].Value == null) { cmd.Parameters["@Return_value"].Value = -100; } if (((int)cmd.Parameters["@Return_value"].Value == 100) || (checkBox2.Checked)) { if ((int)cmd.Parameters["@Return_value"].Value != 100) { MessageBox.Show("Są błedy! " + cmd.Parameters["@s"].Value); }; } } if (!checkBox2.Checked) { if ((Int32)cmd.Parameters["@Return_value"].Value != 100) { break; } } c = ""; } textBox1.Text = strLine.ToSsortingng(); } catch { // t.Rollback(); // t = null; textBox1.Text = strLine.ToSsortingng(); textBox1.Visible = true; MessageBox.Show("Wystąpiły problemy w czasie importu " + cmd.Parameters["@s"].Value); //return; } finally { if (cmd.Parameters["@Return_value"].Value == null) { cmd.Parameters["@Return_value"].Value = -100; } if (((int)cmd.Parameters["@Return_value"].Value==100)||(checkBox2.Checked)) { t.Commit(); if ((int)cmd.Parameters["@Return_value"].Value!=100) { MessageBox.Show("Transakcja zapisana ale w pliku były błedy! " + cmd.Parameters["@s"].Value); }; } else { if (t!=null) {t.Rollback();} MessageBox.Show("Transakcja odrzucona!"); } conn2.Close(); aFile.Close(); } 

entrez la description de l'image ici

Couru dans un problème similaire. Dans mon cas, cela se passait pour une exception spécifique. La plupart des exceptions seraient capturées et gérées correctement, mais chaque fois que je recevais une erreur de conversion (telle que la conversion d’une chaîne en un nombre), la transaction était automatiquement terminée.

Pour résoudre ce problème, j’ai dû implémenter la vérification des données (bonne idée quand même) avant de générer / soumettre l’object de commande. J’espère que cela aidera les autres à voir cette erreur étrange.

J’ai également rencontré ce problème étrange (conversion de nvarchar en exception entière).

Dans ma solution, je reconstruis le transacton s’il est trouvé que la connexion sous-jacente est nulle. Mais c’est un sale boulot.

entrez la description de l'image ici