我正在使用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();
}
答案 0 :(得分:4)
据我所知,你执行Trislem1_Ekle
命令两次。
一个
Trislem1_Ekle.ExecuteNonQuery();
和另一个;
string SonIDGelen = Trislem1_Ekle.ExecuteScalar().ToString();
删除第一个似乎已经足够了。 ExecuteNonQuery
和ExecuteScalar
都会执行您的查询,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()
方法并重载。
答案 1 :(得分:0)
试试这个
我认为您在Command ExecuteScalar()
Trislem1_Ekle
Trislem1_Ekle.ExecuteNonQuery();
Tr2_TrAciklama.ExecuteNonQuery();
string SonIDGelen = Trislem1_Ekle.ExecuteScalar().ToString();
替换为:
string SonIDGelen = Trislem1_Ekle.ExecuteScalar().ToString();
Tr2_TrAciklama.ExecuteNonQuery();