系列文章導航:
基于.NET平臺的Windows編程實戰(一)——前言
基于.NET平臺的Windows編程實戰(二)—— 需求分析與數據庫設計
基于.NET平臺的Windows編程實戰(四)—— 數據庫操作類的編寫
基于.NET平臺的Windows編程實戰(五)—— 問卷管理功能的實現
基于.NET平臺的Windows編程實戰(六)—— 題目管理功能的實現
大家都知道本系統的正常運行少不了數據庫操作這一塊,且其在本系統中具有決定性作用,可以說沒有它的操作系統將無法運行,故在本節課程中,專門把針對數據庫的操作類拿出來講講,以便大家更加容易理解后面的課程。
好,進入正題……
首先,我們來新建一個類,方法如下:
打開上一節課我們新建的QuestionnaireSystem項目,右擊項目名,在出現的對話框中選擇“添加”à“類”,在彈出的“添加新項”中選擇“類”,并在下面的“名稱”中輸入“DbOperate”,點“添加”,如下圖4-1所示:

OK,這樣我們的DbOperate類文件就創建好了,但里面還是空白的,所以我們下面就一起來編寫相應的方法吧。
既然要對數據庫進行操作,我們先要做的第一件事當然是要寫個方法來打開數據庫了。因為我們用的是Access2003數據庫,所以我們得首先要using 進一個System.Data.OleDb 類庫及一個System.Data 類庫,方法:在新建的DbOperate文件的最上面,也就是寫有幾個using …… 地方,寫入如下內容:
using System.Data;
using System.Data.OleDb;
其次,我們需要定義如下二個數據庫操作對象:
protected OleDbConnection dbconn;//定義數據庫連接對象
protected OleDbCommand dbcomm = new OleDbCommand();//定義數據庫操作對象
接下來,我們再寫一個打開數據庫連接的方法:
/// <summary>
/// 打開數據庫
/// </summary>
/// <returns></returns>
protected void CreateDbConn()
{
try
{//捕獲連接異常
string dbpath = @"DataBase\Lj_QuestionnaireSys.mdb";//設置數據庫路徑,如連接有問
題請在前面加上"..\..\",但在發布時要去掉前面的"..\..\"
dbconn = new OleDbConnection("Provider=Microsoft.Jet.OLEDB.4.0;Data Source=
" + dbpath);//初始化數據庫連接對象
dbcomm.Connection = dbconn;//設置數據庫操作對象使用此dbconn對象
dbconn.Open();//打開數據庫連接
}
catch (OleDbException) //如果出現數據庫連接異常,則關閉數據庫連接并彈出提示框
{
this.CloseDbConn();//關閉數據庫連接
MessageBox.Show("數據連接錯誤!可能是數據庫被刪除了11,請聯系相關技術人員!", "操作提示",
MessageBoxButtons.OK, MessageBoxIcon.Information);
// Console.Write(dbex.Message);
}
catch (Exception) //如果出現其他異常,則關閉數據庫連接并彈出提示框
{
this.CloseDbConn(); //關閉數據庫連接
MessageBox.Show("數據連接錯誤!可能是數據庫被刪除了,請聯系相關技術人員!", "操作提示",
MessageBoxButtons.OK, MessageBoxIcon.Information);
}
}
數據庫打開了,總不能讓其長期開著吧!故我們還得寫一關閉的方法:
/// 關閉數據庫
///
protected void CloseDbConn()
{
if (dbconn.State == ConnectionState.Open) //如果數據庫為打開狀態,則關閉
{
dbconn.Close();//關閉數據庫連接
}
dbconn.Dispose();//釋放連接資源
dbcomm.Dispose();//釋放操作資源
}
好,至此,“開門”[打開數據庫]與“關門”[關閉數據庫]的方法都搞定了,下面就讓我們設法在“開門”后“關門”前偷偷的躲進去做點實事吧,即寫一些方法來讀取或更新數據:

Code

/**////
/// 執行SQL語句
///
/// 傳入的SQL語句
public void ExcuteSql(string sqlText)

{
try

{//捕獲異常
CreateDbConn();//建立連接
dbcomm.CommandType = CommandType.Text;//設置操作類型為文本類型
dbcomm.CommandText = sqlText;//設置操作的SQL語句
dbcomm.ExecuteNonQuery();//執行操作
}
catch (Exception) //如果出現異常,則提示錯誤

{
MessageBox.Show("數據庫操作錯誤!", "操作提示", MessageBoxButtons.OK, MessageBoxIcon.Information);
}
finally

{
CloseDbConn();//關閉連接
}
}

/**////
/// 判斷是否執行成功,返回所影響的行數
///
/// 傳入的SQL語句
/// 影響的行數
public int ExcuteIntSql(string sqlText)

{
try

{//捕獲異常
CreateDbConn();//建立連接
dbcomm.CommandType = CommandType.Text;//設置操作類型
dbcomm.CommandText = sqlText;//設置操作的SQL語句
return dbcomm.ExecuteNonQuery();//執行操作,并返回影響的行數
}
catch (Exception)

{
//MessageBox.Show("數據庫操作錯誤!", "操作提示", MessageBoxButtons.OK, MessageBoxIcon.Information);
return 0;//如果出現異常,則返回0
}
finally

{
CloseDbConn();//關閉連接
}
}

/**////
/// 返回查詢出的單條數字記錄結果
///
/// 傳入的SQL語句
/// 查詢出的數字結果
public int ExcuteScrSql(string sqlText)

{
try

{//捕獲異常
CreateDbConn();//建立連接
dbcomm.CommandType = CommandType.Text;//設置操作類型
dbcomm.CommandText = sqlText;//設置操作的SQL語句
return Convert.ToInt32(dbcomm.ExecuteScalar());//執行操作,并返回查詢出的結果
}
catch (Exception)

{
return 0;//如果出現異常,則返回0
}
finally

{
CloseDbConn();//關閉連接
}
}

/**////
/// 返回查詢出的單條文字記錄結果
///
/// 傳入的SQL語句
/// 查詢出的文字結果
public string ExcuteStrScrSql(string sqlText)

{
try

{//捕獲異常
CreateDbConn();//建立連接
dbcomm.CommandType = CommandType.Text;//設置操作類型
dbcomm.CommandText = sqlText;//設置操作的SQL語句
return dbcomm.ExecuteScalar().ToString();//執行操作,并返回查詢出的結果
}
catch (Exception)

{
return "";//如果出現異常,則返回空字符串
}
finally

{
CloseDbConn();//關閉連接
}
}

/**////
/// 返回查詢出的數據表
///
/// 傳入的SQL語句
/// 查詢出的數據表
public DataTable GetDataTable(string sqlText)

{
OleDbDataAdapter dbdapt = new OleDbDataAdapter();//實例化一個數據緩存適配器
DataTable dt = new DataTable();//實例化一個數據表

try

{//捕獲異常
CreateDbConn();//建立連接
dbcomm.CommandType = CommandType.Text;//設置操作類型
dbcomm.CommandText = sqlText;//設置操作的SQL語句
dbdapt.SelectCommand = dbcomm;//執行SQL語句,選擇出數據
dbdapt.Fill(dt);//填充數據表
}
catch (Exception)

{

}
finally

{
CloseDbConn();//關閉連接
}
return dt;//返回查詢出的數據表
}

/**////
/// 按指定條數讀出的Table數據表
///
/// 傳入的SQL
/// 開始讀數據的記錄號
/// 所要讀出的最大條數
/// 返回一數據表
public DataTable GetPageDataTable(string sqlText,int pre,int maxcunt)

{
OleDbDataAdapter dbdapt = new OleDbDataAdapter();//實例化一個數據緩存適配器
DataSet ds = new DataSet();//實例化一個數據緩存器

try

{//捕獲異常
CreateDbConn();//建立連接
dbcomm.CommandType = CommandType.Text;//設置操作類型
dbcomm.CommandText = sqlText;//設置操作的SQL語句
dbdapt.SelectCommand = dbcomm;//執行操作,選擇出數據
dbdapt.Fill(ds,pre,maxcunt,"db_Table");//按指定的條數填充數據表
}
catch (Exception)

{

}
finally

{
CloseDbConn();//關閉連接
}
return ds.Tables["db_Table"];//返回數據表
}
//以下為合并統計的數據庫操作 以下注釋同上面的差不多,就不再寫了
OleDbConnection conn;
OleDbCommand comm = new OleDbCommand();

/**////
/// 連接數據庫--合并統計用
///
public void DbConn()

{
try

{
string _dbpath = @"DataBase\1.mdb";
conn = new OleDbConnection("Provider=Microsoft.Jet.OLEDB.4.0;Data Source=" + _dbpath);
comm.Connection = conn;
conn.Open();
//MessageBox.Show(_dbpath);
}
catch (OleDbException)

{
CloseConn();
MessageBox.Show("數據庫連接錯誤!請檢查數據庫!", "操作提示", MessageBoxButtons.OK, MessageBoxIcon.Information);
}
catch (Exception)

{
CloseConn();
MessageBox.Show("數據庫連接錯誤!請檢查數據庫!", "操作提示", MessageBoxButtons.OK, MessageBoxIcon.Information);
}

}

/**////
/// 關閉數據庫--合并統計用
///
public void CloseConn()

{
if (conn.State == ConnectionState.Open)

{
conn.Close();
}
conn.Dispose();

comm.Dispose();
}

/**////
/// 返回數據表--合并統計用
///
///
///
public DataTable GetTable(string sqlText)

{
OleDbDataAdapter odbad = new OleDbDataAdapter();
DataTable dt = new DataTable();
try

{
DbConn();
comm.CommandType = CommandType.Text;
comm.CommandText = sqlText;
odbad.SelectCommand = comm;
odbad.Fill(dt);
}
catch (OleDbException)

{
MessageBox.Show("數據庫連接錯誤!請選擇正確的數據庫!", "操作提示", MessageBoxButtons.OK, MessageBoxIcon.Information);
}
catch (Exception)

{
MessageBox.Show("數據庫連接錯誤!請選擇正確的數據庫!", "操作提示", MessageBoxButtons.OK, MessageBoxIcon.Information);
}
finally

{
CloseConn();
}
return dt;
}

/**////
/// 返回查詢的結果(Int)--合并統計用
///
/// 傳入的SQL
/// Int
public int ExcueteIntSql(string sqlText)

{
try

{
DbConn();
comm.CommandText = sqlText;
return Convert.ToInt32(comm.ExecuteScalar());
}
catch (Exception)

{
return 0;
}
finally

{
CloseConn();
}

}

OK!到此,整個類算是完工了,雖然不好[沒進行性能方面的優化,也沒引入存儲過程的操作等等],但對于基本的操作已經夠用的了,故在此不作這方面的討論;
在后期的其它系列課程中,我打算專門寫一系列針對數據庫操作優化類的課程,到那時我們再拿出來一起討論^_^
本課就先到此吧,謝謝……
附,本課程源碼下載