A股上市公司传智教育(股票代码 003032)旗下技术交流社区北京昌平校区

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

© 吴春晟 黑马帝   /  2011-11-17 11:53  /  2535 人查看  /  2 人回复  /   0 人收藏 转载请遵从CC协议 禁止商业使用本文

本帖最后由 吴春晟 于 2011-11-17 12:02 编辑
  1. /// <summary>
  2.         /// 进行批量往数据库插入数据
  3.         /// </summary>
  4.         /// <param name="sender"></param>
  5.         /// <param name="e"></param>
  6.         private void btnUpdate_Click(object sender, EventArgs e)
  7.         {
  8.             using (SqlConnection conn = new SqlConnection(@"Data Source=.\SQLSERVER_WCS;AttachDbFilename=|DataDirectory|\DBPhoneNO.mdf;Integrated Security=True;User Instance=True"))
  9.             {
  10.                 conn.Open();
  11.                 using (SqlCommand cmd = conn.CreateCommand())
  12.                 {
  13.                     foreach (string file in filelists)//遍历文件列表中文件
  14.                     {
  15.                         FileInfo fileinfo = new FileInfo(file);
  16.                         string str = fileinfo.Name.Remove(fileinfo.Name.LastIndexOf("."));
  17.                         using (FileStream filestream = File.OpenRead(file))
  18.                         {
  19.                             using (StreamReader streamreader = new StreamReader(filestream, System.Text.Encoding.Default))
  20.                             {
  21.                                 string line = null;

  22.                                 while (((line = streamreader.ReadLine()) != null))
  23.                                 {
  24.                                     
  25.                                     string[] strs = line.Split('-');
  26.                                     string phoneNOStart = strs[0];
  27.                                     string phoneNOEnd = strs[1];
  28.                                     string city = strs[2];
  29.                                     cmd.CommandText = "insert into T_PhoneNO(PhoneNOStart,PhoneNOEnd,City,PromaryAndNet) values(@PhoneNOStart,@PhoneNOEnd,@City,@PromaryAndNet)";
  30.                                     cmd.Parameters.Clear();//清除Parameters中参数
  31.                       cmd.Parameters.Add(new SqlParameter("PhoneNOStart", phoneNOStart));
  32.                                     cmd.Parameters.Add(new SqlParameter("PhoneNOEnd", phoneNOEnd));
  33.                                     cmd.Parameters.Add(new SqlParameter("City", city));
  34.                                     cmd.Parameters.Add(new SqlParameter("PromaryAndNet", str));
  35.                                     cmd.ExecuteNonQuery();
  36.                                 }                                
  37.                             }
  38.                         }
  39.                     }
  40.                 }
  41.             }
  42.             MessageBox.Show("数据导入成功");
  43.         }
复制代码
在做习题手机号码归属地查询时,我第一次写的批量更新数据库代码如上:


考虑到这里多次执行cmd.ExecuteNonQuery();应该会影响效率,那么对代码做如下改动;

  1.         /// <summary>
  2.         /// 进行批量往数据库插入数据
  3.         /// </summary>
  4.         /// <param name="sender"></param>
  5.         /// <param name="e"></param>
  6.         private void btnUpdate_Click(object sender, EventArgs e)
  7.         {
  8.             using (SqlConnection conn = new SqlConnection(@"Data Source=.\SQLSERVER_WCS;AttachDbFilename=|DataDirectory|\DBPhoneNO.mdf;Integrated Security=True;User Instance=True"))
  9.             {
  10.                 conn.Open();
  11.                 using (SqlCommand cmd = conn.CreateCommand())
  12.                 {
  13.                     foreach (string file in filelists)//遍历文件列表中文件
  14.                     {
  15.                         FileInfo fileinfo = new FileInfo(file);
  16.                         string str = fileinfo.Name.Remove(fileinfo.Name.LastIndexOf("."));
  17.                         using (FileStream filestream = File.OpenRead(file))
  18.                         {
  19.                             using (StreamReader streamreader = new StreamReader(filestream, System.Text.Encoding.Default))
  20.                             {
  21.                                 string line = null;
  22.                                 //int count = 0;
  23.                                 while (((line = streamreader.ReadLine()) != null))
  24.                                 {
  25.                                     //count = count + 1;
  26.                                     string[] strs = line.Split('-');
  27.                                     string phoneNOStart = strs[0];
  28.                                     string phoneNOEnd = strs[1];
  29.                                     string city = strs[2];
  30.                                     //放弃cmd.Parameters,防止对cmd.Parameters最后一次ADD的参数进行反复添加
  31.                                     //cmd.CommandText += "insert into T_PhoneNO(PhoneNOStart,PhoneNOEnd,City,PromaryAndNet) values(@PhoneNOStart,@PhoneNOEnd,@City,@PromaryAndNet)";
  32.                                     //cmd.Parameters.Clear();//清除Parameters中参数
  33.                       //cmd.Parameters.Add(new SqlParameter("PhoneNOStart", phoneNOStart));
  34.                                     //cmd.Parameters.Add(new SqlParameter("PhoneNOEnd", phoneNOEnd));
  35.                                     //cmd.Parameters.Add(new SqlParameter("City", city));
  36.                                     //cmd.Parameters.Add(new SqlParameter("PromaryAndNet", str));
  37.                                     cmd.CommandText += "insert into T_PhoneNO(PhoneNOstart,PhoneNOEnd,City,PromaryAndNet) values ('" + phoneNOStart + "','" + phoneNOEnd + "','" + city + "','" + str + "')";
  38.                                     //cmd.ExecuteNonQuery();
  39.                                 }                                
  40.                             }
  41.                         }
  42.                     }
  43.                     cmd.ExecuteNonQuery();
  44.                 }
  45.             }
  46.             MessageBox.Show("数据导入成功");
  47.         }
复制代码
同样能实现批量更新数据,而且只用执行一次cmd.ExecuteNonQuery(); 但无法验证效率上是否有提升?

谁帮忙验证下,或者提供下更有效率的方法?

评分

参与人数 1技术分 +2 收起 理由
杨恩锋 + 2

查看全部评分

2 个回复

倒序浏览
...偶咋觉得你酱紫插只插入了一条数据啊...每次cmd的comandtext不都会被下一条冲掉么??
回复 使用道具 举报
小色猫 发表于 2011-11-19 16:10
...偶咋觉得你酱紫插只插入了一条数据啊...每次cmd的comandtext不都会被下一条冲掉么?? ...

不会,我给Command.CommandText 赋值时用的是"+="
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马