c# - 多个Sql插入字符串并使用Catch回滚(异常)

标签 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 类以进行回滚和提交会存在很大的问题。使用 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/

相关文章:

c# - 在 WebAPI 中使用自定义 IHttpActionInvoker 进行异常处理

java - 消除读取和写入数据时sql server 2008的死锁问题

c# - .NET 程序集中 BadImageFormatException 的其他原因?

visual-studio - 当我在 Azure 中运行 Visual Studio 探查器时未找到符号

c++ - 我需要在 autoexp.dat 中输入什么才能检查 vector 中包含的类的数据成员?

c# - 使用 Lambda 表达式选择类方法名称

c# - 即使服务器端没有数据,NetworkStream.DataAvailable 也为真

c# - 单击行标题内的切换按钮时如何更改数据网格行背景?

sql - 如何在 SQL Server 2008 中最好地进行部分文本匹配

sql-server - 将日期时间转换为 UTC 值 mssql