SqlBulkCopy导入大批量的数据非常高效,可以将内存中的数据表直接的一次性的存储到数据库中
我给你介绍下怎么使用:
//string connStr = ConfigurationManager.ConnectionStrings["connStr"].ConnectionString;//配置连接字符串
DataTable table = new DataTable();//实例化一个SqlBulkCopy对象需一DataTable对象作实参
table.Columns.Add("StartTel");//为本地的table对象添加列数据
table.Columns.Add("city");
table.Columns.Add("TelType");
OpenFileDialog ofd = new OpenFileDialog();//常规IO流,导入txt文件
if (ofd.ShowDialog() != true)
{
return;
}
else
{
ofd.Filter = "文本文件|*.txt|所有文件|*.*";//设置过滤器
string fileName = ofd.FileName;
string[] lines = File.ReadAllLines(fileName, Encoding.Default);//编码形式设置默认,防止乱码
foreach (string line in lines)
{
string[] str = line.Split('\t');
string StartTel = str[0];
string city = str[1];
city = city.Trim('"');
string TelType = str[2];
TelType = TelType.Trim('"');
DataRow row = table.NewRow();
row["StartTel"] = StartTel;//每行导入数据
row["city"] = city;
row["TelType"] = TelType;
table.Rows.Add(row);
}
}
using (SqlBulkCopy sbl = new SqlBulkCopy(connStr))//使用using,执行完代码体则自动调用Dispose方法释放资源
{
sbl.DestinationTableName = "T_TelNum";//目标数据库名
sbl.ColumnMappings.Add("StartTel", "StartTel");//第一个参数为本地table表的列明,第二个参数为数据库表的列名
sbl.ColumnMappings.Add("city", "Area");
sbl.ColumnMappings.Add("TelType", "TelType");
sbl.WriteToServer(table);//往数据库写
MessageBox.Show("ok");
}
|