zoukankan      html  css  js  c++  java
  • 使用SqlBulkCopy批量导入数据

    SqlBulkCopy批量导入数据库的方法如下

     #region 将抓取的Mysql数据导入Sqlserver
            /// <summary>
            
    /// 将抓取的Mysql数据导入Sqlserver
            
    /// </summary>
            
    /// <param name="sqldb">数据集 DataTable</param>
            
    /// <param name="sqlConn">数据库连接字符</param>
            
    /// <param name="tableName">表名</param>
            
    /// <param name="dicSource">数据库字段对应字典,如:dic.Add("UzaiTravelClassID", "UzaiTravelClassID");字典中key为DataTable中的字段名,Value为导入数据的表中对应的字段名</param>
            
    /// <param name="intBatchSize">每次导入数据数</param>
            
    /// <returns></returns>
            public bool InsertSqlServer(DataTable sqldb, string sqlConn, string tableName, Dictionary<stringstring> dicSource, int intBatchSize)
            {
                try
                {
                    //数据批量导入sqlserver,创建实例
                    System.Data.SqlClient.SqlBulkCopy sqlbulk = new System.Data.SqlClient.SqlBulkCopy(sqlConn);
                    sqlbulk.BatchSize = intBatchSize;
                    //目标数据库表名
                    sqlbulk.DestinationTableName = tableName;
                    sqlbulk.SqlRowsCopied += new SqlRowsCopiedEventHandler(bulkCopy_SqlRowsCopied);
                    //数据集字段索引与数据库字段索引映射
                    foreach (KeyValuePair<stringstring> item in dicSource)
                    {
                        sqlbulk.ColumnMappings.Add(item.Key, item.Value);
                    }
                    sqlbulk.NotifyAfter = intBatchSize;
                    //导入
                    sqlbulk.WriteToServer(sqldb);
                    sqlbulk.Close();
                    return true;
                }
                catch
                {
                    return false;
                }

            }
            /// <summary>
            
    /// 导入数据后触发的事件
            
    /// </summary>
            
    /// <param name="sender"></param>
            
    /// <param name="e"></param>
            private void bulkCopy_SqlRowsCopied(object sender, SqlRowsCopiedEventArgs e)
            {
                Console.WriteLine("{0} Rows have been copied", e.RowsCopied.ToString());
            }
            #endregion

    使用范例如下:

    数据集 DataTable的定义:

     

                DataTable dtResult = new DataTable();//数据库查询的结果集
                DataTable dt = new DataTable();
                dt.Columns.Add("DicName",typeof(string));
                dt.Columns.Add("DicValue"typeof(string));
                dt.Columns.Add("DES"typeof(string));
                dt.Columns.Add("Type"typeof(string));

                foreach (DataRow dr in dtResult.Rows)
                {
                    DataRow drNew = dt.NewRow();
                    drNew["DicName"] = dr["DicName1"];
                    drNew["DicValue"] = dr["DicValue1"];
                    drNew["DES"] = dr["DES1"];
                    drNew["Type"] = dr["Type1"];
                    dt.Rows.Add(drNew);
                }

    Dictionary的定义:

                Dictionary<stringstring> dicColumns = new Dictionary<stringstring>();
                string strCurrentTable = "UzaiSearchDictionary";//表名
                dicColumns.Add("DicName""DicName2");//key:dt 中的列名,value:表中对应的列名
                dicColumns.Add("DicValue""DicValue2");
                dicColumns.Add("DES""DES2");
                dicColumns.Add("Type""Type2");
                InsertSqlServer(dt, SqlHelper.WebSearchUpdateConStr1, strCurrentTable, dicColumns, 1000);
  • 相关阅读:
    word 导出(带有一个图片,一张datatable)
    asp.net 获取当前时间的格式
    解决<compilation debug="true" targetFramework="4.0"> 问题
    安装office专业增强版2016(word/excel/ppt/visio)的记录
    JS,Jquery获取各种屏幕的宽度和高度
    utc本地时间
    extjs使用gridPanel演示基于asp.net使用json传送数据
    获取物料指定日期的库存
    resize
    关于完工入库研究
  • 原文地址:https://www.cnblogs.com/ruolinzhanyuan/p/2413405.html
Copyright © 2011-2022 走看看