Mysql中循环拼接参数_利用循环向数据库中插入数据,参数重复的问题

又看了些资料,发现对于说参数存在的问题可以把SqlCommand的创建放到For循环里,可以只连一次数据库,但是效率还是没提高。效率的问题不在于对数据库的开关,而是还是逐条地插入数据。而且数据库连接有数据库连接池,并不是每次都创建一个连接。可以用SqlBulkCopy实现批量插入。先把数据存到一个DataTable里,然后WriteToServer(datatable);搞定,大约10秒钟,25万多条数据。

string connStr = ConfigurationManager.ConnectionStrings["connStr"].ConnectionString;//获取连接的字符串

using (SqlConnection sqlConn = new SqlConnection(connStr))//创建一个数据库连接

{

sqlConn.Open();//打开链接

//读取文件部分

OpenFileDialog ofd = new OpenFileDialog();

ofd.Filter = "文本文件|*.txt";//过滤器

ofd.InitialDirectory = @"D:\C#Program\TelAreaSqlBulkCopy";//创建初始目录

if (ofd.ShowDialog() != true)

{

return;//如果,没选则的话

}

string fileName = ofd.FileName;//获得文件名

IEnumerable lines = File.ReadLines(fileName, Encoding.Default);//读取全部行,是 IEnumerable

List strs = lines.ToList();//转一下类型

DataTable datatable = new DataTable();//创建一个表,等会把读的数据存进去,有三列入下

datatable.Columns.Add("NumStart");

datatable.Columns.Add("Area");

datatable.Columns.Add("NumType");

DateTime datatime1 = DateTime.Now;

//利用for 把数据插入Datatable

for (int i = 1; i < strs.Count; i++)//第一行是列名,不要,所以i=1

{

string[] str = strs[i].Split('\t');//分割字符串

string NumStart = str[0];

string Area = str[1].Trim('"');

string NumType = str[2].Trim('"');

//把数据加入dataTable

DataRow newRow = datatable.NewRow();

newRow["NumStart"] = NumStart;

newRow["Area"] = Area;

newRow["NumType"] = NumType;

datatable.Rows.Add(newRow);

}

DateTime datatime2 = DateTime.Now;

using (SqlBulkCopy sqlBulkCopy = new SqlBulkCopy(sqlConn))//利用连接创建一个SqlBulkCopy

{

sqlBulkCopy.DestinationTableName = "T_TelAreaFull";

sqlBulkCopy.ColumnMappings.Add(new SqlBulkCopyColumnMapping("NumStart", "NumStart"));

sqlBulkCopy.ColumnMappings.Add(new SqlBulkCopyColumnMapping("Area", "Area"));

sqlBulkCopy.ColumnMappings.Add(new SqlBulkCopyColumnMapping("NumType", "NumType"));

sqlBulkCopy.WriteToServer(datatable);

}

DateTime datatime3 = DateTime.Now;

TimeSpan timespan1 = datatime2 - datatime1;

TimeSpan timespan2 = datatime3 - datatime2;

timespan1.TotalSeconds.ToString();

timespan2.TotalSeconds.ToString();

MessageBox.Show("第一阶段时间" + timespan1.TotalMinutes.ToString() + "第二阶段时间" + timespan2.TotalSeconds.ToString());

}

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值