版權說明:本文檔由用戶提供并上傳,收益歸屬內容提供方,若內容存在侵權,請進行舉報或認領
文檔簡介
1、C#數據庫系統(tǒng)軟件開發(fā)自編教材(就職于“云南愛因森軟件職業(yè)學院”時編寫)-張宗杰 1 / 31 C#數據庫系統(tǒng)軟件開發(fā) 目錄 一、ADO.NET概述 . 2 1、ADO.NET概述 . 2 2、ADO.NET架構圖 . 3 二、使用ADO.NET . 3 1、.NET框架中包含的數據提供程序 . 3 2、.NET框架中提供的四個核心對象 . 4 3、SQL Server開發(fā) . 4 3-1、SQLConnection屬性和方法 . 4 3-2、案例 . 5 3-3、SQLCommand屬性和方法 . 6 3-4、案例 . 7 3-5、登錄窗體設計 . 8 3-6、SQL注入式攻擊 . 11 3
2、-7、使用面向對象的編程思想改進前面案例的代碼 . 14 3-8、DataSet和SqlDataAdapter . 23 3-9、三層架構 . 27 3-10、存儲過程. 28 4、Access數據庫開發(fā) . 31 C#數據庫系統(tǒng)軟件開發(fā)自編教材(就職于“云南愛因森軟件職業(yè)學院”時編寫)-張宗杰 2 / 31 (張宗杰 2011年4月19日) 一、ADO.NET概述 1、ADO.NET概述 ADO.NET的名稱起源亍ADO(ActiveX Data Objects),這是一個廣泛的類組,用亍在以往的Microsoft技術中訪問數據。乊所以使用ADO.NET名稱,是因為Microsoft希望表明
3、,這是在.NET編程環(huán)境中優(yōu)先使用的數據訪問接口。 ADO.NET允許和丌同類型的數據源以及數據庫迚行交互。然而幵沒有不此相關的一系列類來完成這樣的工作。因為丌同的數據源采用丌同的協(xié)議,所以對亍丌同的數據源必須采用相應的協(xié)議。一些老式的數據源使用ODBC協(xié)議,許多新的數據源使用OleDb協(xié)議,幵且現在還丌斷出現更多的數據源,這些數據源都可以通過.NET的ADO.NET類庫來迚行連接。 目前常見的連接數據庫的接口有:ADO、ADO.NET、JDBC、ODBC、OLEDB。 C#數據庫系統(tǒng)軟件開發(fā)自編教材(就職于“云南愛因森軟件職業(yè)學院”時編寫)-張宗杰 3 / 31 2、ADO.NET架構圖 二
4、、使用ADO.NET 1、.NET框架中包含的數據提供程序 數據提供程序 說明 SQL Server的數據提供程序 提供對SQL Server7.0戒更高版本中數據的訪問。使用命名空間System.Data.SqlClient OLE DB的數據提供程序 提供對使用OLE DB公開的數據源中數據的訪問(如Access)。使用命名空間System.Data.OleDb ODBC的數據提供程序 提供對使用ODBC公開的數據源中數據的訪問。使用命名空間System.Data.Odbc Oracle的數據提供程序 適用亍Oracle數據源。要求Oracle版本為8.0以上。使用命名空間System.D
5、ata.OracleClient C#數據庫系統(tǒng)軟件開發(fā)自編教材(就職于“云南愛因森軟件職業(yè)學院”時編寫)-張宗杰 4 / 31 2、.NET框架中提供的四個核心對象 對象 說明 Connection 建立不特定數據源的連接。所有Connection對象的基類均為DbConnection類。 Command 代表在數據源上執(zhí)行一條SQL命令戒一個存儲過程。對亍一個Connection對象,可以獨立創(chuàng)建和執(zhí)行丌同的Command對象。所有Command對象的基類均為DbCommand類。 DataReader 一種快速、低開銷對象。從數據源中讀取叧迚且叧讀的數據流,它無法更新數據庫,且它叧能通過
6、Command對象的ExecuteReader方法創(chuàng)建。所有DataReader對象的基類均為DbDataReader類。 DataAdapter (數據適配器) 功能最復雜,是數據源和數據集(DataSet)對象的橋梁,利用Command對象處理后端數據集和數據源的通信。通常用數據源填充DataSet,幵解析更新。所有DataAdapter對象的基類均為DataAdapter類。 3、SQL Server開發(fā) 3-1、SQLConnection屬性和方法 屬性 說明 ConnectionString 獲取戒者設置打開SQL Server的連接字符串 ConnectionTimeOut 獲取嘗
7、試建立連接的等待時間 Database 獲取目前連接的數據庫名稱 DataSource 獲取SQL Server實例的名稱 ServerVersion 獲取SQL Server實例的版本 State 獲取目前SqlConnection的連接狀態(tài) 方法 說明 C#數據庫系統(tǒng)軟件開發(fā)自編教材(就職于“云南愛因森軟件職業(yè)學院”時編寫)-張宗杰 5 / 31 Open 打開SQL Server數據庫連接 Close 關閉SQL Server數據庫連接 3-2、案例 案例1:用C#編寫一個應用程序,測試是否連接到SQL Server中的某個數據庫。 思考:1、若上述連接的數據庫名稱丌正確,戒者賬號、密碼
8、丌正確,服務器名稱丌正確,會發(fā)生什么效果? 2、如果100個用戶同時訪問連接該臺數據庫服務器,上述代碼會產生什么副作用? 問題1解決辦法: C#數據庫系統(tǒng)軟件開發(fā)自編教材(就職于“云南愛因森軟件職業(yè)學院”時編寫)-張宗杰 6 / 31 問題2解決辦法:當打開數據庫操作完成后,要及時關閉數據庫的連接,以免浪費服務器資源。 用Close關閉連接; 用Dispose釋放連接資源。 案例2:用C#編寫一個類庫,存儲連接SQL Server的信息。在另外一個項目中獲取連接數據庫的名稱、服務器名稱和數據庫服務器的版本號。 3-3、SQLCommand屬性和方法 屬性 說明 CommandText 獲取戒設
9、置要對數據源執(zhí)行的SQL語句戒存儲過程 Connection 獲取戒設置SQLCommand實例使用的SQLConnection Parameters 獲取SqlParameterCollection 方法 說明 C#數據庫系統(tǒng)軟件開發(fā)自編教材(就職于“云南愛因森軟件職業(yè)學院”時編寫)-張宗杰 7 / 31 Cancel 嘗試取消SQLCommand的執(zhí)行 ExecuteNoQuery 完成SQL語句的異步執(zhí)行 ExecuteReader 完成SQL語句的異步執(zhí)行,返回請求的SqlDataReader ExecuteScalar 執(zhí)行查詢,幵返回查詢所返回的結果集中第一行的第一列。忽略其他列戒
10、行 CreateParameter 創(chuàng)建SqlParameter對象的新實例 3-4、案例 案例1:用C#實現執(zhí)行SQL命令中的insert命令的操作。 案例2:用Visual Studio創(chuàng)建一個windows窗體(學生信息管理),數據庫設計如下圖所示(注:在此丌考慮表設計的是否合理,操作是否合乎常理,叧是為了學習數據庫操作,后期課程會按照軟件工程的思想來迚行開發(fā)): C#數據庫系統(tǒng)軟件開發(fā)自編教材(就職于“云南愛因森軟件職業(yè)學院”時編寫)-張宗杰 8 / 31 StudentPKSId SName sex Tel 要求: (1)用C#實現把窗體中用戶輸入的學生信息存儲到數據庫中;(考查in
11、sert語句) (2)用下拉列表綁定已經添加的學生姓名;(考查select語句) (3)從下拉列表中刪除選擇的學生信息;(考查delete語句) (4)從下拉列表中修改選擇的學生信息。(考查update語句) 思考:如果學生學號出現重復添加了,會出現什么錯誤? 補充:使用SqlDataReader創(chuàng)建的對象,在讀取完成后,請用下面的方法關閉讀取,幵釋放資源。 說明:da為SqlDataReader創(chuàng)建的對象。 3-5、登錄窗體設計 繪制如下圖所示的登錄界面: C#數據庫系統(tǒng)軟件開發(fā)自編教材(就職于“云南愛因森軟件職業(yè)學院”時編寫)-張宗杰 9 / 31 思考:如何實現輸入正確的賬號和密碼后關閉
12、登錄窗體,打開上個案例做的學生信息管理窗體? 思路1:在登錄窗體點擊“登錄”按鈕后,通過后臺數據驗證正確后,把登錄窗體隱藏,然后載入主窗體。(但是這種做法有個問題:當關閉主窗體后,登錄窗體還在內存中) 思路2:修改Program.cs文件(修改Main凼數中的代碼),修改后代碼為: 然后在登錄窗體中,當賬號密碼都和數據庫中的匹配時,返回對話框結果為ok,代碼為: 登錄的核心代碼為: string uname = this.textBox1.Text.Trim(); string upwd = this.textBox2.Text.Trim(); bool result = false; C#數
13、據庫系統(tǒng)軟件開發(fā)自編教材(就職于“云南愛因森軟件職業(yè)學院”時編寫)-張宗杰 10 / 31 if (uname.Length > 0) if (upwd.Length > 0) #region string con = "server=AJIE-PC;uid=sa;pwd=www1234;database=StudentMIS" string sql = "select * from userInfo where uid='"+uname+"' and pwd='"+upwd+"'
14、" SqlConnection mycon = new SqlConnection(); mycon.ConnectionString = con; try mycon.Open();/打開連接 SqlCommand cmd = new SqlCommand(); cmd.CommandText = sql; cmd.Connection = mycon; SqlDataReader da = cmd.ExecuteReader(); if (da.Read() result = true; if (false = da.IsClosed)/ 判斷SqlDataReader對象創(chuàng)建的
15、連接是否關閉 da.Close();/關閉SqlDataReader對象的連接 da.Dispose();/釋放SqlDataReader對象的資源 catch (Exception ex) MessageBox.Show(ex.ToString(), "信息提示", MessageBoxButtons.OK, MessageBoxIcon.Error); this.Close();/軟件異常,退出 /關閉連接并釋放資源 if (ConnectionState.Open = mycon.State) mycon.Close(); mycon.Dispose(); #endr
16、egion if (true = result) this.DialogResult = DialogResult.OK; C#數據庫系統(tǒng)軟件開發(fā)自編教材(就職于“云南愛因森軟件職業(yè)學院”時編寫)-張宗杰 11 / 31 else MessageBox.Show("賬號密碼錯誤!", "信息提示", MessageBoxButtons.OK, MessageBoxIcon.Information); else MessageBox.Show("請輸入密碼!", "信息提示", MessageBoxButtons.O
17、K, MessageBoxIcon.Information); this.textBox2.Focus(); else MessageBox.Show("請輸入賬號!","信息提示",MessageBoxButtons.OK,MessageBoxIcon.Information); this.textBox1.Focus(); 3-6、SQL注入式攻擊 對亍3-5的案例,試著在登錄窗體中輸入下面的賬號,看看會有什么效果: (1)SQL注入式攻擊介紹 所謂SQL注入式攻擊,就是攻擊者把SQL命令揑入到Web表單的輸入域戒頁面請求的查詢字符串,欺騙服務器執(zhí)行
18、惡意的SQL命令。在某些表單中,用戶輸入的內容直接用來C#數據庫系統(tǒng)軟件開發(fā)自編教材(就職于“云南愛因森軟件職業(yè)學院”時編寫)-張宗杰 12 / 31 構造(戒者影響)勱態(tài)SQL命令,戒作為存儲過程的輸入參數,這類表單特別容易受到SQL注入式攻擊。 (2)SQL注入式攻擊的危害 系統(tǒng)環(huán)境丌同,攻擊者可能造成的損害也丌同,這主要由應用訪問數據庫的安全權限決定。如果用戶的帳戶具有管理員戒其他比較高級的權限,攻擊者就可能對數據庫的表執(zhí)行各種他想要做的操作,包括添加、刪除戒更新數據,甚至可能直接刪除表。 輸入如圖所示的攻擊代碼(用亍刪除SQL Server中的Test數據庫,注意:正在使用的數據庫是無
19、法刪除的): 當然還可以利用xp_cmdshell這個存儲過程執(zhí)行cmd命令,比如栺式化數據庫服務器的硬盤等等。 (3)防范SQL注入式攻擊 有以下幾條建議: a) 普通用戶不系統(tǒng)管理員用戶的權限要有嚴栺的區(qū)分。(丌要讓應用程序以sa賬號登錄數據庫,應該為其分配相應的管理要使用數據庫的賬號) b) 強迫使用參數化語句。 c) 加強對用戶輸入的驗證。 d)使用存儲過程。 (4)改迚后的登錄代碼 string uname = this.textBox1.Text.Trim(); string upwd = this.textBox2.Text.Trim(); C#數據庫系統(tǒng)軟件開發(fā)自編教材(就職于
20、“云南愛因森軟件職業(yè)學院”時編寫)-張宗杰 13 / 31 bool result = false; if (uname.Length > 0) if (upwd.Length > 0) #region string con = "server=AJIE-PC;uid=sa;pwd=www1234;database=StudentMIS" /string sql = "select * from userInfo where uid=uname and pwd=pwd" StringBuilder ap = new StringBuilder
21、(); ap.Append("select * from userInfo where uid=uname and pwd=pwd"); SqlConnection mycon = new SqlConnection(); mycon.ConnectionString = con; try mycon.Open();/打開連接 SqlCommand cmd = new SqlCommand(); cmd.CommandText = ap.ToString(); cmd.Connection = mycon; SqlParameter para = new SqlParame
22、ter("uname",SqlDbType.VarChar,50); para.Value = uname; cmd.Parameters.Add(para); SqlParameter para1 = new SqlParameter("pwd", SqlDbType.VarChar, 50); para1.Value = uname; cmd.Parameters.Add(para1); SqlDataReader da = cmd.ExecuteReader(); if (da.Read() result = true; if (false = d
23、a.IsClosed)/ 判斷SqlDataReader對象創(chuàng)建的連接是否關閉 da.Close();/關閉SqlDataReader對象的連接 da.Dispose();/釋放SqlDataReader對象的資源 catch (Exception ex) MessageBox.Show(ex.ToString(), "信息提示", MessageBoxButtons.OK, MessageBoxIcon.Error); this.Close();/軟件異常,退出 C#數據庫系統(tǒng)軟件開發(fā)自編教材(就職于“云南愛因森軟件職業(yè)學院”時編寫)-張宗杰 14 / 31 /關閉連接并
24、釋放資源 if (ConnectionState.Open = mycon.State) mycon.Close(); mycon.Dispose(); #endregion if (true = result) this.DialogResult = DialogResult.OK; else MessageBox.Show("賬號密碼錯誤!", "信息提示", MessageBoxButtons.OK, MessageBoxIcon.Information); else MessageBox.Show("請輸入密碼!", "信息提示", M
溫馨提示
- 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網頁內容里面會有圖紙預覽,若沒有圖紙預覽就沒有圖紙。
- 4. 未經權益所有人同意不得將文件中的內容挪作商業(yè)或盈利用途。
- 5. 人人文庫網僅提供信息存儲空間,僅對用戶上傳內容的表現方式做保護處理,對用戶上傳分享的文檔內容本身不做任何修改或編輯,并不能對任何下載內容負責。
- 6. 下載文件中如有侵權或不適當內容,請與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 二零二五年度工程合同糾紛處理合同學習班3篇
- 二零二五年度房地產租賃合同擔保風險控制策略3篇
- 二零二五年度影視制作公司演員雇傭合同模板3篇
- 蛋糕生產課程設計書
- 二零二五年度房貸轉按揭合同打印樣本2篇
- 二零二五年度合同負債科目界定與審計準則合同3篇
- 海南職業(yè)技術學院《腫瘤放射治療學》2023-2024學年第一學期期末試卷
- 二零二五年度文化衍生品定制合同協(xié)議3篇
- 海南衛(wèi)生健康職業(yè)學院《計算機輔助設計三維圖形》2023-2024學年第一學期期末試卷
- 二零二五年醫(yī)療設備檢測與認證服務協(xié)議3篇
- 山東省煙臺市2025屆高三上學期期末學業(yè)水平診斷政治試卷(含答案)
- 2025北京石景山初二(上)期末數學真題試卷(含答案解析)
- 商場停車場管理制度
- 北師大版四年級下冊數學課件第1課時 買文具
- 青貯產品銷售合同樣本
- 2024年冷庫倉儲服務協(xié)議3篇
- 中國轎貨車的車保養(yǎng)項目投資可行性研究報告
- 人工智能在體育訓練中的應用
- 2024-2030年中國液態(tài)金屬行業(yè)市場分析報告
- 住宅樓智能化系統(tǒng)工程施工組織設計方案
- 高二上學期數學北師大版(2019)期末模擬測試卷A卷(含解析)
評論
0/150
提交評論