C# SqlBulkCopy 大量数据导入到数据库
之前写了一篇C# 直接使用sql语句对数据库操作 (cmd.ExecuteNonQuery)的文章
这是针对数据量不大的操作,换句话说,效率太低,所以在此介绍一个效率高的、能大批量导入到数据库的方法
//////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
函数原型
public void WriteToServer(DataTable table);
不难看出这个函数需要的是DataTable的数据类型
正文开始:
需要using的东西
using System.Data.SqlClient;//SqlBulkCopy using System.Configuration;//ConfigurationManager using System.Data;//Datatable
在app.config中添加connectionstring
<connectionStrings> <add name="connString" connectionString="server=sk**ei**l0*;database=V*Q;integrated security=true"/> </connectionStrings>
就插个代码吧 没什么讲的 注释都有
static void Main(string[] args) { DataTable datasource = new DataTable();//数据源,这边没有给它数据源,将就看吧 string connString = ConfigurationManager.ConnectionStrings["connString"].ToString();//config SqlConnection conn = new SqlConnection(connString);
conn.Open(); SqlBulkCopy sqlbulkcopy = new SqlBulkCopy(conn); sqlbulkcopy.DestinationTableName = "";//设置数据库表名 sqlbulkcopy.BulkCopyTimeout = 300;//timeout,数据量大的话就需要设置一下,具体视情况而定 try { sqlbulkcopy.WriteToServer(datasource);//写入数据库 } catch (Exception e) { Console.WriteLine(e.Message); } finally { sqlbulkcopy.Close(); conn.Close();//关 } }
另一种写法
static void using_(DataTable datasource,string tablename) { using (SqlConnection conn = new SqlConnection(ConfigurationManager.ConnectionStrings["connString"].ToString())) { conn.Open(); using (SqlBulkCopy bulkCopy = new SqlBulkCopy(conn)) { bulkCopy.DestinationTableName = tablename;//table name bulkCopy.BatchSize = datasource.Rows.Count; try { bulkCopy.WriteToServer(datasource);//写入数据库 } catch (Exception e) { Console.WriteLine(e.Message); } finally { bulkCopy.Close(); conn.Close();//关 } } } }
MrNou