zoukankan      html  css  js  c++  java
  • dd

    sql:

    /// <summary>  
    /// 初始化一个DataTable类型的数据源  
    /// <para/>Author : AnDequan  
    /// <para/>Date   : 2011-3-14  
    /// </summary>  
    /// <returns>Source</returns>  
    private DataTable InitSource()  
    {  
        DataTable dtUserAdd = new DataTable();  
        dtUserAdd.Columns.Add(new DataColumn("ID", typeof(int)));  
        dtUserAdd.Columns.Add(new DataColumn("UserName", typeof(string)));  
        dtUserAdd.Columns.Add(new DataColumn("UserPwd", typeof(string)));  
        DataRow drTemp = null;  
        for (int i = 0; i < 100; i++)  
        {  
            drTemp = dtUserAdd.NewRow();  
            drTemp["ID"] = 0;  
            drTemp["UserName"] = "测试" + (i + 1);  
            drTemp["UserPwd"] = "密码" + (i + 1);  
            dtUserAdd.Rows.Add(drTemp);  
        }  
        return dtUserAdd;  
    }  
      
    /// <summary>  
    /// 一次性把DataTable中的数据插入<a href="http://lib.csdn.net/base/mysql" class='replace_word' title="MySQL知识库" target='_blank' style='color:#df3434; font-weight:bold;'>数据库</a>  
    /// <para/>Author : AnDequan  
    /// <para/>Date   : 2011-3-14  
    /// </summary>  
    /// <param name="source">DataTable数据源</param>  
    /// <returns>true - 成功,false - 失败</returns>  
    public bool AddDataTableToDB(DataTable source)  
    {  
        SqlTransaction tran = null;//声明一个事务对象  
        try  
        {  
            using (SqlConnection conn = new SqlConnection("server=.;uid=sa;pwd=sa;database=Test;"))  
            {  
                conn.Open();//打开链接  
                using (tran = conn.BeginTransaction())  
                {  
                    using (SqlBulkCopy copy = new SqlBulkCopy(conn, SqlBulkCopyOptions.Default, tran))  
                    {  
                        copy.DestinationTableName = "AnDequan.dbo.[User]";  //指定服务器上目标表的名称  
                        copy.WriteToServer(InitSource());                      //执行把DataTable中的数据写入DB  
                        tran.Commit();                                      //提交事务  
                        return true;                                        //返回True 执行成功!  
                    }  
                }  
            }  
        }  
        catch (Exception ex)  
        {  
            if (null != tran)  
                tran.Rollback();  
            //LogHelper.Add(ex);  
            return false;//返回False 执行失败!  
        }  
    }
    //执行事务处理
    public void DoTran()
    {  //建立连接并打开
     SqlConnection myConn=GetConn();
     myConn.Open();
     SqlCommand myComm=new SqlCommand();
     //SqlTransaction myTran=new SqlTransaction();
     //注意,SqlTransaction类无公开的构造函数
     SqlTransaction myTran;
     //创建一个事务
     myTran=myConn.BeginTransaction();
     try
     {
      //从此开始,基于该连接的数据操作都被认为是事务的一部分
      //下面绑定连接和事务对象
      myComm.Connection=myConn;
      myComm.Transaction=myTran; //定位到pubs数据库
      myComm.CommandText="USE pubs";
      myComm.ExecuteNonQuery();//更新数据
      //将所有的计算机类图书
      myComm.CommandText="UPDATE roysched SET royalty = royalty * 1.10 WHERE title_id LIKE 'Pc%'";
      myComm.ExecuteNonQuery();
       //提交事务
      myTran.Commit();
     }
     catch(Exception err)
     {
      throw new ApplicationException("事务操作出错,系统信息:"+err.Message);
      }
     finally
     {
      myConn.Close();
      }
    }
    
     private SqlConnection GetConn()
      {
       string strSql="Data Source=localhost;Integrated Security=SSPI;user id=sa;password=";
       SqlConnection myConn=new SqlConnection(strSql);
       return myConn;
      }
     }
     public class Test
     {
      public static void Main()
      {
       DbTranSql tranTest=new DbTranSql();
       tranTest.DoTran();
       Console.WriteLine("事务处理已经成功完成。");
       Console.ReadLine();
      }
     } 
    

      总结:方法一和方法二很类同,唯一不同的是方法一采用的是“insert into tb (...) values(...),(...)...;”的方式执行插入操作,

    方法二则是“insert into tb (...) values (...);insert into tb (...) values (...);...”的方式,要不是测试,我也不知道两者差别是如此之大!

    #region 批量操作
    
            /// <summary>
            ///使用MySqlDataAdapter批量更新数据
            /// </summary>
            /// <param name="connectionString">数据库连接字符串</param>
            /// <param name="table">数据表</param>
            public static void BatchUpdate( DataTable table)
            {
    
                MySqlConnection connection = GetConnection;
                MySqlCommand command = connection.CreateCommand();
                command.CommandTimeout = CommandTimeOut;
                command.CommandType = CommandType.Text;
                MySqlDataAdapter adapter = new MySqlDataAdapter(command);
                MySqlCommandBuilder commandBulider = new MySqlCommandBuilder(adapter);
                commandBulider.ConflictOption = ConflictOption.OverwriteChanges;
    
                MySqlTransaction transaction = null;
                try
                {
                    connection.Open();
                    transaction = connection.BeginTransaction();
                    //设置批量更新的每次处理条数
                    adapter.UpdateBatchSize = BatchSize;
                    //设置事物
                    adapter.SelectCommand.Transaction = transaction;
    
                    if (table.ExtendedProperties["SQL"] != null)
                    {
                        adapter.SelectCommand.CommandText = table.ExtendedProperties["SQL"].ToString();
                    }
                    adapter.Update(table);
                    transaction.Commit();/////提交事务
                }
                catch (MySqlException ex)
                {
                    if (transaction != null) transaction.Rollback();
                    throw ex;
                }
                finally
                {
                    connection.Close();
                    connection.Dispose();
                }
            }
    
            /// <summary>
            ///大批量数据插入,返回成功插入行数
            /// </summary>
            /// <param name="connectionString">数据库连接字符串</param>
            /// <param name="table">数据表</param>
            /// <returns>返回成功插入行数</returns>
            public static int BulkInsert( DataTable table)
            {
                if (string.IsNullOrEmpty(table.TableName)) throw new Exception("请给DataTable的TableName属性附上表名称");
                if (table.Rows.Count == 0) return 0;
                int insertCount = 0;
                string tmpPath = Path.GetTempFileName();
                string csv = DataTableToCsv(table);
                File.WriteAllText(tmpPath, csv);
                using (MySqlConnection conn = GetConnection)
                {
                    MySqlTransaction tran = null;
                    try
                    {
                        conn.Open();
                        tran = conn.BeginTransaction();
                        MySqlBulkLoader bulk = new MySqlBulkLoader(conn)
                        {
                            FieldTerminator = ",",
                            FieldQuotationCharacter = '"',
                            EscapeCharacter = '"',
                            LineTerminator = "
    ",
                            FileName = tmpPath,
                            NumberOfLinesToSkip = 0,
                            TableName = table.TableName,
                        };
                        bulk.Columns.AddRange(table.Columns.Cast<DataColumn>().Select(colum => colum.ColumnName).ToList());
                        insertCount = bulk.Load();
                        tran.Commit();
                    }
                    catch (MySqlException ex)
                    {
                        if (tran != null) tran.Rollback();
                        throw ex;
                    }
                }
                File.Delete(tmpPath);
                return insertCount;
            }
    
            /// <summary>
            ///将DataTable转换为标准的CSV
            /// </summary>
            /// <param name="table">数据表</param>
            /// <returns>返回标准的CSV</returns>
            private static string DataTableToCsv(DataTable table)
            {
                //以半角逗号(即,)作分隔符,列为空也要表达其存在。
                //列内容如存在半角逗号(即,)则用半角引号(即"")将该字段值包含起来。
                //列内容如存在半角引号(即")则应替换成半角双引号("")转义,并用半角引号(即"")将该字段值包含起来。
                StringBuilder sb = new StringBuilder();
                DataColumn colum;
                foreach (DataRow row in table.Rows)
                {
                    for (int i = 0; i < table.Columns.Count; i++)
                    {
                        colum = table.Columns[i];
                        if (i != 0) sb.Append(",");
                        if (colum.DataType == typeof(string) && row[colum].ToString().Contains(","))
                        {
                            sb.Append(""" + row[colum].ToString().Replace(""", """") + """);
                        }
                        else sb.Append(row[colum].ToString());
                    }
                    sb.AppendLine();
                }
    
                return sb.ToString();
            }
    
            #endregion 批量操作
    
    导入自增型数据: 
    自增列重新生成:SqlBulkCopy bc = new SqlBulkCopy(conn)
    
    自增列保留原值:SqlBulkCopy bc = new SqlBulkCopy(conn,SqlBulkCopyOptions.KeepIdentity)
    
    using(SqlBulkCopy sbc = new SqlBulkCopy(conn,SqlBulkCopyOptions.KeepIdentity))
      {
          sbc.DestinationTableName = tableName;
          foreach (string col in colList)
          {
              sbc.ColumnMappings.Add(col, col);
          }
         sbc.BulkCopyTimeout = 0;
         sbc.WriteToServer(dt);
     }
    

      

    1. /// <summary>  
    2. /// 初始化一个DataTable类型的数据源  
    3. /// <para/>Author : AnDequan  
    4. /// <para/>Date   : 2011-3-14  
    5. /// </summary>  
    6. /// <returns>Source</returns>  
    7. private DataTable InitSource()  
    8. {  
    9.     DataTable dtUserAdd = new DataTable();  
    10.     dtUserAdd.Columns.Add(new DataColumn("ID"typeof(int)));  
    11.     dtUserAdd.Columns.Add(new DataColumn("UserName"typeof(string)));  
    12.     dtUserAdd.Columns.Add(new DataColumn("UserPwd"typeof(string)));  
    13.     DataRow drTemp = null;  
    14.     for (int i = 0; i < 100; i++)  
    15.     {  
    16.         drTemp = dtUserAdd.NewRow();  
    17.         drTemp["ID"] = 0;  
    18.         drTemp["UserName"] = "测试" + (i + 1);  
    19.         drTemp["UserPwd"] = "密码" + (i + 1);  
    20.         dtUserAdd.Rows.Add(drTemp);  
    21.     }  
    22.     return dtUserAdd;  
    23. }  
    24.   
    25. /// <summary>  
    26. /// 一次性把DataTable中的数据插入<a href="http://lib.csdn.net/base/mysql" class='replace_word' title="MySQL知识库" target='_blank' style='color:#df3434; font-weight:bold;'>数据库</a>  
    27. /// <para/>Author : AnDequan  
    28. /// <para/>Date   : 2011-3-14  
    29. /// </summary>  
    30. /// <param name="source">DataTable数据源</param>  
    31. /// <returns>true - 成功,false - 失败</returns>  
    32. public bool AddDataTableToDB(DataTable source)  
    33. {  
    34.     SqlTransaction tran = null;//声明一个事务对象  
    35.     try  
    36.     {  
    37.         using (SqlConnection conn = new SqlConnection("server=.;uid=sa;pwd=sa;database=Test;"))  
    38.         {  
    39.             conn.Open();//打开链接  
    40.             using (tran = conn.BeginTransaction())  
    41.             {  
    42.                 using (SqlBulkCopy copy = new SqlBulkCopy(conn, SqlBulkCopyOptions.Default, tran))  
    43.                 {  
    44.                     copy.DestinationTableName = "AnDequan.dbo.[User]";  //指定服务器上目标表的名称  
    45.                     copy.WriteToServer(InitSource());                      //执行把DataTable中的数据写入DB  
    46.                     tran.Commit();                                      //提交事务  
    47.                     return true;                                        //返回True 执行成功!  
    48.                 }  
    49.             }  
    50.         }  
    51.     }  
    52.     catch (Exception ex)  
    53.     {  
    54.         if (null != tran)  
    55.             tran.Rollback();  
    56.         //LogHelper.Add(ex);  
    57.         return false;//返回False 执行失败!  
    58.     }  
    59. }
  • 相关阅读:
    “二柱子四则运算”终结版
    “睡眠猴子”团队项目及成员介绍
    最大联通子数组的和
    构建之法阅读笔记04
    构建之法阅读笔记03
    “进度条”博客——第五周
    构建之法阅读笔记02
    构建之法阅读笔记01
    “进度条”博客——第四周
    课后实验6--二维数组最大联通子数组的和
  • 原文地址:https://www.cnblogs.com/JK1989/p/7131033.html
Copyright © 2011-2022 走看看