本帖最后由 Always. 于 2013-9-24 18:33 编辑
我把思路整理了一下,希望能帮到初学的人。大的思想是:先导入
第一步:弹出目录选择框,让用户选择一个文件夹
第二步:扫描文件夹
第三步:得到文件夹下的多个txt文件名
第四步:将文件夹中的每个txt中的内容导入到数据库(导入之前,要清楚表的内容)
第五步:导入操作的时候,txt内容中的每一行进行拆分
再查询:
第六步:根据用户输入的手机号码来读取运营商信息,看是否介于那段号码之间。
每一步的代码已给出(直接复制过去,是运行不了的,还需要自己稍作整理,对认真编写代码的人来说是没有问题的)- FolderBrowserDialog dlg = new FolderBrowserDialog();
- if (dlg.ShowDialog() != DialogResult.OK)
- {
- return;
- }
- string path = dlg.SelectedPath;
- MessageBox.Show(path);
- string connStr = ConfigurationManager.ConnectionStrings["connStr"].ConnectionString;
- using (SqlConnection conn = new SqlConnection(connStr))
- {
- conn.Open();
- using (SqlCommand cmd = conn.CreateCommand())
- {
- cmd.CommandText = "delete from T_numbers";
- cmd.ExecuteNonQuery();
- }
- }
- string[] files = Directory.GetFiles(path, "*.txt", SearchOption.AllDirectories); //返回路径下的所有txt文件
- using (SqlConnection conn = new SqlConnection(connStr))
- {
- conn.Open();
- using (SqlCommand cmd = conn.CreateCommand())
- {
- cmd.CommandText = "insert into T_numbers(startno,endno,Name) values(@startno,@endno,@Name)";
- cmd.ExecuteNonQuery();
- foreach (string file in files) //处理文件夹中的每个Txt,得到运营商名称
- {
- string 运营商名称 = Path.GetFileNameWithoutExtension(file);
- string[] lines = File.ReadAllLines(file, Encoding.Default); //读去Txt文件下的每一个数据
- //将每个txt中的内容导入数据库中
- foreach (string line in lines) //处理所有行中的一行,通过循环处理所有行
- {
- //将每一行按"—"进行拆分(eg:15173000000-15179009999-岳阳)
- string[] remove = line.Split('-');
- string 开始号码 = remove[0];
- string 结束号码 = remove[1];
- string 市 = remove[2];
- cmd.Parameters.Clear(); //清楚旧的参数
- cmd.Parameters.Add(new SqlParameter("startno", 开始号码));
- cmd.Parameters.Add(new SqlParameter("endno", 结束号码));
- cmd.Parameters.Add(new SqlParameter("Name", 运营商名称 + 市));
- cmd.ExecuteNonQuery();
- }
- }
- }
- }
复制代码- private void btnSearch_Click(object sender, EventArgs e)
- {
- string connStr = ConfigurationManager.ConnectionStrings["connStr"].ConnectionString;
- using (SqlConnection conn = new SqlConnection(connStr))
- {
- conn.Open();
- using (SqlCommand cmd = conn.CreateCommand())
- {
- cmd.CommandText = "select * from T_numbers where starno<=@NO and endno>=@NO";
- cmd.Parameters.Add(new SqlParameter("NO", txtPhone.Text));
- using (SqlDataReader reader = cmd.ExecuteReader())
- {
- if (reader.Read()) //如果在那个区间,则把市那一列的内容输出来
- {
- string result = reader.GetString(reader.GetOrdinal("市"));
- MessageBox.Show(result);
- }
- else
- {
- MessageBox.Show("归属地未知");
- }
- }
- }
- }
- }
复制代码 还有更为简便的思路吗 ?请指教!
|