如果我必须插入两个sql表并且字符串的位置如下:
// Single Record Insert
String AA=”Insert into aa(date)values(@date)”;
//Multiple Record Insert with datagridview1
For(int i=0;i<datagridview1.rows.count-1;i++)
{
String BB= “insert into bb(name,amount)values(@name,@amount)”;
}
如果按上述方式在按钮单击事件上通过单个和多个插入有两个不同的 sql 插入字符串,那么是否可以在单个 sql 命令上处理它(如果是)而不是回复如何?。
但据我认为,通过单个 SqlCommand 是不可能的,如果这是真的,那么调整 SqlTransaction 类以进行回滚和提交会存在很大的问题。使用 EventHandler 的 try 和 catch block
我真的很难在一个 Button1_Click 事件中插入如上所述的多个 sql 语句。建议我正确的解决方案或正确的方法、技术。
最佳答案
您可以在 ADO.NET 代码中显式定义事务。
private void button1_Click(object sender, EventArgs e)
{
SqlConnection db = new SqlConnection("constring");
SqlCommand com = new SqlCommand();
SqlCommand com2 = new SqlCommand();
SqlTransaction tran;
db.Open();
tran = db.BeginTransaction();
try
{
//Run all your insert statements here here
com.CommandText = "Insert into a(Date) Values(@Date)";
com.Connection = db;
com.Transaction = tran;
com.Parameters.Add("@Date", SqlDbType.DateTime);
com.Parameters["@Date"].Value = DateTime.Now;
com.ExecuteNonQuery();
com2.CommandText = "Insert into bb(name,amount) values(@name, @amount)";
com2.Connection = db;
com2.Transaction = tran;
com2.Parameters.Add("@name", SqlDbType.VarChar, 25);
com2.Parameters.Add("@amount", SqlDbType.Decimal);
for (int i = 0; i < datagrid.Rows.Count; i++)
{
//on each loop replace @name value and @amount value with appropiate
//value from your row collection
com2.Parameters["@name"].Value = datagrid.Rows[i].Cells["Name"].Value;
com2.Parameters["@amount"].Value = datagrid.Rows[i].Cells["Amount"].Value;
com2.ExecuteNonQuery();
}
tran.Commit();
}
catch (SqlException sqlex)
{
tran.Rollback();
}
finally
{
db.Close();
}
}
关于c# - 多个Sql插入字符串并使用Catch回滚(异常),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6882574/