电话号码归属地查询——验证sqlserver数据库支持同时多线程操作数据表
2011-12-05 21:07
337 查看
---------------------- android培训、java培训、期待与您交流! ----------------------
由于要入学传智播客asp.net黑马班必须经过严格的入学考试,而写技术blog则是这个入学考试非常重要的一个环节。我说过我不是个勤快的人,所以这对我来说,这个就自然是个比较难的一个环节。但能怎么着呢?要想入学,要想0元入学,要想学牛逼的技术,还得老老实实的写blog不是。按照我的习惯,要么不做,那要做就尽自己最大能力做好它。我虽不大勤快,但也不会敷衍了事。要说这技术方面,尤其是asp.net,我还真没什么经验。所以要写出什么牛逼的文章,那也是不可能的,即使说可能,那也是扯蛋。但总的写点什么,虽不说要多牛X,但总得见得人吧(自认为见得人)。所以呢,在选题的时候,我就想啊想,写点什么好呢??真是天生我才必有用,像这懒人,沿着懒人的思路,就自然想出来懒人的法子。从入学基础视频入手,扩展老师讲过的一个案例。如果有时间,我会将老师讲过的知识点,糅合在一个项目里来。但天知道有没有足够的时间来写呢,毕竟现在还有班要上,有工作要做。但我希望自己能够坚持完成。
其他的不多说,先从第一个项目开始。这个项目来源于传智播客张中科老师在asp.net基础知识ado.net中讲到的一个练手案例——电话号码归属地查询。
于是我也跟着写这个程序练手,但不幸的是我下到的电话号码段归属地信息文件只有一个文本文件,由于信息共有几十万条,文件就比较大,打开和导入数据库更慢了。我曾写单线程程序进行导数据,发现导了20多分钟,导到20多万条,但还没有结束,也不知道还有多少数据没有导入。这还不是最大的问题,更大的问题是这个程序只有一个线程(主线程),由于其一直被占用(在导数据),导致程序无法响应用户操作,像死机了一样,连关闭都做不了(单线程的缺点)。由于我实在是不想等了,就强行的结束了进程。后来学了后续的视频课程,自然就想到了用多线程来做。如果要用多线程来做,有个问题必须先解决:sqlserver数据库是否允许多线程同事操作数据表,能否用多个线程同时往一个数据表中写数据?
针对这个问题,在网上看了下,发现是可以的。于是就写了个程序验证这个问题。实际上,这个程序共验证了两个问题:
1.线程是独立运行的,但线程之间共享存储器;
2.sqlserver是支持多线程同时操作数据表的;
验证步骤:
1、新建一个数据表:T_users
id(int)
key 自动增长
name(varchar)
可为空
age(int)
可为空
2、写代码,建立两个线程,同时往表中写入数据,代码如下:
导入的数据如图:
分析以上结果可验证以上两个结论,即:
sqlserver支持多线程同步操作数据表;线程之间是共享同一个存储器的。
---------------------- android培训、java培训、期待与您交流! ----------------------
由于要入学传智播客asp.net黑马班必须经过严格的入学考试,而写技术blog则是这个入学考试非常重要的一个环节。我说过我不是个勤快的人,所以这对我来说,这个就自然是个比较难的一个环节。但能怎么着呢?要想入学,要想0元入学,要想学牛逼的技术,还得老老实实的写blog不是。按照我的习惯,要么不做,那要做就尽自己最大能力做好它。我虽不大勤快,但也不会敷衍了事。要说这技术方面,尤其是asp.net,我还真没什么经验。所以要写出什么牛逼的文章,那也是不可能的,即使说可能,那也是扯蛋。但总的写点什么,虽不说要多牛X,但总得见得人吧(自认为见得人)。所以呢,在选题的时候,我就想啊想,写点什么好呢??真是天生我才必有用,像这懒人,沿着懒人的思路,就自然想出来懒人的法子。从入学基础视频入手,扩展老师讲过的一个案例。如果有时间,我会将老师讲过的知识点,糅合在一个项目里来。但天知道有没有足够的时间来写呢,毕竟现在还有班要上,有工作要做。但我希望自己能够坚持完成。
其他的不多说,先从第一个项目开始。这个项目来源于传智播客张中科老师在asp.net基础知识ado.net中讲到的一个练手案例——电话号码归属地查询。
于是我也跟着写这个程序练手,但不幸的是我下到的电话号码段归属地信息文件只有一个文本文件,由于信息共有几十万条,文件就比较大,打开和导入数据库更慢了。我曾写单线程程序进行导数据,发现导了20多分钟,导到20多万条,但还没有结束,也不知道还有多少数据没有导入。这还不是最大的问题,更大的问题是这个程序只有一个线程(主线程),由于其一直被占用(在导数据),导致程序无法响应用户操作,像死机了一样,连关闭都做不了(单线程的缺点)。由于我实在是不想等了,就强行的结束了进程。后来学了后续的视频课程,自然就想到了用多线程来做。如果要用多线程来做,有个问题必须先解决:sqlserver数据库是否允许多线程同事操作数据表,能否用多个线程同时往一个数据表中写数据?
针对这个问题,在网上看了下,发现是可以的。于是就写了个程序验证这个问题。实际上,这个程序共验证了两个问题:
1.线程是独立运行的,但线程之间共享存储器;
2.sqlserver是支持多线程同时操作数据表的;
验证步骤:
1、新建一个数据表:T_users
id(int)
key 自动增长
name(varchar)
可为空
age(int)
可为空
2、写代码,建立两个线程,同时往表中写入数据,代码如下:
private void button1_Click(object sender, EventArgs e) { Thread t1 = new Thread(InsertData); t1.IsBackground = true; t1.Name = "T1"; t1.Start("Tom"); Console.WriteLine("t1 启动。"); Thread t2 = new Thread(InsertData); t2.IsBackground = true; t2.Name = "T2"; t2.Start("Jim"); Console.WriteLine("t2 启动。"); } void InsertData(object name) { using (SqlConnection conn = new SqlConnection()) { conn.ConnectionString = ConfigurationManager.ConnectionStrings["conStr"].ConnectionString; conn.Open(); using (SqlCommand cmd = conn.CreateCommand()) { string userName = name as string; int userAge=0; cmd.CommandText = "insert into t_users(name,age) values(@name,@age)"; for(userAge=0;userAge<100;userAge++) { Console.WriteLine(Thread.CurrentThread.Name); userName="Jim"+userAge.ToString(); cmd.Parameters.Clear(); cmd.Parameters.Add(new SqlParameter("name",userName)); cmd.Parameters.Add(new SqlParameter("age",userAge)); cmd.ExecuteNonQuery(); } } } }运行代码,得到如下图的控制台输出
导入的数据如图:
分析以上结果可验证以上两个结论,即:
sqlserver支持多线程同步操作数据表;线程之间是共享同一个存储器的。
---------------------- android培训、java培训、期待与您交流! ----------------------
相关文章推荐
- 电话号码归属地查询——使用多线程从文本文件导数据到数据库中
- DNS同时占用UDP和TCP端口53——传输数据超过512时候用tcp,DNS服务器可以配置仅支持UDP查询包
- 运用python调用聚合数据接口查询电话号码归属地
- 腾讯云图片鉴黄集成到C# SQL Server 怎么在分页获取数据的同时获取到总记录数 sqlserver 操作数据表语句模板 .NET MVC后台发送post请求 百度api查询多个地址的经纬度的问题 try{}里有一个 return 语句,那么紧跟在这个 try 后的 finally {}里的 code 会 不会被执行,什么时候被执行,在 return 前还是后? js获取某个日期
- QSqlDatabase的进一步封装(多线程支持+更加简单的操作)——同时支持MySQL, SQL Server和Sqlite
- mysql查询数据的同时对它进行删除操作
- TableStore表格存储(阿里云OTS)多行数据操作查询,支持倒序,过滤条件和分页
- ###(很难找的页面错误)查询操作不需要 返回 操作成功后失败。【方法不能同时执行两个response返回两次数据。导致页面显示数据失败】
- 关于mysql数据库对一张数据表查询的同时进行增删改操作
- 对查询得到的List数据,进行分页操作
- 通过一个表的id同时查询多个表的数据
- Yii2框架数据验证操作实例详解
- 限制表同时只能一个Session进行数据操作
- Oracle中快速查询和操作某个用户下的所有表数据信息
- 电话号码归属地查询
- Java操作Hbase进行建表、删表以及对数据进行增删改查,条件查询
- 多线程同时操作界面使用互斥体
- C#多线程更新,查询MongoDB数据
- 稳扎稳打Silverlight(57) - 4.0通信之WCF RIA Services: 概述, 通过 DomainDataSource 实现数据的添加、查询、更新和删除操作
- 稳扎稳打Silverlight(57) - 4.0通信之WCF RIA Services: 概述, 通过 DomainDataSource 实现数据的添加、查询、更新和删除操作