0

各データに複数のテーブルを挿入するためにそのsqltransactionを使用しています。

しかし、データベースに2つの同じデータがあるという問題があります。

その問題を解決するにはどうすればよいですか?

私を助けてください?ありがとう

SqlConnection baglanti = system.baglan();

            SqlCommand Trislem1_Ekle = new SqlCommand("Insert tblTr (Ad,TipID,BolgeID,Yerler,Resim) values(@Ad,@TipID,@BolgeID,@Yerler,@Resim)  SELECT SCOPE_IDENTITY()", baglanti);
            SqlCommand Tr2_TrAciklama = new SqlCommand("Insert tblTrAciklamaDetay (TrID,TrProgram) values((SELECT IDENT_CURRENT('tblTr')),@TrProgram)", baglanti);

            Trislem1_Ekle.Parameters.AddWithValue("@Ad", txtTrAd.Text);
            Trislem1_Ekle.Parameters.AddWithValue("@TipID", dlTrTip.SelectedValue);

            Trislem1_Ekle.Parameters.AddWithValue("@BolgeID", BolgeID.SelectedValue);
            Trislem1_Ekle.Parameters.AddWithValue("@Yerler", Yerler.Text);
            Trislem1_Ekle.Parameters.AddWithValue("@Resim", Resim.SelectedValue);

            Tr2_TrAciklama.Parameters.AddWithValue("@TrProgram", TrProgram.Text);

            SqlTransaction sqlTrans = baglanti.BeginTransaction();

            Trislem1_Ekle.Transaction = sqlTrans;
            Tr2_TrAciklama.Transaction = sqlTrans;
            try
            {
                Trislem1_Ekle.ExecuteNonQuery();
                Tr2_TrAciklama.ExecuteNonQuery();
                string SonIDGelen = Trislem1_Ekle.ExecuteScalar().ToString();
               sqlTrans.Commit();

            }
           catch (Exception hata)
            {
                Response.Write("İşleminiz yapılamadı, Oluşan Hatanın Detayı<br />" + hata);
               sqlTrans.Rollback(); 
            }

            finally
            {  
                baglanti.Close();
                baglanti.Dispose();
                Trislem1_Ekle.Dispose();
                Tr2_TrAciklama.Dispose();

            }
4

2 に答える 2

4

私が見る限り、Trislem1_Ekleコマンドを 2 回実行しています。

と一つ

Trislem1_Ekle.ExecuteNonQuery();

もう1つは;

string SonIDGelen = Trislem1_Ekle.ExecuteScalar().ToString();

最初のものを削除するだけで十分です。両方ともクエリExecuteNonQueryを実行し、さらに最初の行の最初の列を返します。ExecuteScalarExecuteScalar

データベース接続とコマンドを手動で破棄する代わりに、代わりにusingステートメントを使用してください。

using(SqlConnection conn = new SqlConnection(conString))
{    
   using(SqlCommand cmd = conn.CreateCommand())
   {
      // Create your commands
      // Add your parameter values
      // Execute your commands
   }
}

AddWithValueそして、メソッドを使用しないでください。予期しない結果が生じる場合があります。.Add()代わりにメソッドとオーバーロードを使用してください。

于 2014-11-16T19:07:39.253 に答える
0

このようにしてみてください

ExecuteScalar()コマンドで2回実行していると思いますTrislem1_Ekle

            Trislem1_Ekle.ExecuteNonQuery();    
            Tr2_TrAciklama.ExecuteNonQuery();
            string SonIDGelen = Trislem1_Ekle.ExecuteScalar().ToString();

これに置き換えます:

            string SonIDGelen = Trislem1_Ekle.ExecuteScalar().ToString();
            Tr2_TrAciklama.ExecuteNonQuery();
于 2014-11-16T19:07:25.787 に答える