多个Sql插入字符串和RollBack与Catch(例外)

时间:2011-07-30 10:31:43

标签: c# sql-server visual-studio

如果我必须插入两个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语句。建议我正确的解决方案或正确的方法,技术。

1 个答案:

答案 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();
        }
    }