我做了一个数据库SQL连接类(ConDB),主要负责与数据库端的通信
然后我的主程序(Test)引用其访问数据库,这步是正常的
接下来我再写一个Winform的程序(leave)编译成类库(leave.dll),其中引用了ConDB类对数据库进行操作.然后我在主程序中实例化leave类,结果无论如何都访问不到数据库.在open方法的时候直接报错,说没有将对象实例化.
求助~希望各位能解答.谢谢

解决方案 »

  1.   

    贴代码?
    呵呵~我都不知道从那里贴比较好啊,太长了..
    .......能看看你的吗?
    ConDB就是里封装了几个Command以及Adapter的方法
    在leave这个类里调用ConDB封装的方法进行了数据库的读写
    在Test里调用leave,并show了出来..结果就造成了上述情况///ConDB Start///
    using System;
    using System.Data;
    using System.Data.SqlClient;
    using System.Web;namespace ConDB
    {
    /// <summary>
    /// Class1 的摘要说明。
    /// </summary>
    public class ConnectDB
    {
    private SqlConnection sqlcon;
    private SqlCommand cmd;
    private SqlDataAdapter dap;
    DataSet ds;
    string sqlconstr = ""; public ConnectDB()
    {
            sqlconstr = getConStr(path1); } protected string getConStr(string path)
    {
    string constr;
    constr = @"Server=.;Database=fff;User ID=f;Password=f;";
    return constr;
    }//跟踪代码就是报错在这里,但是我想不出这里有什么问题
    public bool ConDB()
    {
    try
    {
    sqlcon = new SqlConnection(sqlconstr);
    if(sqlcon.State.ToString() == "CLOSED" || sqlcon.State.ToString() == "Closed")
    {
    sqlcon.Open();
    }
    return true;
    }
    catch(Exception err)
    {
    try
    {
    sqlcon = new SqlConnection(getConStr(@"Server=.;Database=fff;User ID=f;Password=f;"));
    if(sqlcon.State.ToString() == "CLOSED" || sqlcon.State.ToString() == "Closed")
    {
    sqlcon.Open();
    }
    return true;
    }
    catch
    {
    this.Close();
    return false;
    }
    }
    } public DataTable QueryData(string sqlstr)
    {
    try
    {
    dap = new SqlDataAdapter(sqlstr,sqlcon);
    ds = new DataSet();
    dap.Fill(ds,"tab");
    sqlcon.Close();
    return ds.Tables["tab"];
    }
    catch
    {
    sqlcon.Close();
    return null;
    } } public void Close()
    {
    if(sqlcon.State.ToString() != "CLOSED" || sqlcon.State.ToString() != "Closed")
    {
    sqlcon.Close();
    }
    }
    }
    }//////////////Test
    这个的代码没有什么意义,本来就是用来测试的窗体
    using leave;private void button1_Click(object sender, System.EventArgs e)
    {
    // leave.Form1 a=new leave.Form1();
    // a.Show();}////////leave///////////
    using ConDB;private void button1_Click(object sender, System.EventArgs e)
    {
          cdb.ConDB();//这步不能通过
          this.dtPass=cdb.QueryData(@"SELECT * FROM Leave WHERE Leave_ID='"+txtLeave.Text+"'");
          this.dtPass.TableName="Leave";
          dgiDetail.DataSource=this.dtPass;
          cdb.Close();
    }
      

  2.   

    打开连接之前加上
    if(sqlcon.State == ConnectionState.Open)
    {
         sqlcon.Close();
    }
      

  3.   

    我跟踪过。。
    sqlcon.State在报错前是close的
      

  4.   

    别管它是不是close,加上试试吧。:)