簡體   English   中英

多個Sql插入字符串和RollBack與Catch(例外)

[英]Multiple Sql Insert String And RollBack With Catch(Exception)

如果我必須插入兩個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語句。 建議我正確的解決方案或正確的方法,技術。

您可以在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();
        }
    }

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM