using System;
using System.Collections.Generic;
using System.Configuration;
using System.Data.SqlClient;
using System.IO;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using System.Windows;
using System.Windows.Controls;
using System.Windows.Data;
using System.Windows.Documents;
using System.Windows.Input;
using System.Windows.Media;
using System.Windows.Media.Imaging;
using System.Windows.Navigation;
using System.Windows.Shapes;
using Microsoft.Win32;
namespace SqlBulkCopy批量数据插入
{
/// <summary>
/// MainWindow.xaml 的交互逻辑
/// </summary>
public partial class MainWindow : Window
{
public MainWindow()
{
InitializeComponent();
}
private void Button_Click(object sender, RoutedEventArgs e)
{
string conStr = ConfigurationManager.ConnectionStrings["connStr"].ConnectionString;
OpenFileDialog ofd = new OpenFileDialog();
ofd.Filter = "文本文件|*.txt";
if (ofd.ShowDialog() == false)
{
return;
}
string[] lines =
File.ReadAllLines(ofd.FileName, Encoding.Default).ToArray();
DateTime startTime = DateTime.Now;//这就是任务开始执行的时间
// 这个方法可以快速插入,代替下面一块的的
SqlBulkCopy bulkconpy = new SqlBulkCopy(connStr); //SqlBulkCopy数据大块的复制拷贝 connStrt通过这个链接来访问数据库
// //totalCount = lines.Length;
// //数据库连接池:ADO.NET会尽可能的复用连接池中的连接。
// //这作用是关闭数据库,并不是真的关闭的是微软帮你隐藏了,很长时间不用就把你释放了
// using (SqlConnection conn = new SqlConnection(connStr))
// {
// conn.Open();
// //注意文件T里是按照制表符分割的,不是字符串
// //foreach (string lien in lines)
// for (int i = 0; i < lines.Length;i++ )
// {
// string line = lines[i];
// string[] strs = lines.Split('\t');//vs里'\t'为制表符
// string startTelNum = strs[0];
// string city = strs[1];
// city = city.Trim('"');//去掉两边的双引号:"北京市"
// string telType = strs[2];
// telType = telType.Trim('"');
// //数据库连接池
// using (SqlCommand cmd = conn.GreateCommand())
// {
// //遍历
// //就这句办事效率低了些 ,有一种可以快速插入,叫批量提交
// cmd.CommandText = @"insert into T_TelNum (StartTelNum,TelType,TelArea)
// values(@StartTelNum,@TelType,@TelArea)";//@是可以控制多行的
// cmd.Parameters.Add(new SqlParameter("@StartTelNum", startTelNum));
// cmd.Parameters.Add(new SqlParameter("@TelType", telType));
// cmd.Parameters.Add(new SqlParameter("@TelArea", city));
// //插入
// cmd.ExecuteNonQuery();
// }
// TimeSpan ts = DateTime.Now - startTime;//两个时间相减 TimeSpan类型时间段的意思,
// //ts.TotalSeconds//时间段代码的总秒数 TimeSpan的属性
// double ellapsedSec = ts.TotalSeconds;//ellapsedSec已经耗用的秒数
// //扬中科那个数据库里一共十几万条数据 ,测出来的时间是24分钟所以怎么办;
// //一般在计算机里现乘以后除更精确些
// //double totalSec = (ellapsedSec / (i + 1)) * lines.Length;//(ellapsedSec/(i+1))每条大约用了多少秒,* lines.Length乘以总条数
// //所以
// double totalSec = ellapsedSec * lines.Length / (i + 1);//估计需要的总秒数
// }
// }
}
public string connStr { get; set; }
}
}
<?xml version="1.0" encoding="utf-8" ?>
<configuration>
<connectionStrings>
<add name ="connStr" connectionString="Data Source=PC-20121201BQFG\SQLEXPRESS;Initial Catalog=Test;Integrated Security=True"/>
</connectionStrings>
<!--<startup>
<supportedRuntime version="v4.0" sku=".NETFramework,Version=v4.5" />
</startup>-->
</configuration>