zoukankan      html  css  js  c++  java
  • 之前用存储过程错了。现在改正过来。

    public bool InsertInvitation(DataTable dt)
            {
                SqlTransaction transaction = null;
                try
                {
                    using (SqlConnection conn = new SqlConnection(sqlHelper.SQLConString))
                    {
    
    
                        conn.Open();
                        transaction = conn.BeginTransaction();
                        SqlBulkCopy sbc = new SqlBulkCopy(conn, SqlBulkCopyOptions.CheckConstraints, transaction);
                        //服务器上目标表的名称
                        sbc.DestinationTableName = dt.TableName;
                        sbc.BatchSize = dt.Rows.Count;
                        sbc.BulkCopyTimeout = 180;
                        sbc.WriteToServer(dt);
    
                        SqlCommand cmd = new SqlCommand();
                        cmd.CommandType = CommandType.Text;
                        cmd.Connection = conn;
                        cmd.Transaction = transaction;
                        cmd.CommandText = "insert AABB(ID)values(1)";
                        cmd.ExecuteNonQuery();
                        Convert.ToInt32("sdfs");
                        transaction.Rollback();
    
                    }
                }
                catch (Exception ex)
                {
                    transaction.Rollback();
                    LogMsg.WriteLogToApplicationFolderByMonth(ex.ToString());
                    return false;
                }
                return true;
            }

    当报异常的时候,transaction会引发“此 SqlTransaction 已完成;它再也无法使用。”

    改成下面的样子则无碍。另外,使用事务的时候,要注意将SqlTransaction赋给执行命令的SqlTransaction,如

    SqlBulkCopy sbc = new SqlBulkCopy(conn, SqlBulkCopyOptions.CheckConstraints, transaction);、cmd.Transaction = transaction;
    public bool InsertInvitation(DataTable dt)
            {
                using (SqlConnection conn = new SqlConnection(sqlHelper.SQLConString))
                {
                    SqlTransaction transaction = null;
                    try
                    {
                        conn.Open();
                        transaction = conn.BeginTransaction();
                        SqlBulkCopy sbc = new SqlBulkCopy(conn, SqlBulkCopyOptions.CheckConstraints, transaction);
                        //服务器上目标表的名称
                        sbc.DestinationTableName = dt.TableName;
                        sbc.BatchSize = dt.Rows.Count;
                        sbc.BulkCopyTimeout = 180;
                        sbc.WriteToServer(dt);
    
                        SqlCommand cmd = new SqlCommand();
                        cmd.CommandType = CommandType.Text;
                        cmd.Connection = conn;
                        cmd.Transaction = transaction;
                        cmd.CommandText = "insert AABB(ID)values(1)";
                        object i=cmd.ExecuteNonQuery();
    if(Convert.toInt32(i)<=0){
    transaction.Rollback();
    }
    transaction.Commit(); } catch (Exception ex) { transaction.Rollback(); LogMsg.WriteLogToApplicationFolderByMonth(ex.ToString()); return false; } } return true; }
  • 相关阅读:
    【持续更新】GDB使用笔记
    PL/SQL Developer-官网下载地址
    kali 下程序卸载方法
    python2 安装scrapy出现错误提示解决办法~
    pyHook监听用户鼠标、键盘事件
    pip 安装pandas报UnicodeDecodeError: 'ascii' codec can't decode byte 0xd5错
    Python模块常用的几种安装方式
    解决Kali Linux没有声音
    关于破解路由器密码
    解决Python2.7的UnicodeEncodeError: ‘ascii’ codec can’t encode异常错误
  • 原文地址:https://www.cnblogs.com/hougelou/p/3546125.html
Copyright © 2011-2022 走看看