我做一个窗体应用 通过按钮执行 OleDbConnection conn;
OleDbDataReader reader;
/// <summary>
/// 打开数据连接
/// </summary>
/// <param name="sql">数据库连接语句</param>
public void open(String sql)
{
conn = new OleDbConnection(sql);
conn.Open();
}
我的意思是执行这一次之后在软件关闭之前都不需要执行close关闭连接
然后我在后面的代码上执行 public bool sql(String sql)
{
OleDbCommand comm = new OleDbCommand();
comm.CommandText = sql;
comm.Connection = conn;
reader=comm.ExecuteReader();
rd = reader.Read();
reader.Close();
return rd; } public void inquire(Object text)
{
object lockojb = new object();
//lock锁
lock (lockojb)
{
//去掉条形码ID的条码号
// da.open(Class1.strconn);
String t=text.ToString().Substring(1);
String ID=text.ToString().Substring(0,1);
String select_one = "select * from tables where 条码号='" +t+ "'";
if (da.sql(select_one)==false)
{
//省略了具体的处理过程
}我创建了一个线程池 在符合一定的条件下都会执行inquire();
ThreadPool.QueueUserWorkItem(new WaitCallback(ts.inquire), text);问题如下:
在我通过按钮执行open()之后 按理说conn在软件关闭之前都是连同的 为什么当我执行到sql()方法来具体执行sql语句是显示“ExecuteReader: Connection 属性尚未初始化”;我用断点去看conn是null值。
急求啊 谢谢啦数据库sql线程池
OleDbDataReader reader;
/// <summary>
/// 打开数据连接
/// </summary>
/// <param name="sql">数据库连接语句</param>
public void open(String sql)
{
conn = new OleDbConnection(sql);
conn.Open();
}
我的意思是执行这一次之后在软件关闭之前都不需要执行close关闭连接
然后我在后面的代码上执行 public bool sql(String sql)
{
OleDbCommand comm = new OleDbCommand();
comm.CommandText = sql;
comm.Connection = conn;
reader=comm.ExecuteReader();
rd = reader.Read();
reader.Close();
return rd; } public void inquire(Object text)
{
object lockojb = new object();
//lock锁
lock (lockojb)
{
//去掉条形码ID的条码号
// da.open(Class1.strconn);
String t=text.ToString().Substring(1);
String ID=text.ToString().Substring(0,1);
String select_one = "select * from tables where 条码号='" +t+ "'";
if (da.sql(select_one)==false)
{
//省略了具体的处理过程
}我创建了一个线程池 在符合一定的条件下都会执行inquire();
ThreadPool.QueueUserWorkItem(new WaitCallback(ts.inquire), text);问题如下:
在我通过按钮执行open()之后 按理说conn在软件关闭之前都是连同的 为什么当我执行到sql()方法来具体执行sql语句是显示“ExecuteReader: Connection 属性尚未初始化”;我用断点去看conn是null值。
急求啊 谢谢啦数据库sql线程池
连接对象应该传连接字符串,怎么传sql。
我传的是链接字符串 就是写的有点不规范用sql表示了链接语句
为什么我的conn在后面会成为null呢
我没有把他close啊
{
cl.openD();
timer1.Enabled = true;
timer2.Enabled = true;
timer3.Enabled = true;
}通过点击按钮条用了BLL层的openD()方法
而BLL层有这么一个对应的方法 public void openD()
{
da.open(Class1.strconn);
}da.open 就是DAL层的conn.open();Class1.strconn是一个静态string存就的是数据库连接语句
单步执行你的程序,看看到底有没有执行到这一行,
以及执行完了conn.Open()是否触发什么异常。
{
OleDbCommand comm = new OleDbCommand();
comm.CommandText = sql;
comm.Connection = conn;
reader=comm.ExecuteReader();
rd = reader.Read();
reader.Close();
return rd; }都下了断点 当我按下按钮后代码走进了conn.open() 点开看conn的状态是open 表示已经打开了没错 单我按下F5断点执行到OleDbCommand comm = new OleDbCommand()是我在把鼠标移到conn上看到conn是空的null 然后我想了下把conn = new OleDbConnection(sql);修改为conn.ConnectionString=sql; 把new OleDbConnection() 放到了clss的下面而不是在方法内new他的实例
当我再次断点执行的时候conn已经不为空了 但是他的start状态显示为close关闭着的
写成
static OleDbConnection conn;