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>