黑马程序员技术交流社区
标题:
致初学者:手机号码归属地查询
[打印本页]
作者:
Always.
时间:
2013-9-24 13:32
标题:
致初学者:手机号码归属地查询
本帖最后由 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("归属地未知");
}
}
}
}
}
复制代码
还有更为简便的思路吗 ?请指教!
作者:
七里香
时间:
2013-9-24 14:42
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();
}
作者:
Always.
时间:
2013-9-24 18:33
七里香 发表于 2013-9-24 14:42
using (SqlDataReader reader = cmd.ExecuteReader())
{
i ...
受教了。
欢迎光临 黑马程序员技术交流社区 (http://bbs.itheima.com/)
黑马程序员IT技术论坛 X3.2