黑马程序员技术交流社区

标题: 手机号码归属地查询 [打印本页]

作者: 吴春晟    时间: 2011-11-15 12:39
标题: 手机号码归属地查询
本帖最后由 吴春晟 于 2011-11-15 13:14 编辑

我在做手机号码归属地查询这个练习时,进行多文件批量导入
代码如下:
  1. using System;
  2. using System.Collections.Generic;
  3. using System.ComponentModel;
  4. using System.Data;
  5. using System.Drawing;
  6. using System.Linq;
  7. using System.Text;
  8. using System.Windows.Forms;

  9. using System.IO;
  10. using System.Data.SqlClient;

  11. namespace 手机号码归属地查询
  12. {
  13.     public partial class Form1 : Form
  14.     {
  15.         public Form1()
  16.         {
  17.             InitializeComponent();
  18.         }
  19.         //private static string filePath;
  20.         private static string[] filelists;

  21.         private void button1_Click(object sender, EventArgs e)
  22.         {
  23.             if (ofdFilelist.ShowDialog() == DialogResult.OK)
  24.             {
  25.                 filelists = ofdFilelist.FileNames;

  26.                 for (int i = 0; i < filelists.Length; i++)
  27.                 {
  28.                     FileInfo fileinfo = new FileInfo(filelists[i]);                    
  29.                     ltbFile.Items.Add(fileinfo.Name.Remove(fileinfo.Name.LastIndexOf(".")));
  30.                 }
  31.             }
  32.         }

  33.         private void btnUpdate_Click(object sender, EventArgs e)
  34.         {
  35.             using (SqlConnection conn = new SqlConnection(@"Data Source=.\SQLSERVER_WCS;AttachDbFilename=|DataDirectory|\DBPhoneNO.mdf;Integrated Security=True;User Instance=True"))
  36.             {
  37.                 conn.Open();
  38.                 using (SqlCommand cmd = conn.CreateCommand())
  39.                 {
  40.                     foreach (string file in filelists)
  41.                     {
  42.                         FileInfo fileinfo = new FileInfo(file);
  43.                         string str = fileinfo.Name.Remove(fileinfo.Name.LastIndexOf("."));
  44.                         using (FileStream filestream = File.OpenRead(file))
  45.                         {
  46.                             using (StreamReader streamreader = new StreamReader(filestream, System.Text.Encoding.Default))
  47.                             {
  48.                                 string line = null;
  49.                                 while (((line = streamreader.ReadLine()) != null))
  50.                                 {
  51.                                     string[] strs = line.Split('-');
  52.                                     string phoneNOStart = strs[0];
  53.                                     string phoneNOEnd = strs[1];
  54.                                     string city = strs[2];
  55.                                     cmd.CommandText += "insert into T_PhoneNO(PhoneNOStart,PhoneNOEnd,City,PromaryAndNet) values(@PhoneNOStart,@PhoneNOEnd,@City,@PromaryAndNet)";
  56.                                     cmd.Parameters.Clear();//!!!!!!SQL参数不能重复添加,在while中一直用的是同一个SqlCommand对象;
  57.                                     cmd.Parameters.Add(new SqlParameter("PhoneNOStart", phoneNOStart));
  58.                                     cmd.Parameters.Add(new SqlParameter("PhoneNOEnd", phoneNOEnd));
  59.                                     cmd.Parameters.Add(new SqlParameter("City", city));
  60.                                     cmd.Parameters.Add(new SqlParameter("PromaryAndNet", str));
  61.                                     cmd.ExecuteNonQuery();
  62.                                 }
  63.                             }
  64.                         }
  65.                     }
  66.                 }
  67.             }
  68.             MessageBox.Show("数据导入成功");
  69.         }


  70.     }
  71. }
复制代码
在导入数据时 效率很差,一个900多行的 文本文件在导入就要用时 10多分钟,而且可能会报错。应该如何进行优化??

再查看数据库数据,发现明明只有900多行数据 在数据库里插入了 10多W条,怪不得速度慢得要命,哪出了问题??


界面如下:



QQ截图20111115124115.jpg (23.95 KB, 下载次数: 84)

QQ截图20111115124115.jpg

作者: 吴春晟    时间: 2011-11-15 13:23
汗..cmd.CommandText += "insert into T_PhoneNO(PhoneNOStart,PhoneNOEnd,City,PromaryAndNet) values(@PhoneNOStart,@PhoneNOEnd,@City,@PromaryAndNet)";

找到原因了,原来这条语句出了问题,多了个"+"号
作者: 经睿    时间: 2011-11-15 16:58
以后在写代码的过程中,每一块都加个注释,程序比较好读些。这也良好的编程习惯哦{:soso_e113:}




欢迎光临 黑马程序员技术交流社区 (http://bbs.itheima.com/) 黑马程序员IT技术论坛 X3.2