c#多线程操作数据库问题

w350809090 2015-12-30 03:13:13
各位好我是c#一个初学者,今天刚发现了篇写多线程的文章,想到了昨天写的项目看看是否可以改进程多线程的但是出现了一些问题,请各位指教。
线程代码。
public static void ThreadProc5()
{
Thread thread5 = new Thread(new ThreadStart(ThreadProc4));
thread5.Start();
string mysql1 = "server=127.0.0.1;User Id=root;password=root;Database=wangyi";
MySqlConnection conn = new MySqlConnection(mysql1);
MySqlCommand str = new MySqlCommand("select count(*) from number", conn);
conn.Open();
MySqlDataReader reader;
reader = str.ExecuteReader();
if (reader.Read())
{
int oneinnumber = Convert.ToInt32(reader["count(*)"].ToString());
for (int i = 0; i <= oneinnumber + 1; i++)
{

MySqlConnection conn1 = new MySqlConnection(mysql1);
MySqlCommand str1 = new MySqlCommand("select name from number limit 5,1", conn1);
conn1.Open();
MySqlDataReader reader2;
reader2 = str1.ExecuteReader();
if (reader2.Read())
{
Uri uri = new Uri("http://zc.reg.163.com/checkName?id=EBB7F4D4BBD222E1408090F4247D9CF1735193ADBFB23AA5C7D70E6F266E44D89B233DECEC3106B6FE4D083202B913130439486E0046D4B0AD070FDB0FE98DC9D4B029B4FF47E56B89DBB106B22E9956&userName=" + reader2["name"].ToString() + "&channel=1");
HttpWebRequest myReq = (HttpWebRequest)WebRequest.Create(uri);
myReq.UserAgent = "User-Agent:Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.2; .NET CLR 1.0.3705";
myReq.Accept = "*/*";
myReq.KeepAlive = true;
myReq.Headers.Add("Accept-Language", "zh-cn,en-us;q=0.5");
HttpWebResponse result = (HttpWebResponse)myReq.GetResponse();
Stream receviceStream = result.GetResponseStream();
StreamReader readerOfStream = new StreamReader(receviceStream, System.Text.Encoding.GetEncoding("utf-8"));
string acc = readerOfStream.ReadToEnd();
if (acc.IndexOf("104") >= 0 || acc.IndexOf("401") >= 0)
{
MySqlConnection conn2 = new MySqlConnection(mysql1);
MySqlCommand str2 = new MySqlCommand("delete from number where name = '" + reader2["name"].ToString() + "'", conn2);
conn2.Open();
MySqlDataReader reader3;
reader3 = str2.ExecuteReader();
conn2.Close();
}
else if (acc.IndexOf("407") >= 0)
{
MySqlConnection conn4 = new MySqlConnection(mysql1);
MySqlCommand str4 = new MySqlCommand("delete from number where name = '" + reader2["name"].ToString() + "'", conn4);
conn4.Open();
MySqlDataReader reader5;
reader5 = str4.ExecuteReader();
conn4.Close();
MySqlConnection conn3 = new MySqlConnection(mysql1);
MySqlCommand str3 = new MySqlCommand("insert into numberok (name) values ('" + reader2["name"].ToString() + "')", conn3);
conn3.Open();
MySqlDataReader reader4;
reader4 = str3.ExecuteReader();
conn3.Close();
}
readerOfStream.Close();
receviceStream.Close();
result.Close();
conn1.Close();
}
}
//fs.Close();
}

conn.Close();
}

我谢了5个线程代码,全部是相同的。
调用代码
 private void button1_Click(object sender, EventArgs e)
{

Thread thread6 = new Thread(new ThreadStart(ThreadProc5));
thread6.Start();

}

可是我感觉这样写还没以前快。不知道是什么问题。我百度到在执行数据库操作的时候多线程有个锁的概念,也没接触过
...全文
257 6 打赏 收藏 转发到动态 举报
写回复
用AI写文章
6 条回复
切换为时间正序
请发表友善的回复…
发表回复
正怒月神 2015-12-31
  • 打赏
  • 举报
回复
先要总体了解多线程。不然你对数据库用多线程操作,但是又没有锁的情况下。 很容易产生脏数据。 但这个不是一句两句说的完的
w350809090 2015-12-30
  • 打赏
  • 举报
回复
在使用backgroundWorker控件之后也是同样的情况,我这里是12核的运行环境,我写了五个线程不应该卡住,但是我用label计算的时候,他总是等待别的线程完成之后才执行 1/100 1/100 1/100 1/100 0/100 //如果没有执行其他线程也不会动
w350809090 2015-12-30
  • 打赏
  • 举报
回复
引用 2 楼 dongxinxi 的回复:
delete后又insert,可以试试改用update一次完成
- -不是同一张表。第一张表要到最后判断有没有漏掉的所以没办法用update。
w350809090 2015-12-30
  • 打赏
  • 举报
回复
引用 1 楼 shingoscar 的回复:
你看的那篇文章有提及多线程一定比单线程快吗?
额没有,这个只是我自己的想法,同时执行5个和执行一个在同一时间内应该是比较快的。。
  • 打赏
  • 举报
回复
delete后又insert,可以试试改用update一次完成
Poopaye 2015-12-30
  • 打赏
  • 举报
回复
你看的那篇文章有提及多线程一定比单线程快吗?

110,534

社区成员

发帖
与我相关
我的任务
社区描述
.NET技术 C#
社区管理员
  • C#
  • Web++
  • by_封爱
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告

让您成为最强悍的C#开发者

试试用AI创作助手写篇文章吧