以下為我建的一個數據庫類,我開啟每個窗體SqlConnection都會重新連接,因為我有加 _SqlBaseClass_DB=new SqlBaseClass_DB(ConnStr)到from_Load中我現在想像delphi一樣的ADOConnection 一樣,定義一個全局的_SqlConnection,
應該怎么樣做啊.我想在frmMain 中 public static SqlBaseClass_DB _SqlBaseClass_DB 是不是最好的辦法,另外SqlConnection.Close; 是將連放入連接池中,Close是不是不是真的中斷public class SqlBaseClass_DB
{
private SqlConnection _SqlConnection;
private SqlDataAdapter _SqlDataAdapter;
private DataSet _DataSet;
private DataTable _DataTable;
private SqlCommand _SqlCommand;
private SqlDataReader _SqlDataReader;
private DataView _DataView;
private SqlCommandBuilder _SqlCommandBuilder;
private string _SqlText; //Sql 文本
private string _ErrInfo; //錯誤信息
private string _ConnStr; //連接字符串
private readonly string _Caption="錯誤"; //對話框Caption
private readonly MessageBoxButtons _Buttons=MessageBoxButtons.OK; //對話框按鈕
private readonly MessageBoxIcon _Icon=MessageBoxIcon.Error; //對話框顯示的圖標 public SqlBaseClass_DB()
{
//
// TODO: Add constructor logic here
//
_ConnStr= @"user id=sa;PWD=;data source=EH02;" +
"persist security info=False;" +
"initial catalog=FSYH";
_SqlConnection =new SqlConnection(_ConnStr); } public SqlBaseClass_DB(string ConnectionStr)
{
_SqlConnection =new SqlConnection(ConnectionStr);
} public bool Open() //開啟連接
{
try
{
if (_SqlConnection.State!=ConnectionState.Open)
{
_SqlConnection.Open();
}
return true;
}
catch(SqlException EX)
{
SqlExceptionShow(EX);
_SqlConnection.Close();
return false;
}
} public void Close() //關閉連接
{
if (_SqlConnection.State==ConnectionState.Open)
_SqlConnection.Close();
} public SqlConnection GetCon()
{
this.Open();
return _SqlConnection;
} public bool Exectute(string cmdtxt) //執行SQL 語句段
{
this.Open();
_SqlCommand=new SqlCommand(cmdtxt,this.GetCon());
try
{
_SqlCommand.ExecuteNonQuery();
return true;
}
catch(SqlException EX)
{
SqlExceptionShow(EX);
return false;
}
} public DataSet GetDataSet(string cmdtxt) //獲得數據集
{
try
{
_SqlDataAdapter= new SqlDataAdapter(cmdtxt,this.GetCon());
_DataSet=new DataSet();
_SqlDataAdapter.Fill(_DataSet);
return _DataSet;
}
catch(SqlException EX)
{
SqlExceptionShow(EX);
return null;
}
}
public DataSet GetDataSet(string cmdtxt,string TableName) //獲得數據集(可設定表名)
{
try
{
_SqlDataAdapter= new SqlDataAdapter(cmdtxt,this.GetCon());
_DataSet=new DataSet();
_SqlDataAdapter.Fill(_DataSet,TableName);
return _DataSet;
}
catch(SqlException EX)
{
SqlExceptionShow(EX);
return null;
}
} private void SqlExceptionShow(SqlException EX) //顯示異常
{
for (int i=0;i<EX.Errors.Count;i++)
{
_ErrInfo += "錯誤序號 :" + i + "\n" +
"出錯信息 :" + EX.Errors[i].Message + "\n" +
"出錯來源 :" + EX.Errors[i].Source + "\n" +
"程 序 :" + EX.Errors[i].Procedure;
}
MessageBox.Show(_ErrInfo,_Caption,_Buttons,_Icon);
} public SqlDataReader GetReader(string cmdtxt)
{
_SqlCommand=new SqlCommand(cmdtxt,this.GetCon());
_SqlDataReader = _SqlCommand.ExecuteReader();
try
{
return _SqlDataReader;
}
catch(SqlException EX)
{
SqlExceptionShow(EX);
return null;
} } public DataView GetDataView(string cmdtxt)
{
try
{
_SqlDataAdapter=new SqlDataAdapter(cmdtxt,this.GetCon());
_SqlDataAdapter.Fill(_DataSet);
_DataView=new DataView(_DataSet.Tables[0]);
return _DataView;
}
catch(SqlException EX)
{
SqlExceptionShow(EX);
return null;
} } public DataTable GetTable(string cmdtxt,string tablename)
{
try
{
_SqlDataAdapter = new SqlDataAdapter(cmdtxt, this.GetCon());
_DataTable=new DataTable(tablename);
_SqlDataAdapter.Fill(_DataTable);
return _DataTable;
}
catch(SqlException EX)
{
SqlExceptionShow(EX);
return null;
}
} #region 屬性 public string SqlText
{
set
{
_SqlText = value;
}
get
{
return _SqlText;
}
} public string ErrInfo
{
set
{
_ErrInfo = value;
}
get
{
return _ErrInfo;
}
} public string ConnStr
{
set
{
_ConnStr = value;
}
get
{
return _ConnStr;
}
}
#endregion
應該怎么樣做啊.我想在frmMain 中 public static SqlBaseClass_DB _SqlBaseClass_DB 是不是最好的辦法,另外SqlConnection.Close; 是將連放入連接池中,Close是不是不是真的中斷public class SqlBaseClass_DB
{
private SqlConnection _SqlConnection;
private SqlDataAdapter _SqlDataAdapter;
private DataSet _DataSet;
private DataTable _DataTable;
private SqlCommand _SqlCommand;
private SqlDataReader _SqlDataReader;
private DataView _DataView;
private SqlCommandBuilder _SqlCommandBuilder;
private string _SqlText; //Sql 文本
private string _ErrInfo; //錯誤信息
private string _ConnStr; //連接字符串
private readonly string _Caption="錯誤"; //對話框Caption
private readonly MessageBoxButtons _Buttons=MessageBoxButtons.OK; //對話框按鈕
private readonly MessageBoxIcon _Icon=MessageBoxIcon.Error; //對話框顯示的圖標 public SqlBaseClass_DB()
{
//
// TODO: Add constructor logic here
//
_ConnStr= @"user id=sa;PWD=;data source=EH02;" +
"persist security info=False;" +
"initial catalog=FSYH";
_SqlConnection =new SqlConnection(_ConnStr); } public SqlBaseClass_DB(string ConnectionStr)
{
_SqlConnection =new SqlConnection(ConnectionStr);
} public bool Open() //開啟連接
{
try
{
if (_SqlConnection.State!=ConnectionState.Open)
{
_SqlConnection.Open();
}
return true;
}
catch(SqlException EX)
{
SqlExceptionShow(EX);
_SqlConnection.Close();
return false;
}
} public void Close() //關閉連接
{
if (_SqlConnection.State==ConnectionState.Open)
_SqlConnection.Close();
} public SqlConnection GetCon()
{
this.Open();
return _SqlConnection;
} public bool Exectute(string cmdtxt) //執行SQL 語句段
{
this.Open();
_SqlCommand=new SqlCommand(cmdtxt,this.GetCon());
try
{
_SqlCommand.ExecuteNonQuery();
return true;
}
catch(SqlException EX)
{
SqlExceptionShow(EX);
return false;
}
} public DataSet GetDataSet(string cmdtxt) //獲得數據集
{
try
{
_SqlDataAdapter= new SqlDataAdapter(cmdtxt,this.GetCon());
_DataSet=new DataSet();
_SqlDataAdapter.Fill(_DataSet);
return _DataSet;
}
catch(SqlException EX)
{
SqlExceptionShow(EX);
return null;
}
}
public DataSet GetDataSet(string cmdtxt,string TableName) //獲得數據集(可設定表名)
{
try
{
_SqlDataAdapter= new SqlDataAdapter(cmdtxt,this.GetCon());
_DataSet=new DataSet();
_SqlDataAdapter.Fill(_DataSet,TableName);
return _DataSet;
}
catch(SqlException EX)
{
SqlExceptionShow(EX);
return null;
}
} private void SqlExceptionShow(SqlException EX) //顯示異常
{
for (int i=0;i<EX.Errors.Count;i++)
{
_ErrInfo += "錯誤序號 :" + i + "\n" +
"出錯信息 :" + EX.Errors[i].Message + "\n" +
"出錯來源 :" + EX.Errors[i].Source + "\n" +
"程 序 :" + EX.Errors[i].Procedure;
}
MessageBox.Show(_ErrInfo,_Caption,_Buttons,_Icon);
} public SqlDataReader GetReader(string cmdtxt)
{
_SqlCommand=new SqlCommand(cmdtxt,this.GetCon());
_SqlDataReader = _SqlCommand.ExecuteReader();
try
{
return _SqlDataReader;
}
catch(SqlException EX)
{
SqlExceptionShow(EX);
return null;
} } public DataView GetDataView(string cmdtxt)
{
try
{
_SqlDataAdapter=new SqlDataAdapter(cmdtxt,this.GetCon());
_SqlDataAdapter.Fill(_DataSet);
_DataView=new DataView(_DataSet.Tables[0]);
return _DataView;
}
catch(SqlException EX)
{
SqlExceptionShow(EX);
return null;
} } public DataTable GetTable(string cmdtxt,string tablename)
{
try
{
_SqlDataAdapter = new SqlDataAdapter(cmdtxt, this.GetCon());
_DataTable=new DataTable(tablename);
_SqlDataAdapter.Fill(_DataTable);
return _DataTable;
}
catch(SqlException EX)
{
SqlExceptionShow(EX);
return null;
}
} #region 屬性 public string SqlText
{
set
{
_SqlText = value;
}
get
{
return _SqlText;
}
} public string ErrInfo
{
set
{
_ErrInfo = value;
}
get
{
return _ErrInfo;
}
} public string ConnStr
{
set
{
_ConnStr = value;
}
get
{
return _ConnStr;
}
}
#endregion
1.每个和数据库有相关操作的类中构造你可以传一个connString进去;
2.以上那些和数据库有频繁操作的函数都定义为静态的。
SqlConnection.Close确实不是正真的关闭,是放入连接池,但是这个不影响开发效果。
还要楼主的代码太长,以后发来请排排版。o(∩_∩)o...哈哈