由于SqlDataReader需要一個長效連接配接的原因,把它從CMySqlConnection中獨立了出來,感覺有些松散,另外也有點重複封裝的味道,不過實際使用中友善了許多,不用經常打開關閉資料庫,省了不少。
class CMySqlConnection //SqlConnection封裝類
{
private SqlConnection m_objConn;
//基于連接配接字元串建構對象
public CMySqlConnection(string strConnString)
{
m_objConn = new SqlConnection(strConnString);
}
//打開資料庫連接配接
private void Open()
{
Close();
m_objConn.Open();
}
//關閉資料庫連接配接
private void Close()
{
if(m_objConn.State == ConnectionState.Open)
m_objConn.Close();
}
//執行Sql語句(不傳回記錄集的)
private int ExecSql(string strSql)
{
int nRet = 0;
try
{
this.Open();
SqlCommand objSqlCommand = new SqlCommand(strSql, m_objConn);
nRet = objSqlCommand.ExecuteNonQuery();
this.Close();
}
catch (Exception objException)
{
MessageBox.Show("執行SQL語句時出錯,出錯資訊為:" + objException.ToString(), "錯誤");
}
return nRet; //傳回SQL語句執行後所影響的行數
}
//執行一個查詢操作
public DataSet doSelect(string strSql,string strTableName)
{
DataSet objDataSet = null;
SqlDataAdapter objDataAdapter = null;
try
{
this.Open();
objDataSet = new DataSet();
objDataAdapter = new SqlDataAdapter(strSql, m_objConn);
objDataAdapter.Fill(objDataSet, strTableName);
this.Close();
}
catch (Exception objException)
{
MessageBox.Show("執行SQL語句時出錯,出錯資訊為:" + objException.ToString(), "錯誤");
}
return objDataSet;
}
//執行一個插入操作
public int doInsert(string strSql)
{
return ExecSql(strSql);
}
//執行一個更新操作
public int doUpdate(string strSql)
{
return ExecSql(strSql);
}
//執行一個删除操作
public int doDelete(string strSql)
{
return ExecSql(strSql);
}
}
class CMySqlDataReader //SqlDataReader封裝類
{
private bool m_bIsSelfConn; //是否建立資料庫連接配接标志
private SqlConnection m_objConn; //資料庫連接配接對象
private SqlDataReader m_objSqlDataReader; //閱讀器對象
//建立一個資料庫連接配接建構對象
public CMySqlDataReader(string strConnString)
{
m_objConn = new SqlConnection(strConnString);
try
{
m_objConn.Open();
m_bIsSelfConn = true;
}
catch (Exception objException)
{
MessageBox.Show("打開資料庫連接配接時出錯,出錯資訊為:" + objException.ToString(), "錯誤");
}
}
//基于一個現存的資料庫連接配接對象(必須已打開)建構對象
public CMySqlDataReader(SqlConnection objConn)
{
if (objConn.State == ConnectionState.Open)
{
m_objConn = objConn;
m_bIsSelfConn = false;
}
else
{
throw new Exception("資料庫連接配接未打開!"); //如果連接配接未打開則抛出異常
}
}
//打開并獲得一個閱讀器
public SqlDataReader Open(string strSql)
{
SqlCommand objSqlCommand = null;
m_objSqlDataReader = null;
try
{
objSqlCommand = new SqlCommand(strSql, m_objConn);
m_objSqlDataReader = objSqlCommand.ExecuteReader();
}
catch (Exception objException)
{
MessageBox.Show("建立一個SqlDataReader時出錯,出錯資訊為:" + objException.ToString(), "錯誤");
}
return m_objSqlDataReader;
}
//關閉一個閱讀器
public void Close()
{
m_objSqlDataReader.Close();
if (m_bIsSelfConn) //如果資料庫連接配接為建立的,則關閉它
{
if (m_objConn.State == ConnectionState.Open)
m_objConn.Close();
}
}
}