ADO.Net实例之手机号码归属地

本人在练习ADO.Net时所做的一些例子,现记如下笔记:

第一篇:手机号码归属地练习

第一步:在“引用”项里添加一个引用:System.configuration。

第二步:在项目里右键->添加->新建项->添加一个“应用程序配置文件”即App.config文件。

该文件的代码如下所示:

View Code
<?xml version="1.0" encoding="utf-8" ?>
<configuration>
<connectionStrings>
<add name="ConnStr" connectionString="Data Source=.\SQLEXPRESS;AttachDBFilename=|DataDirectory|\Phone.mdf;
Integrated Security=True;User Instance=True"/>
</connectionStrings>
</configuration>

 

 第三步:在Program.cs页面的Main()方法中添加如下连接ADO.Net中创建数据库的代码:

其作用:这段代码时用于读取AD.Net下创建的数据库,不加则读取根目录Debug下的数据库

View Code
string dataDir = AppDomain.CurrentDomain.BaseDirectory;
if (dataDir.EndsWith(@"\bin\Debug\")
|| dataDir.EndsWith(@"\bin\Release\"))
{
dataDir = System.IO.Directory.GetParent(dataDir).Parent.Parent.FullName;
AppDomain.CurrentDomain.SetData("DataDirectory", dataDir);
}

第四步:在项目里右键->添加->新建项->添加一个“基于服务的数据库”(数据库名为:Phone.mdb);数据库有四个字段:Id(标识符),StartNo(开始号码),EndNo(结束号码),TMobile(运营商)。

最后,在窗体Form1.cs页面中添加两个using命令:using System.IO;和using System.Data.SqlClient;然后,在窗体上拖出一个按钮:用于单击时导入数据。
该页面的完整代码如下:

View Code
 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.Configuration;
11 using System.Data.SqlClient;
12
13 namespace 手机号码归属地查询
14 {
15 public partial class Form1 : Form
16 {
17 public Form1()
18 {
19 InitializeComponent();
20 }
21
22 private void btnImport_Click(object sender, EventArgs e)
23 {
24 FolderBrowserDialog dlg = new FolderBrowserDialog();
25 if (dlg.ShowDialog() != DialogResult.OK)
26 {
27 return;
28 }
29 string path = dlg.SelectedPath;
30 string connStr = ConfigurationManager.ConnectionStrings["ConnStr"].ConnectionString;
31 using (SqlConnection conn = new SqlConnection(connStr))
32 {
33 conn.Open();
34 using (SqlCommand cmd = conn.CreateCommand())
35 {
36 cmd.CommandText = "Delete from T_Numbers";//先清除所有数据,再导入数据
37 cmd.ExecuteNonQuery();
38 }
39 }
40 //因要搜索的文件夹内没有子文件夹,所以不选AllDirectories.
41 string[] files = Directory.GetFiles(path, "*.txt", SearchOption.TopDirectoryOnly);
42 using (SqlConnection conn = new SqlConnection(connStr))
43 {
44 conn.Open();
45 using (SqlCommand cmd = conn.CreateCommand())
46 {
47 cmd.CommandText = "Insert into T_Numbers(StartNo,EndNo,TMobile)values(@StartNo,@EndNo,@TMobile)";
48 foreach (string file in files)
49 {
50 string OpName = Path.GetFileNameWithoutExtension(file);
51 //不用StreamReader,因文件很小,一次性加载也不占多少内存。经反编译得知,ReadAllLines默认编码是UTF-8
52 string[] lines = File.ReadAllLines(file, Encoding.Default);//中文操作系统默认编码就是ASCII
53 foreach (string line in lines)
54 {
55 //MessageBox.Show(line);
56 string[] strs = line.Split('-');
57 string startNo = strs[0];
58 string endNo = strs[1];
59 string diQu = strs[2];
60
61 cmd.Parameters.Clear();//每次遍历前先把旧参数清空
62 cmd.Parameters.Add(new SqlParameter("StartNo",startNo));
63 cmd.Parameters.Add(new SqlParameter("EndNo",endNo));
64 cmd.Parameters.Add(new SqlParameter("TMobile",OpName+diQu));//运营商名称显示为"运营商加上地区"
65 cmd.ExecuteNonQuery();
66 }
67 }
68 }
69 }
70 MessageBox.Show("数据导入成功!");
71 }
72
73 private void btnSearch_Click(object sender, EventArgs e)
74 {
75 string connStr = ConfigurationManager.ConnectionStrings["ConnStr"].ConnectionString;
76 using (SqlConnection conn = new SqlConnection(connStr))
77 {
78 conn.Open();
79 using (SqlCommand cmd = conn.CreateCommand())
80 {
81 cmd.CommandText = "Select * from T_Numbers where StartNo<=@No and EndNo>=@No";
82 cmd.Parameters.Add(new SqlParameter("No",tB_Phone.Text));
83 using (SqlDataReader reader = cmd.ExecuteReader())
84 {
85 if (reader.Read())
86 {
87 string name = reader.GetString(reader.GetOrdinal("TMobile"));
88 MessageBox.Show("手机号码归属地是:"+ name);
89 }
90 else
91 {
92 MessageBox.Show("找不到运营商的信息!");
93 }
94 }
95 }
96 }
97 }
98 }
99 }



                                          第二篇:可空数据类型
C#中可空数据类型简单介绍:
1、C#中值类型(int、Guid、bool等)是不可以为空的,int i=null是错误的,因此int、bool等这些类型不能表示数据库中的"Null"。因此C#提供了“可空类型”这种语法,只要在类型后加上"?"就构成了可空的数据类型,比如int?、bool?等,这样int? i=null;就可以了
2、判断可空类型是否为空,i==null或者i.HasValue;得到可空变量的值,int i1=(int)i.Value或者int i1=i.Value。
3、类型转换:不可空类型赋值给可空类型无需显式转换(一定成功),可空类型赋值给不可空类型则需显式转换(不一定成功)。
在一个控制台应用程序中的Program.cs页面中:

View Code
 1 using System;
2 using System.Collections.Generic;
3 using System.Linq;
4 using System.Text;
5
6 namespace 可空数据类型
7 {
8 class Program
9 {
10 static void Main(string[] args)
11 {
12 string str = null;
13 int? i1= null; //int?是可空的int,解决数据库和C#对于int是否可以为null的不同所设置的
14 int? i2 = 0;
15 int? i3 = 3;
16 if (i3 == null)
17 {
18 Console.WriteLine("i3为空");
19 }
20 else
21 {
22 i3++;
23 //int i4 = (int)i3;
24 Console.WriteLine("i3不为空,i3++={0}",i3);
25 }
26 if (i3.HasValue)//判断当前对象是否有值
27 {
28 int i4 = i3.Value;
29 Console.WriteLine("i3不为空");
30 Console.WriteLine("i4的值为{0}",i4);
31 }
32 else
33 {
34 Console.WriteLine("i3为空");
35 }
36 Console.ReadKey();
37 }
38 }
39 }


posted on 2011-12-10 21:23  Gelivable【IT随笔】  阅读(710)  评论(0编辑  收藏  举报

导航