艾伟:基于.NET平台的Windows编程实战(四)—— 数据库操作类的编写
本系列文章導航
基于.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!到此,整個類算是完工了,雖然不好[沒進行性能方面的優化,也沒引入存儲過程的操作等等],但對于基本的操作已經夠用的了,故在此不作這方面的討論;
??? 在后期的其它系列課程中,我打算專門寫一系列針對數據庫操作優化類的課程,到那時我們再拿出來一起討論^_^
本課就先到此吧,謝謝……
附,本課程源碼下載
總結
以上是生活随笔為你收集整理的艾伟:基于.NET平台的Windows编程实战(四)—— 数据库操作类的编写的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 【JOURNAL】康生篆书联
- 下一篇: 最新CSS Hack汇总快查