⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 readme.txt

📁 利用System.Data.SqlClient.SqlBulkCopy 类完成excel数据大批量导入到sql中
💻 TXT
字号:
大部分人都知道用oledb来读取数据到dataset,但是读取之后怎么处理dataset就千奇百怪了。很多人通过循环来拼接sql,这样做不但容易出错而且效率低下,System.Data.SqlClient.SqlBulkCopy 对于新手来说还是比较陌生的,这个就是传说中效率极高的bcp,6万多数据从excel导入到sql只需要4.5秒。

注:net2.0以上才可以使用

_________________________________________________________________________

using System.Data; 
using System.Data.OleDb; 
using System.Data .SqlClient;

public void TransferData(string excelFile, string sheetName, string connectionString,string sqlname,string[,] arramy2)
        {
            //这是一个将excel文件中的一张表的数据传送给SQL中的一样结构的表,2张表名称相同
            //参数excelFile为excel文件名,sheetName为excel文件中的具体表,connectionString为SQL具体连接字符串
            //arramy2是一个2维数组,如{ { "a", "b", "c", "d"}, { "a1", "a2", "a3", "a4" } }; {0,字符}表示源目标的字段名, {1,字符}表示复制数据库端的字段名
         
            try
            {
                //获取全部数据存在一个dataset中
                string sConnectionString = "Provider=Microsoft.Jet.OLEDB.4.0;" + "Data Source=" + excelFile + ";" + "Extended Properties=Excel 8.0;";
               
                OleDbConnection objConn = new OleDbConnection(sConnectionString);
                objConn.Open();

                string strExcel = string.Format("select * from [{0}$]", sheetName);
                OleDbCommand objCmdSelect = new OleDbCommand(strExcel, objConn);
                OleDbDataAdapter objAdapter1 = new OleDbDataAdapter();
                objAdapter1.SelectCommand = objCmdSelect;
                DataSet objDataset1 = new DataSet();
                objAdapter1.Fill(objDataset1, "aaa");
                objConn.Close();
                
                //用bcp导入数据
                SqlBulkCopy bcp = new System.Data.SqlClient.SqlBulkCopy(connectionString);
                
                bcp.DestinationTableName = sqlname;//目标表
                //源与目标的列的对应
                int lensum = arramy2.Length / 2-1;
                for (int i = 0; i <= lensum; i++)
                {
                    bcp.ColumnMappings.Add(arramy2[0, i], arramy2[1, i]);                        
                }
                //导入数据到sql
                bcp.WriteToServer(objDataset1.Tables["aaa"]);
                //提示信息
                Response.Write("导入成功");
            }
            catch (Exception ex)
            {
                Response .Write (ex.Message);
                Button1.Visible = false;
            }
        }

_______________________________________________________________________________

上面的TransferData基本可以直接使用,如果要考虑周全的话,可以用oledb来获取excel的表结构,并且加入ColumnMappings来设置对照字段,这样效果就完全可以做到和sqlserver的dts相同的效果了。

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -