关于多线程查询数据库的问题!
还是一个关于多线程查询数据库出现多个线程查出同一条记录的的问题。
表里本身有个字段,就是判断是否被查询过的。查询过的后的字段被改为false,就不再查询。
但是发觉还是一样,比如用了3线程,同一条记录还是被查处三次。
示例如下:
首先在form1类中
private static void createThread()
{
for (int b = 0; b < 3; b++)
{
Thread thread = new Thread(new ThreadStart(sendMessage));
thread.IsBackground = true;
thread.Name = b.ToString();
thread.Start();
}
}
private static void sendMessage()
{
GetData getdata = new GetData();
Record record = getdata.getNotSendMessage();
...
...
//这里面有数个需要查询不同表的数据,都是getdata这个类中的方法
Thread.Sleep(500);
sendMessage();
}
//GetData类中:
public Record getNotSendMessage()
{
string sql = "getNotSendMessage";
SqlDataReader reader = null;
try
{
DBHelper dbhelp = new DBHelper();
reader = dbhelp.ExecuteProcSelect(sql);
if (reader.Read())
{
Record record = new Record();
...
...
reader.Close();
return record;
}
reader.Close();
dbhelp.closeConnection();
return null;
}
catch (Exception e)
{
...
...
}
}
...
... //也是数个查询方法
//DBHelper 类中
public SqlConnection Connection
{
get
{
string connectionString ="数据库连接语句";
if (connection == null)
{
connection = new SqlConnection(connectionString);
connection.Open();
}
else if (connection.State == ConnectionState.Closed)
{
connection.Open();
}
else if (connection.State ==ConnectionState.Broken)
{
connection.Close();
connection.Open();
}
return connection;
}
}
public void closeConnection()
{
if (connection.State == ConnectionState.Open)
{
connection.Close();
}
else if (connection.State == System.Data.ConnectionState.Broken)
{
connection.Close();
}
}
public SqlDataReader ExecuteProcSelect(string procName, params SqlParameter[] values)
{
SqlCommand cmd = new SqlCommand();
cmd.Connection = Connection;
cmd.CommandText = procName;
cmd.CommandType = CommandType.StoredProcedure;
cmd.Parameters.AddRange(values);
SqlDataReader sdr = cmd.ExecuteReader();
return sdr;
}
...
...
现在主要的是sendMessage所有方法获取数据库中的数据如何让其不重复读取一条,
我试过用用lock都还是不行,在下很少用到线程..所请各位前辈帮帮忙!
表里本身有个字段,就是判断是否被查询过的。查询过的后的字段被改为false,就不再查询。
但是发觉还是一样,比如用了3线程,同一条记录还是被查处三次。
示例如下:
首先在form1类中
private static void createThread()
{
for (int b = 0; b < 3; b++)
{
Thread thread = new Thread(new ThreadStart(sendMessage));
thread.IsBackground = true;
thread.Name = b.ToString();
thread.Start();
}
}
private static void sendMessage()
{
GetData getdata = new GetData();
Record record = getdata.getNotSendMessage();
...
...
//这里面有数个需要查询不同表的数据,都是getdata这个类中的方法
Thread.Sleep(500);
sendMessage();
}
//GetData类中:
public Record getNotSendMessage()
{
string sql = "getNotSendMessage";
SqlDataReader reader = null;
try
{
DBHelper dbhelp = new DBHelper();
reader = dbhelp.ExecuteProcSelect(sql);
if (reader.Read())
{
Record record = new Record();
...
...
reader.Close();
return record;
}
reader.Close();
dbhelp.closeConnection();
return null;
}
catch (Exception e)
{
...
...
}
}
...
... //也是数个查询方法
//DBHelper 类中
public SqlConnection Connection
{
get
{
string connectionString ="数据库连接语句";
if (connection == null)
{
connection = new SqlConnection(connectionString);
connection.Open();
}
else if (connection.State == ConnectionState.Closed)
{
connection.Open();
}
else if (connection.State ==ConnectionState.Broken)
{
connection.Close();
connection.Open();
}
return connection;
}
}
public void closeConnection()
{
if (connection.State == ConnectionState.Open)
{
connection.Close();
}
else if (connection.State == System.Data.ConnectionState.Broken)
{
connection.Close();
}
}
public SqlDataReader ExecuteProcSelect(string procName, params SqlParameter[] values)
{
SqlCommand cmd = new SqlCommand();
cmd.Connection = Connection;
cmd.CommandText = procName;
cmd.CommandType = CommandType.StoredProcedure;
cmd.Parameters.AddRange(values);
SqlDataReader sdr = cmd.ExecuteReader();
return sdr;
}
...
...
现在主要的是sendMessage所有方法获取数据库中的数据如何让其不重复读取一条,
我试过用用lock都还是不行,在下很少用到线程..所请各位前辈帮帮忙!
...全文
相关推荐
java多线程查询数据库
综上所述,"java多线程查询数据库"是一个涉及多线程技术、线程池管理、并发控制、分页查询等多个方面的复杂问题。通过理解和掌握这些知识点,我们可以有效地提高数据库操作的效率和系统的响应速度。
python使用多线程查询数据库的实现示例
### Python使用多线程查询数据库的实现示例详解#### 一、背景在实际的应用场景中,当处理的数据量非常大时,程序往往需要花费大量的时间等待数据库查询结果的返回。
C#异步操作 异步查询数据库 异步处理一行一行加载数据
在C#编程中,异步操作是现代应用开发的关键特性,尤其在处理大量数据或进行I/O密集型任务时,如查询数据库。本主题将深入探讨C#中的异步概念,如何异步查询数据库,以及如何异步处理一行一行加载的数据。
根据变量查询数据库
根据变量查询数据库是一种常用的技术手段,它能够帮助我们快速定位并检索所需信息,极大地提高了数据处理的效率和灵活性。本文将详细探讨根据变量查询数据库的技术细节、优势及应用场景。
Django 查询数据库并返回页面的例子
在本例中,我们将实现一个简单的功能:根据用户的名称查询数据库中的信息,并将查询结果显示在Web页面上。


