SQL 事务在插入数据时插入双记录
本文关键字:插入 记录 数据 SQL 事务 | 更新日期: 2023-09-27 18:30:41
我正在使用该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();
}
据我所知,您执行了两次Trislem1_Ekle
命令。
一个与
Trislem1_Ekle.ExecuteNonQuery();
另一个与;
string SonIDGelen = Trislem1_Ekle.ExecuteScalar().ToString();
删除第一个似乎就足够了。ExecuteNonQuery
和 ExecuteScalar
都会执行查询,ExecuteScalar
还返回第一行的第一列。
不要手动释放数据库连接和命令,而是改用using
语句。
using(SqlConnection conn = new SqlConnection(conString))
{
using(SqlCommand cmd = conn.CreateCommand())
{
// Create your commands
// Add your parameter values
// Execute your commands
}
}
并且不要使用AddWithValue
方法。它可能会产生一些未扩展的结果。请改用.Add()
方法和重载。
- 我们可以停止使用
AddWithValue()
吗?
尝试这样做
我认为您在命令Trislem1_Ekle
上执行了两次ExecuteScalar()
Trislem1_Ekle.ExecuteNonQuery();
Tr2_TrAciklama.ExecuteNonQuery();
string SonIDGelen = Trislem1_Ekle.ExecuteScalar().ToString();
替换为:
string SonIDGelen = Trislem1_Ekle.ExecuteScalar().ToString();
Tr2_TrAciklama.ExecuteNonQuery();