如果我必须插入两个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类以进行回滚和提交会有很大的问题。使用EventHandller的try和catch块
我真的很难在一个Button1_Click事件中插入多个sql语句。建议我正确的解决方案或正确的方法,技术。
答案 0 :(得分:4)
您可以在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();
}
}