OleDbConnection连接问题

u010269523 2013-09-11 08:31:32
我做一个窗体应用 通过按钮执行
  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值。
急求啊 谢谢啦
...全文
1598 12 打赏 收藏 转发到动态 举报
写回复
用AI写文章
12 条回复
切换为时间正序
请发表友善的回复…
发表回复
下页小希 2016-01-27
  • 打赏
  • 举报
回复
楼主我也是这个问题 conn.open()报错了 ServerVersion = “con.ServerVersion”引发了“System.InvalidOperationException”类型的异常,我在 OleDbConnection前面加static不可以
threenewbee 2013-09-11
  • 打赏
  • 举报
回复
引用 10 楼 u010269523 的回复:
[quote=引用 9 楼 caozhy 的回复:] OleDbConnection conn; 写成 static OleDbConnection conn;
谢谢 问题好像是没了 我就是有个疑问 为什么需要把它设置为static 按理说是没有必要这样做的啊[/quote] 你可能new了不同的对象。
u010269523 2013-09-11
  • 打赏
  • 举报
回复
引用 9 楼 caozhy 的回复:
OleDbConnection conn; 写成 static OleDbConnection conn;
谢谢 问题好像是没了 我就是有个疑问 为什么需要把它设置为static 按理说是没有必要这样做的啊
threenewbee 2013-09-11
  • 打赏
  • 举报
回复
OleDbConnection conn; 写成 static OleDbConnection conn;
u010269523 2013-09-11
  • 打赏
  • 举报
回复
引用 6 楼 caozhy 的回复:
在conn = new OleDbConnection(sql);下个断点 单步执行你的程序,看看到底有没有执行到这一行, 以及执行完了conn.Open()是否触发什么异常。
也就是说在开始我通过按钮执行open方法是conn已经是打开了 但是不知道为什么当我执行到comm时它的状态有是close的
u010269523 2013-09-11
  • 打赏
  • 举报
回复
引用 6 楼 caozhy 的回复:
在conn = new OleDbConnection(sql);下个断点 单步执行你的程序,看看到底有没有执行到这一行, 以及执行完了conn.Open()是否触发什么异常。
是这样的 我在conn.Open()和
 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;

        }
都下了断点 当我按下按钮后代码走进了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关闭着的
threenewbee 2013-09-11
  • 打赏
  • 举报
回复
在conn = new OleDbConnection(sql);下个断点 单步执行你的程序,看看到底有没有执行到这一行, 以及执行完了conn.Open()是否触发什么异常。
u010269523 2013-09-11
  • 打赏
  • 举报
回复
引用 3 楼 caozhy 的回复:
你哪里调用的open方法。
说明下 上面那3个timer控件是我哪来测试用的没别的
u010269523 2013-09-11
  • 打赏
  • 举报
回复
引用 3 楼 caozhy 的回复:
你哪里调用的open方法。
我在UI层
  private void button5_Click(object sender, EventArgs e)
        {
            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存就的是数据库连接语句
threenewbee 2013-09-11
  • 打赏
  • 举报
回复
你哪里调用的open方法。
u010269523 2013-09-11
  • 打赏
  • 举报
回复
引用 1 楼 caozhy 的回复:
conn = new OleDbConnection(sql); 连接对象应该传连接字符串,怎么传sql。
@"provider=Microsoft.Jet.OLEDB.4.0;Data Source=C:\Users\admin\Desktop\saomiaoqiang\abc.mdb" 我传的是链接字符串 就是写的有点不规范用sql表示了链接语句 为什么我的conn在后面会成为null呢 我没有把他close啊
threenewbee 2013-09-11
  • 打赏
  • 举报
回复
conn = new OleDbConnection(sql); 连接对象应该传连接字符串,怎么传sql。

110,538

社区成员

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

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

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