版權(quán)說(shuō)明:本文檔由用戶(hù)提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)
文檔簡(jiǎn)介
1、第7章 實(shí)現(xiàn)系統(tǒng)登錄,任務(wù)7.1建立登錄窗口,系統(tǒng)登錄功能通過(guò)一個(gè)獨(dú)立的窗口來(lái)實(shí)現(xiàn) 向宿舍管理項(xiàng)目中添加新Windows窗體,名稱(chēng)為L(zhǎng)ogin.cs 通過(guò)工具箱,在新添加的窗體中繪制相應(yīng)的Label控件、TextBox控件、Button控件,調(diào)整窗體布局,如圖所示。,任務(wù)7.2 啟動(dòng)登錄窗口,登錄窗體建好后,運(yùn)行程序,會(huì)看到主窗體被啟動(dòng),而登錄窗體是看不到的,系統(tǒng)實(shí)際的要求是先登錄窗體啟動(dòng),用戶(hù)輸入正確的用戶(hù)名和密碼,就可以打開(kāi)主窗體,并關(guān)閉登錄窗體。 實(shí)現(xiàn)這種效果一般有兩種方式:一種是先啟動(dòng)登錄窗體,然后在登錄窗體中調(diào)用主窗體,最后關(guān)閉登錄窗體。 主要代碼如下: Main main=new
2、Main(); Main.Show(); This.Close(); 實(shí)際應(yīng)用中,這種方法并不可行,由于登錄窗體是啟動(dòng)窗體,當(dāng)它被關(guān)閉后,整個(gè)應(yīng)用程序也隨之結(jié)束了,所以上面的代碼執(zhí)行的結(jié)果是登錄窗體被關(guān)閉,程序結(jié)束,主窗體也會(huì)隨之關(guān)閉。,任務(wù)7.2 啟動(dòng)登錄窗口,另一種方式是修改Program.cs文件,在啟動(dòng)主窗體前先用模態(tài)對(duì)話(huà)框的形式顯示登錄窗體,然后根據(jù)登錄對(duì)話(huà)框的操作結(jié)果決定是否啟動(dòng)窗體,這種方法很靈活。 一、修改Program.cs文件 實(shí)例化登錄窗口 顯示登錄窗口,判斷登錄窗口的返回值是否為“確定”,然后顯示主窗體。 static class Program / / 應(yīng)用程序的主入
3、口點(diǎn)。 / STAThread static void Main() Application.EnableVisualStyles(); Application.SetCompatibleTextRenderingDefault(false); Application.Run(new Main(); 在紅色代碼前加入以模態(tài)對(duì)話(huà)框形式啟動(dòng)登錄窗體的代碼,再判斷對(duì)話(huà)框的返回值,以決定是否啟動(dòng)主窗體。 If(登錄窗體返回OK) Application.Run(new Main(); ,二、以模態(tài)對(duì)話(huà)框的形式打開(kāi)登錄窗體,非模態(tài)窗體:Show()方法打開(kāi);這種窗體被顯示時(shí),允許訪問(wèn)其他的窗體,窗體關(guān)閉
4、時(shí)沒(méi)有返回值; 模態(tài)窗體:ShowDialog()方法打開(kāi);這種窗體被顯示時(shí),禁止訪問(wèn)其他窗體,并且窗體關(guān)閉時(shí)可以設(shè)置返回值。 代碼實(shí)現(xiàn):(在主代碼第二行之后) Login frmLogin=new Login(); If (frmLogin.ShowDialog()=DialogResult.OK) Application.Run(new Main(); ,任務(wù)7.2 啟動(dòng)登錄窗口,三.設(shè)置登錄窗體的返回值 窗體對(duì)象提供DialogResult屬性,將該屬性設(shè)置為枚舉成員之一就可以表示窗體的返回值。 設(shè)置DialogResult屬性還起到關(guān)閉窗體的作用,這樣就不需要使用this.Close(
5、)來(lái)關(guān)閉窗體了。,相關(guān)代碼,登錄窗體的“確定”按鈕的Click事件代碼 private void btnOK_Click(object sender, EventArgs e) string userName = txtUserName.Text; /用戶(hù)名 string password = txtPassword.Text; /密碼 /連接Dormitory數(shù)據(jù)庫(kù), /從UserInfo表中 /驗(yàn)證用戶(hù)名和密碼信息是否正確 SqlConnection cn = new SqlConnection(); /建立連接對(duì)象 cn.ConnectionString = Data Source=XI
6、ISQLExpress; + User ID=sa;Password=sa; + Initial Catalog=Dormitory; /連接字符串 cn.Open(); /打開(kāi)連接 ,Data Source=PC-20110905WZNW; + / User ID=Administrator;Password=; + Initial Catalog=Dormitory; + Integrated Security = True;,SqlCommand cmd = new SqlCommand(); /命令對(duì)象 cmd.CommandText = string.Format( SELECT C
7、OUNT(*) FROM UserInfo + WHERE UserName=0 AND Password=1, userName, password); cmd.Connection = cn; int count = (int)cmd.ExecuteScalar(); /執(zhí)行SQL語(yǔ)句 cn.Close(); /關(guān)閉連接 /判斷 if (count = 1) /如果結(jié)果=1,則認(rèn)為用戶(hù)名和密碼正確 this.DialogResult = DialogResult.OK; else /登錄錯(cuò)誤 MessageBox.Show(用戶(hù)名或密碼輸入錯(cuò)誤!); ,登錄窗體“取消”按鈕的Click事件
8、代碼,This.DialogResult=DialogResult.Cancel;,補(bǔ)充常用SQL語(yǔ)句的使用,Sql語(yǔ)句使用實(shí)例,任務(wù)7.3 連接數(shù)據(jù)庫(kù),驗(yàn)證登錄信息,ADO.NET名稱(chēng)起源于ADO(ActiveX Data Objects),這是一個(gè)廣泛的類(lèi)組,用于在以往的Microsoft技術(shù)中訪問(wèn)數(shù)據(jù),之所以使用ADO.NET名稱(chēng),是因?yàn)镸icrosoft希望表明,這是在.NET編程環(huán)境中優(yōu)先使用的數(shù)據(jù)訪問(wèn)接口。 通常情況下,數(shù)據(jù)源是數(shù)據(jù)庫(kù),但它同樣也能夠是文本文件、Excel表格或者XML文件。 ADO.NET允許和不同類(lèi)型的數(shù)據(jù)源以及數(shù)據(jù)庫(kù)進(jìn)行交互。然而并沒(méi)有與此相關(guān)的一系列類(lèi)來(lái)完成
9、這樣的工作。因?yàn)椴煌臄?shù)據(jù)源采用不同的協(xié)議,所以對(duì)于不同的數(shù)據(jù)源必須采用相應(yīng)的協(xié)議。一些老式的數(shù)據(jù)源使用ODBC協(xié)議,許多新的數(shù)據(jù)源使用OLE DB協(xié)議,并且現(xiàn)在還不斷出現(xiàn)更多的數(shù)據(jù)源,這些數(shù)據(jù)源都可以通過(guò).NET的ADO.NET類(lèi)庫(kù)來(lái)進(jìn)行連接。 是數(shù)據(jù)庫(kù)訪問(wèn)的方法和技術(shù),是一組類(lèi),通過(guò)這些類(lèi),應(yīng)用程序可以訪問(wèn)數(shù)據(jù)庫(kù)。 功能強(qiáng)大,提供了對(duì)關(guān)系數(shù)據(jù)庫(kù)、XML及其他數(shù)據(jù)庫(kù)存儲(chǔ)的訪問(wèn),應(yīng)用程序可以通過(guò)它連接到這些數(shù)據(jù)源,對(duì)數(shù)據(jù)進(jìn)行增、刪、改、查操作。 ADO.NET支持面向連接和斷開(kāi)連接的數(shù)據(jù)訪問(wèn)技術(shù)。所謂面向連接,就是在獲取數(shù)據(jù)時(shí)應(yīng)用程序和數(shù)據(jù)源要一直保持連接;而斷開(kāi)連接是指應(yīng)用程序和數(shù)據(jù)源斷開(kāi)連
10、接時(shí)也可以使用數(shù)據(jù)。,任務(wù)7.3 連接數(shù)據(jù)庫(kù),驗(yàn)證登錄信息,二. ADO.NET的主要組件 .NET數(shù)據(jù)提供程序:一組程序,可以連接到數(shù)據(jù)庫(kù)、執(zhí)行命令和查詢(xún)數(shù)據(jù),可以直接對(duì)數(shù)據(jù)庫(kù)進(jìn)行操作。 目前.NET Framwork提供了4種類(lèi)型的數(shù)據(jù)提供程序。 SQL Server .NET數(shù)據(jù)提供程序 OLE DB.NET數(shù)據(jù)提供程序 ODBC.NET數(shù)據(jù)提供程序 Oracle.NET數(shù)據(jù)提供程序 數(shù)據(jù)集(DataSet):是一個(gè)存儲(chǔ)數(shù)據(jù)的倉(cāng)庫(kù),而數(shù)據(jù)可以來(lái)自任何數(shù)據(jù)源。通過(guò)使用它,不必直接與數(shù)據(jù)庫(kù)打交道。,任務(wù)7.3 連接數(shù)據(jù)庫(kù),驗(yàn)證登錄信息,名字空間:在使用不同的組件時(shí),應(yīng)在程序前引入相應(yīng)的名字空
11、間。,任務(wù)7.3 連接數(shù)據(jù)庫(kù),驗(yàn)證登錄信息,ADO.NET對(duì)象模型: Connection對(duì)象(連接對(duì)象):用于與特定的數(shù)據(jù)源建立連接; Command對(duì)象(命令對(duì)象):可以描述對(duì)數(shù)據(jù)源要執(zhí)行的命令,并且可以對(duì)數(shù)據(jù)源執(zhí)行命令; DataReder對(duì)象(數(shù)據(jù)讀取器對(duì)象):可以從數(shù)據(jù)源中獲取一個(gè)只讀的、向前的數(shù)據(jù)流,在讀取數(shù)據(jù)時(shí),DataReader要求必須與數(shù)據(jù)源連接,它是一個(gè)面向連接的數(shù)據(jù)讀取器。使用它從數(shù)據(jù)源中讀取數(shù)據(jù)時(shí)效率是最高的。 DataAdapter對(duì)象(數(shù)據(jù)適配器對(duì)象):用于將數(shù)據(jù)源中的數(shù)據(jù)填充到DataSet對(duì)象,或?qū)ataSet對(duì)象中的數(shù)據(jù)更新到數(shù)據(jù)源;,任務(wù)7.3 連接數(shù)據(jù)
12、庫(kù),驗(yàn)證登錄信息,任務(wù)7.3 連接數(shù)據(jù)庫(kù),驗(yàn)證登錄信息,三. 使用Connection對(duì)象 Connection對(duì)象可以找到并連接數(shù)據(jù)庫(kù)。在連接數(shù)據(jù)庫(kù)前,要根據(jù)數(shù)據(jù)庫(kù)的類(lèi)型確定使用哪種數(shù)據(jù)提供程序。本書(shū)都是針對(duì)SQL Server2005進(jìn)行的,所以使用SQL Server.NET數(shù)據(jù)提供程序。 ConnectionString屬性:用于描述連接數(shù)據(jù)庫(kù)的連接字符串。 Open()方法:打開(kāi)與數(shù)據(jù)庫(kù)的連接 Close()方法:關(guān)閉與數(shù)據(jù)庫(kù)的連接,任務(wù)7.3 連接數(shù)據(jù)庫(kù),驗(yàn)證登錄信息,三. 使用Connection對(duì)象 創(chuàng)建Connection對(duì)象 SqlConnection 對(duì)象名=new Sq
13、lConnection(); 設(shè)置連接字符串:Connection對(duì)象的ConnectionString屬性表示連接字符串。連接字符串一般由4部分組成,各部分之間用“;”間隔。 DataSource:表示數(shù)據(jù)庫(kù)服務(wù)器的名稱(chēng)或IP地址 UserID:訪問(wèn)數(shù)據(jù)庫(kù)的用戶(hù)名 Password:訪問(wèn)數(shù)據(jù)庫(kù)的密碼 Initial Catalog:數(shù)據(jù)庫(kù)的名稱(chēng),任務(wù)7.3 連接數(shù)據(jù)庫(kù),驗(yàn)證登錄信息,三. 使用Connection對(duì)象 3. 打開(kāi)連接 Open()方法打開(kāi)數(shù)據(jù)庫(kù)連接 如果不再需要連接數(shù)據(jù)庫(kù),可以使用Close()方法關(guān)閉連接 注意:使用這些方法前,要在代碼開(kāi)始部分導(dǎo)入命名空間System.Da
14、ta.SqlClient,連接Access2010數(shù)據(jù)庫(kù)文件的代碼,OleDbConnection cn = new OleDbConnection(); cn.ConnectionString = Provider=Microsoft.Ace.OleDb.12.0;Data Source=D:Dormitory.accdb; cn.Open(); OleDbCommand cmd = new OleDbCommand(); string sql = SELECT COUNT(*) FROM UserInfo; cmd.CommandText = sql; cmd.Connection = c
15、n; int result = (int)cmd.ExecuteScalar(); MessageBox.Show(表中的記錄數(shù)量為 + result.ToString(); cn.Close(); 如果調(diào)試不成功,可以安裝“AccessDatabaseEngine”應(yīng)用程序后再調(diào)試。,連接數(shù)據(jù)庫(kù)的代碼示例-p93,任務(wù)7.3 連接數(shù)據(jù)庫(kù),驗(yàn)證登錄信息,四. 使用Command對(duì)象 對(duì)數(shù)據(jù)庫(kù)中的數(shù)據(jù)的操作大多通過(guò)SQL語(yǔ)句來(lái)實(shí)現(xiàn)。Command對(duì)象可以描述并執(zhí)行這些SQL語(yǔ)句。 Connection屬性:Command對(duì)象使用的數(shù)據(jù)庫(kù)連接對(duì)象; CommandText屬性:要執(zhí)行的SQL語(yǔ)句;
16、 ExecuteNonQuery方法:執(zhí)行沒(méi)有返回值的SQL語(yǔ)句,如Update、Insert、Delete等; ExecuteScalar方法:執(zhí)行返回單個(gè)值的SQL語(yǔ)句,如COUNT(*); ExecuteReader方法:執(zhí)行查詢(xún)語(yǔ)句,返回DataReader對(duì)象。,任務(wù)7.3 連接數(shù)據(jù)庫(kù),驗(yàn)證登錄信息,四. 使用Command對(duì)象 創(chuàng)建Command對(duì)象 SqlCommand 對(duì)象名=new SqlCommand(); 定義要執(zhí)行的SQL語(yǔ)句 將SQL語(yǔ)句存儲(chǔ)在一個(gè)字符串變量中 例如:string sql=SELECT COUNT(*) FROM UserInfo”; 設(shè)置Comman
17、dText屬性指定SQL語(yǔ)句 設(shè)置Connection屬性表示要使用的連接對(duì)象,執(zhí)行SQL語(yǔ)句,任務(wù)7.3 連接數(shù)據(jù)庫(kù),驗(yàn)證登錄信息,五. 實(shí)現(xiàn)登錄驗(yàn)證 可以使用String類(lèi)的Format方法來(lái)拼接字符串。 1、實(shí)現(xiàn)思路: 用戶(hù)在登錄窗體中輸入用戶(hù)名和密碼后,程序要到UserInfo表中去查詢(xún)輸入的用戶(hù)名和密碼是否正確。 查詢(xún)方法為:查詢(xún)UserName列為輸入的用戶(hù)名并且Password列為輸入密碼的數(shù)據(jù)有多少條,如果個(gè)數(shù)大于0,則說(shuō)明用戶(hù)名和密碼正確,否則錯(cuò)誤。 查詢(xún)語(yǔ)句為: SELECT COUNT(*) FROM UserInfo WHERE UserName= AND Passwo
18、rd= ,2、編寫(xiě)SQL語(yǔ)句,查詢(xún)數(shù)據(jù)的SQL語(yǔ)句中的用戶(hù)名和密碼信息都來(lái)自用戶(hù)的輸入,可以拼接字符串構(gòu)建SQL語(yǔ)句。代碼如下: string userName=txtUserName.Text; string password=txtPassword.Text; string sql=string.Format( “SELECT COUNT(*) FROM UserInfo”+”WHERE UserName=0 AND password=1”,userName,password);,代碼改進(jìn),可以將變化的數(shù)據(jù)以參數(shù)形式表示,參數(shù)必須以開(kāi)頭。 代碼如下: SqlCommand cmd=new SqlCommand(); cmd.CommandText=string.Format(“SELECT COUNT(*) FRO
溫馨提示
- 1. 本站所有資源如無(wú)特殊說(shuō)明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請(qǐng)下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請(qǐng)聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶(hù)所有。
- 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁(yè)內(nèi)容里面會(huì)有圖紙預(yù)覽,若沒(méi)有圖紙預(yù)覽就沒(méi)有圖紙。
- 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
- 5. 人人文庫(kù)網(wǎng)僅提供信息存儲(chǔ)空間,僅對(duì)用戶(hù)上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對(duì)用戶(hù)上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對(duì)任何下載內(nèi)容負(fù)責(zé)。
- 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請(qǐng)與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時(shí)也不承擔(dān)用戶(hù)因使用這些下載資源對(duì)自己和他人造成任何形式的傷害或損失。
最新文檔
- 河南省2025-2026學(xué)年高三(上)期末物理試卷(含答案)
- 期末測(cè)試卷(含答案含聽(tīng)力原文無(wú)音頻)2025-2026學(xué)年人教版英語(yǔ)八年級(jí)下冊(cè)
- 五年級(jí)下冊(cè)數(shù)學(xué)的試卷及答案
- 污水處理試題及答案
- 往年成考試卷及答案
- 2022~2023文化教育職業(yè)技能鑒定考試題庫(kù)及答案解析第64期
- 2022人教版六年級(jí)上冊(cè)數(shù)學(xué)期末綜合卷完整參考答案
- 英語(yǔ)動(dòng)詞的時(shí)態(tài)專(zhuān)項(xiàng)訓(xùn)練100(附答案)含解析
- 數(shù)字城管考試試題及答案
- 生物安全學(xué)考試題及答案
- 村支書(shū)考試試題及答案
- 醫(yī)療綜合樓手術(shù)室、放射科、檢驗(yàn)科二次深化設(shè)計(jì)裝飾工程投標(biāo)方案投標(biāo)文件(技術(shù)方案)
- DBJ50-T-078-2016重慶市城市道路工程施工質(zhì)量驗(yàn)收規(guī)范
- 湖北省十堰市城區(qū)2024-2025學(xué)年九年級(jí)上學(xué)期期末質(zhì)量檢測(cè)道德與法治試題 (含答案)
- 2025年中國(guó)船舶集團(tuán)有限公司招聘筆試參考題庫(kù)含答案解析
- 辦公樓物業(yè)服務(wù)的品質(zhì)提升策略
- 養(yǎng)殖場(chǎng)土地租賃合同
- JBT 8200-2024 煤礦防爆特殊型電源裝置用鉛酸蓄電池(正式版)
- (正式版)SHT 3078-2024 立式圓筒形料倉(cāng)工程設(shè)計(jì)規(guī)范
- 計(jì)算機(jī)就業(yè)能力展示
- 設(shè)備維修團(tuán)隊(duì)的協(xié)作與溝通
評(píng)論
0/150
提交評(píng)論