//数据库请到我的资源里下载
//这次实现遇到问题了,就是提示变量重定义SqlHelper.ExecuteNonQuery(sql,
// new SqlParameter("@TelNum", telnum),
// new SqlParameter("@TelNumArea", telarea),
// new SqlParameter("@TelNumType", teltype),
// new SqlParameter("@AreaNum", areanum));
//后来改了一下,发现只要每次new 一个cmd就不会出问题。一条cmd只能传一次参数,多次传参须定义不同的"@变量名"
using Microsoft.Win32; using System; using System.Collections.Generic; using System.Data; 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; namespace _04第四季_三_手机号码 { /// <summary> /// MainWindow.xaml 的交互逻辑 /// </summary> public partial class MainWindow : Window { public MainWindow() { InitializeComponent(); } /// <summary> /// 调用SqlHelper插入数据,每插入一条需打开关闭数据库,所以效率低下。 /// 更好的办法是一次打开,全部插入,当然如果连接断开则是很麻烦的事情。 /// </summary> /// <param name="sender"></param> /// <param name="e"></param> private void SqlHelperImport_Click(object sender, RoutedEventArgs e) { string sql = @"insert into T_TelNumSearch(TelNum,TelNumArea,TelNumType,AreaNum) values(@TelNum,@TelNumArea,@TelNumType,@AreaNum)"; OpenFileDialog ofd = new OpenFileDialog(); ofd.Filter = "文本文件|*.txt"; if (ofd.ShowDialog() == false) { return; } //IEnumerable<string> telNum = File.ReadAllLines(ofd.FileName,Encoding.Default); //telNum.ElementAt(i);//取到第i个元素 string[] telNum = File.ReadAllLines(ofd.FileName, Encoding.Default).ToArray(); DateTime dt = DateTime.Now; for (int i = 1; i < telNum.Length; ++i) { string[] strs = telNum[i].Split('\t');//Tab键转义为“\t” string telnum = strs[0]; string telarea = strs[1]; string teltype = strs[2]; string areanum = strs[3]; //连接并不是真正关闭,下次会复用 SqlHelper.ExecuteNonQuery(sql, new SqlParameter("@TelNum", telnum), new SqlParameter("@TelNumArea", telarea), new SqlParameter("@TelNumType", teltype), new SqlParameter("@AreaNum", areanum)); TimeSpan ts = DateTime.Now - dt; double totalTime = ts.TotalSeconds * telNum.Length / i; } MessageBox.Show("共插入" + telNum.Count().ToString() + "条数据"); } /// <summary> /// 看起来一次打开插入数据跟,多次打开关闭花的时间差不多,原因:多次打开关闭中并不是真的关闭,而是实现了连接复用 /// </summary> /// <param name="sender"></param> /// <param name="e"></param> private void btnInsert_Click(object sender, RoutedEventArgs e) { string sql = @"insert into T_TelNumSearch(TelNum,TelNumArea,TelNumType,AreaNum) values(@TelNum,@TelNumArea,@TelNumType,@AreaNum)"; OpenFileDialog ofd = new OpenFileDialog(); ofd.Filter = "文本文件|*.txt"; if (ofd.ShowDialog() == false) { return; } //IEnumerable<string> telNum = File.ReadAllLines(ofd.FileName,Encoding.Default); //telNum.ElementAt(i);//取到第i个元素 string[] telNum = File.ReadAllLines(ofd.FileName, Encoding.Default).ToArray(); using (SqlConnection conn = new SqlConnection("Data Source=.;Initial Catalog=stu;User ID=sa;Password=tao201415shu")) { conn.Open(); using(SqlCommand cmd=conn.CreateCommand())//一条cmd只能传一次参数,多次传参须定义不同的"@变量名" { DateTime dt = DateTime.Now; for (int i = 1; i < telNum.Length; ++i) { string[] strs = telNum[i].Split('\t');//Tab键转义为“\t” string telnum = strs[0].Trim('"'); string telarea = strs[1].Trim('"'); string teltype = strs[2].Trim('"'); string areanum = strs[3].Trim('"'); sql = "insert into T_TelNumSearch(TelNum,TelNumArea,TelNumType,AreaNum)values('"+telnum+"','"+telarea+"','"+teltype+"','"+areanum+"')"; cmd.CommandText = sql; cmd.ExecuteNonQuery(); TimeSpan ts = DateTime.Now - dt; double totalTime = ts.TotalSeconds * telNum.Length / i; } } } MessageBox.Show("共插入" + telNum.Count().ToString() + "条数据"); } // /// <summary> // /// 错误的写法,cmd参数变量重定义 // /// </summary> // /// <param name="sender"></param> // /// <param name="e"></param> // private void btnInsert_Click(object sender, RoutedEventArgs e) // { // string sql = @"insert into T_TelNumSearch(TelNum,TelNumArea,TelNumType,AreaNum) // values(@TelNum,@TelNumArea,@TelNumType,@AreaNum)"; // OpenFileDialog ofd = new OpenFileDialog(); // ofd.Filter = "文本文件|*.txt"; // if (ofd.ShowDialog() == false) // { // return; // } // //IEnumerable<string> telNum = File.ReadAllLines(ofd.FileName,Encoding.Default); // //telNum.ElementAt(i);//取到第i个元素 // string[] telNum = File.ReadAllLines(ofd.FileName, Encoding.Default).ToArray(); // using (SqlConnection conn = new SqlConnection("Data Source=.;Initial Catalog=stu;User ID=sa;Password=tao201415shu")) // { // conn.Open(); // using (SqlCommand cmd = conn.CreateCommand())//一条cmd只能传一次参数,多次传参须定义不同的"@变量名" // { // cmd.CommandText = sql; // DateTime dt = DateTime.Now; // for (int i = 1; i < telNum.Length; ++i) // { // string[] strs = telNum[i].Split('\t');//Tab键转义为“\t” // string telnum = strs[0].Trim('"'); // string telarea = strs[1].Trim('"'); // string teltype = strs[2].Trim('"'); // string areanum = strs[3].Trim('"'); // SqlParameter[] paramters ={new SqlParameter("@TelNum", telnum), // new SqlParameter("@TelNumArea", telarea), // new SqlParameter("@TelNumType", teltype), // new SqlParameter("@AreaNum", areanum)}; // cmd.Parameters.AddRange(paramters); // cmd.ExecuteNonQuery(); // TimeSpan ts = DateTime.Now - dt; // double totalTime = ts.TotalSeconds * telNum.Length / i; // } // } // } // MessageBox.Show("共插入" + telNum.Count().ToString() + "条数据"); // } private void btnInsert2_Click(object sender, RoutedEventArgs e) { string sql = @"insert into T_TelNumSearch(TelNum,TelNumArea,TelNumType,AreaNum) values(@TelNum,@TelNumArea,@TelNumType,@AreaNum)"; OpenFileDialog ofd = new OpenFileDialog(); ofd.Filter = "文本文件|*.txt"; if (ofd.ShowDialog() == false) { return; } //IEnumerable<string> telNum = File.ReadAllLines(ofd.FileName,Encoding.Default); //telNum.ElementAt(i);//取到第i个元素 string[] telNum = File.ReadAllLines(ofd.FileName, Encoding.Default).ToArray(); using (SqlConnection conn = new SqlConnection("Data Source=.;Initial Catalog=stu;User ID=sa;Password=tao201415shu")) { conn.Open(); DateTime dt = DateTime.Now; for (int i = 1; i < telNum.Length; ++i) { string[] strs = telNum[i].Split('\t');//Tab键转义为“\t” string telnum = strs[0].Trim('"'); string telarea = strs[1].Trim('"'); string teltype = strs[2].Trim('"'); string areanum = strs[3].Trim('"'); using (SqlCommand cmd = conn.CreateCommand()) { cmd.CommandText = sql; SqlParameter[] paramters ={new SqlParameter("@TelNum", telnum), new SqlParameter("@TelNumArea", telarea), new SqlParameter("@TelNumType", teltype), new SqlParameter("@AreaNum", areanum)}; cmd.Parameters.AddRange(paramters); cmd.ExecuteNonQuery(); } TimeSpan ts = DateTime.Now - dt; double totalTime = ts.TotalSeconds * telNum.Length / i; } MessageBox.Show("共插入" + telNum.Count().ToString() + "条数据"); } } //SqlBulkCopy类,先将数据插入内存中的DataTable中,然后批量提交到数据库 private void btnQuickInsert_Click(object sender, RoutedEventArgs e) { OpenFileDialog ofd = new OpenFileDialog(); ofd.Filter = "文本文件|*.txt"; if (ofd.ShowDialog() == false) { return; } DataTable dataTable = new DataTable(); dataTable.Columns.Add("TelNum"); dataTable.Columns.Add("TelArea"); dataTable.Columns.Add("TelType"); dataTable.Columns.Add("AreaNum"); string[] telNum = File.ReadAllLines(ofd.FileName, Encoding.Default).ToArray(); DateTime dt = DateTime.Now; for (int i = 1; i < telNum.Length; ++i) { string[] strs = telNum[i].Split('\t');//Tab键转义为“\t” string telnum = strs[0].Trim('"'); string telarea = strs[1].Trim('"'); string teltype = strs[2].Trim('"'); string areanum = strs[3].Trim('"'); DataRow row = dataTable.NewRow();//不能使用new DataRow()因为其是internal类型,不可外部访问 row["TelNum"] = telnum; row["TelArea"] = telarea; row["TelType"] = teltype; row["AreaNum"] = areanum; dataTable.Rows.Add(row); } using(SqlBulkCopy bulkCopy=new SqlBulkCopy("Data Source=.;Initial Catalog=stu;User ID=sa;Password=tao201415shu")) { bulkCopy.DestinationTableName = "T_TelNumSearch"; bulkCopy.ColumnMappings.Add("TelNum", "TelNum");//从内存映射到数据库的列名 bulkCopy.ColumnMappings.Add("TelArea", "TelNumArea"); bulkCopy.ColumnMappings.Add("TelType", "TelNumType"); bulkCopy.ColumnMappings.Add("AreaNum", "AreaNum"); bulkCopy.WriteToServer(dataTable); } TimeSpan ts=DateTime.Now-dt; MessageBox.Show(ts.ToString()); } } }