2014-11-16 25 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 –