我做了一个数据库SQL连接类(ConDB),主要负责与数据库端的通信
然后我的主程序(Test)引用其访问数据库,这步是正常的
接下来我再写一个Winform的程序(leave)编译成类库(leave.dll),其中引用了ConDB类对数据库进行操作.然后我在主程序中实例化leave类,结果无论如何都访问不到数据库.在open方法的时候直接报错,说没有将对象实例化.
求助~希望各位能解答.谢谢
然后我的主程序(Test)引用其访问数据库,这步是正常的
接下来我再写一个Winform的程序(leave)编译成类库(leave.dll),其中引用了ConDB类对数据库进行操作.然后我在主程序中实例化leave类,结果无论如何都访问不到数据库.在open方法的时候直接报错,说没有将对象实例化.
求助~希望各位能解答.谢谢
呵呵~我都不知道从那里贴比较好啊,太长了..
.......能看看你的吗?
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();
}
if(sqlcon.State == ConnectionState.Open)
{
sqlcon.Close();
}
sqlcon.State在报错前是close的