2014-11-16 30 views
0

我正在使用sqltransaction爲每個數據插入多個表。sqltransaction在插入數據時插入雙記錄

但我有問題,有數據庫有兩個相同的數據。

我該如何解決該問題?

請幫幫我嗎?感謝名單

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

據我看到的,你執行兩次你的Trislem1_Ekle命令。

一個與

Trislem1_Ekle.ExecuteNonQuery(); 

,另一個用;

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

刪除第一個似乎就夠了。 ExecuteNonQueryExecuteScalar都會執行您的查詢,並且ExecuteScalar還會返回第一行的第一列。

而不是手動配置數據庫連接和命令,而是使用using statement

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

而且不要用AddWithValue的方法。它可能會產生一些未被檢測到的結果。改爲使用.Add()方法和重載。

0

嘗試這樣

我覺得你是在命令執行ExecuteScalar()兩次Trislem1_Ekle

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

替換這樣的:

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

不好聽給予不正確的答案,然後解決它,當你看到正確的。更好地刪除並嘗試另一個。他們每秒都來 – Steve

+0

@Steve看到我的第一個編輯...格式化並添加Expl req。時間或你可以看到我的答案時間19:07:25Z –