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

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

© Always. 中级黑马   /  2013-9-24 13:32  /  2328 人查看  /  2 人回复  /   0 人收藏 转载请遵从CC协议 禁止商业使用本文

本帖最后由 Always. 于 2013-9-24 18:33 编辑

我把思路整理了一下,希望能帮到初学的人。大的思想是:先导入

第一步:弹出目录选择框,让用户选择一个文件夹
第二步:扫描文件夹
第三步:得到文件夹下的多个txt文件名
第四步:将文件夹中的每个txt中的内容导入到数据库(导入之前,要清楚表的内容)
第五步:导入操作的时候,txt内容中的每一行进行拆分

再查询:
第六步:根据用户输入的手机号码来读取运营商信息,看是否介于那段号码之间。



每一步的代码已给出(直接复制过去,是运行不了的,还需要自己稍作整理,对认真编写代码的人来说是没有问题的)
  1.     FolderBrowserDialog dlg = new FolderBrowserDialog();
  2.             if (dlg.ShowDialog() != DialogResult.OK)
  3.             {
  4.                 return;
  5.             }
  6.             string path = dlg.SelectedPath;
  7.             MessageBox.Show(path);


  8.             string connStr = ConfigurationManager.ConnectionStrings["connStr"].ConnectionString;
  9.             using (SqlConnection conn = new SqlConnection(connStr))
  10.             {
  11.                 conn.Open();
  12.                 using (SqlCommand cmd = conn.CreateCommand())
  13.                 {
  14.                     cmd.CommandText = "delete from T_numbers";
  15.                     cmd.ExecuteNonQuery();

  16.                 }
  17.             }


  18.             string[] files = Directory.GetFiles(path, "*.txt", SearchOption.AllDirectories); //返回路径下的所有txt文件
  19.             using (SqlConnection conn = new SqlConnection(connStr))
  20.             {
  21.                 conn.Open();
  22.                 using (SqlCommand cmd = conn.CreateCommand())
  23.                 {
  24.                     cmd.CommandText = "insert into T_numbers(startno,endno,Name) values(@startno,@endno,@Name)";
  25.                     cmd.ExecuteNonQuery();

  26.                     foreach (string file in files)  //处理文件夹中的每个Txt,得到运营商名称
  27.                     {
  28.                         string 运营商名称 = Path.GetFileNameWithoutExtension(file);
  29.                         string[] lines = File.ReadAllLines(file, Encoding.Default);  //读去Txt文件下的每一个数据

  30.                         //将每个txt中的内容导入数据库中
  31.                         foreach (string line in lines)  //处理所有行中的一行,通过循环处理所有行
  32.                         {
  33.                             //将每一行按"—"进行拆分(eg:15173000000-15179009999-岳阳)
  34.                             string[] remove = line.Split('-');
  35.                             string 开始号码 = remove[0];
  36.                             string 结束号码 = remove[1];
  37.                             string 市 = remove[2];
  38.                             cmd.Parameters.Clear();  //清楚旧的参数
  39.                             cmd.Parameters.Add(new SqlParameter("startno", 开始号码));
  40.                             cmd.Parameters.Add(new SqlParameter("endno", 结束号码));
  41.                             cmd.Parameters.Add(new SqlParameter("Name", 运营商名称 + 市));
  42.                             cmd.ExecuteNonQuery();
  43.                         }

  44.                     }
  45.                 }
  46.             }
复制代码
  1.       private void btnSearch_Click(object sender, EventArgs e)
  2.         {
  3.             string connStr = ConfigurationManager.ConnectionStrings["connStr"].ConnectionString;
  4.             using (SqlConnection conn = new SqlConnection(connStr))
  5.             {
  6.                 conn.Open();
  7.                 using (SqlCommand cmd = conn.CreateCommand())
  8.                 {
  9.                     cmd.CommandText = "select * from T_numbers where starno<=@NO and endno>=@NO";
  10.                     cmd.Parameters.Add(new SqlParameter("NO", txtPhone.Text));
  11.                     using (SqlDataReader reader = cmd.ExecuteReader())
  12.                     {
  13.                         if (reader.Read()) //如果在那个区间,则把市那一列的内容输出来
  14.                         {
  15.                             string result = reader.GetString(reader.GetOrdinal("市"));
  16.                             MessageBox.Show(result);
  17.                         }
  18.                         else
  19.                         {
  20.                             MessageBox.Show("归属地未知");
  21.                         }
  22.                     }

  23.                 }
  24.             }

  25.         }
复制代码
还有更为简便的思路吗 ?请指教!

评分

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

查看全部评分

2 个回复

倒序浏览
  using (SqlDataReader reader = cmd.ExecuteReader())
                    {
                        if (reader.Read()) //如果在那个区间,则把市那一列的内容输出来
                        {
                            string result = reader.GetString(reader.GetOrdinal("市"));
                            MessageBox.Show(result);
                        }
给你优化一下下
  cmd.CommandText = "select name from T_number where @number between startno and endno";
                    try
                    {
                        cmd.Parameters.Add("number", phonenum);
                        name = cmd.ExecuteScalar().ToString();
                    }

评分

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

查看全部评分

回复 使用道具 举报
七里香 发表于 2013-9-24 14:42
using (SqlDataReader reader = cmd.ExecuteReader())
                    {
                        i ...

受教了。
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马