【黑马程序员】批量数据提交SqlBuckCopy(学习笔记)

论坛 期权论坛 编程之家     
选择匿名的用户   2021-6-2 17:43   1669   0

------- WindowsPhone 7手机开发.Net培训、期待与您交流! -------

快速数据导入:

数据库连接池

aod.net打开的连接并非真的是关了,会保留几个连接于连接池中,并没有Dispose()掉,而是保存中。
复用连接池中的连接。
解决批量处理数据的时间(例批量插入数据需要24min->3s)
批量数据提交。
几十万的数据批量插入数据
SqlBulkCopy大数据Copy的一个类
SqlBulkCopy bulkCopy=new SqlBulkCopy (StrConn);
实现的是IDisposable接口,所以要Using,没有显示次接口的不用Using.
DestinationTanleName批量目标DBName
WriteTOServer(DataTable,)(重载)把数据批量写入DB
DataRow row
internal代表程序集内部可以看到,外不可以
DataTable table=new DataTable();
DataRow row=table.NewRow();
在本地创建的数据表,而非为数据库中的表
建立数据库中字段和本地表的联系
bulkCopy=new .ColumnMappings.Add("本地列名","数据库中列名");

读取文本文件


获取我们所需要的字段

建立本地数据副本

本地数据和数据库中数据的映射的建立

用SqlBulkCopy去大批量的处理数据


c# Code
OpenFileDialog ofd = new OpenFileDialog();
ofd.Filter = "文本文件|*.txt";
if (ofd.ShowDialog() == false)
{
return;
}

string[] lines = File.ReadAllLines(ofd.FileName.ToString(), Encoding.Default).ToArray();
DataTable dt = new DataTable();//本地的datatable对象
dt.Columns.Add("StartTelNumber");
dt.Columns.Add("City");
dt.Columns.Add("TelType");
for (int i = 1; i < lines.Length;i++ )
{
string line = lines[i];
string[] strs = line.Split('\t');
string startTelNum = strs[0].ToString();
string city = strs[1].ToString();
city = city.Trim('"');
string telTytpe = strs[2].ToString();
telTytpe = telTytpe.Trim('"');
DataRow row = dt.NewRow();
row["StartTelNumber"] = startTelNum;//row["StartTelNumber"]内存中
row["City"] = city;
row["TelType"] = telTytpe;
dt.Rows.Add(row);//只是创建没有插入
}
string connStr = ConfigurationManager.ConnectionStrings["connStr"].ToString();
using (SqlBulkCopy bulkCopy = new SqlBulkCopy(connStr))
{
bulkCopy.DestinationTableName = "dbo.tb_Tel";
bulkCopy.ColumnMppings.Add("StartTelNumber", "HaoDuan");
bulkCopy.ColumnMppings.Add("City", "Address");
bulkCopy.ColumnMppings.Add("TelType", "Type");
bulkCopy.WriteToServer(dt);//把数据批量写入服务器中,本地存放数据的集合对象。
}


分享到 :
0 人收藏
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

积分:3875789
帖子:775174
精华:0
期权论坛 期权论坛
发布
内容

下载期权论坛手机APP