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

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

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

本帖最后由 吴春晟 于 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, 下载次数: 85)

QQ截图20111115124115.jpg

评分

参与人数 1技术分 +1 收起 理由
陈涛 + 1

查看全部评分

2 个回复

正序浏览
经睿 黑马帝 2011-11-15 16:58:59
藤椅
以后在写代码的过程中,每一块都加个注释,程序比较好读些。这也良好的编程习惯哦{:soso_e113:}

评分

参与人数 1技术分 +1 收起 理由
陈涛 + 1

查看全部评分

回复 使用道具 举报
汗..cmd.CommandText += "insert into T_PhoneNO(PhoneNOStart,PhoneNOEnd,City,PromaryAndNet) values(@PhoneNOStart,@PhoneNOEnd,@City,@PromaryAndNet)";

找到原因了,原来这条语句出了问题,多了个"+"号
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马