SQL數(shù)據(jù)庫操作步驟及代碼教學內(nèi)容_第1頁
SQL數(shù)據(jù)庫操作步驟及代碼教學內(nèi)容_第2頁
SQL數(shù)據(jù)庫操作步驟及代碼教學內(nèi)容_第3頁
SQL數(shù)據(jù)庫操作步驟及代碼教學內(nèi)容_第4頁
SQL數(shù)據(jù)庫操作步驟及代碼教學內(nèi)容_第5頁
已閱讀5頁,還剩39頁未讀, 繼續(xù)免費閱讀

下載本文檔

版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進行舉報或認領(lǐng)

文檔簡介

1、SQL 數(shù) 據(jù) 庫 操 作 步 驟及代碼第2章數(shù)據(jù)庫高級編程ADO.NET 是為.NET 框架而創(chuàng)建的,是對 ADO (ActiveX Data Objects)對 象模型的擴充。ADO.NET提供了一組數(shù)據(jù)訪問服務的類,可用于對MicrosoftSQL Server、Oracle等數(shù)據(jù)源的一致訪問。 ADO.NET模型分為.NET Data Provider (數(shù)據(jù)提供程序)和DataSet數(shù)據(jù)集(數(shù)據(jù)處理的核心)兩大主要部 分。.NET數(shù)據(jù)提供程序提供了四個核心對象,分別是Co nn ection、Comma nd、DataReade和DataAdapter對象。功能如表2-1所示。表2-

2、1 ADO.NET核心對象對象功能Connection提供和數(shù)據(jù)源的連接功能Comma nd提供訪問數(shù)據(jù)庫命令,執(zhí)行查詢數(shù)據(jù)或修改數(shù)據(jù)的功能,例如 運行SQL命令和存儲過程等DataReader從數(shù)據(jù)源中讀取只向前的且只讀的數(shù)據(jù)流DataAdapter是DataSet對象和數(shù)據(jù)源間的橋梁。DataAdapter使用4個Comma nd對象來運行查詢、新建、修改、刪除的 SQL命令,把數(shù)據(jù)力n載到 DataSet丿 或者把 DataSet內(nèi)的數(shù)據(jù)送冋數(shù)據(jù)源2.1 SQL Server相關(guān)配置在使用C#訪問數(shù)據(jù)庫之前,首先創(chuàng)建一個名為“ chap2'的數(shù)據(jù)庫,此數(shù)據(jù)庫 作為2.1節(jié)及2.2

3、節(jié)中例題操作的默認數(shù)據(jù)庫。然后創(chuàng)建數(shù)據(jù)表 Products,表結(jié) 構(gòu)如表2-2所示。創(chuàng)建完畢后可錄入初始化數(shù)據(jù)若干條。表2-2 Products表表結(jié)構(gòu)序號列名字段說明數(shù)據(jù)類型長度主鍵允許空1ProductID商品編號char4主鍵否2ProductName商品名稱nvarchar40否3SupplierName供應商名稱nvarchar40否4CategoryName商品類別名稱nvarchar40否5UnitPrice單價money否6UnitsInStock庫存量smallint否7Discount是否折扣char1否F面首先介紹幾個SQL Server 2012的常用操作。這些操作都是

4、初學者在實踐環(huán)節(jié)及上機課的操作中出現(xiàn)問題較多的地方。1 身份驗證方式SQL Server 2012在安裝時默認是使用 Windows驗證方式的,但是安裝過后 用戶可隨時修改身份驗證方式。啟動SQL Server 2012 Management Studio在“連接到服務器”對話框中選擇Windows身份驗證”連接服務器,連接成功后,在窗體左側(cè)的“對象資源管理器” 中右鍵單擊服務器實例節(jié)點,并在彈出的快捷菜單中選擇“屬性”菜單項,系統(tǒng) 將彈出“服務器屬性”窗體,切換至“安全性”選項卡,如圖-1所示。圖2-1 “服務器屬性”對話框-“安全性”選項卡在“服務器身份驗證”部分選擇SQL Server和

5、Windows身份驗證模式”選項, 并單擊【確定】按鈕。系統(tǒng)將提示需要重新啟動 SQL Server以使配置生效,如 圖2-2所示。圖2-2系統(tǒng)提示框右鍵單擊“對象資源管理器”的服務器實例節(jié)點,在彈出的快捷菜單中選擇“重新啟動”菜單項,SQL Server將重新啟動服務,重啟成功后即可使用混合驗 證方式登錄SQL Server服務器。2 添加登錄賬戶大部分初學者都習慣于使用 SQL Server的系統(tǒng)管理員賬號“sa”來登錄數(shù)據(jù)庫 服務器,而在實際工作環(huán)境中使用 sa賬號登錄服務器是不合理的。因為很多情 況下系統(tǒng)的數(shù)據(jù)庫是部署在租用的數(shù)據(jù)庫服務器上的,此時數(shù)據(jù)庫設計人員或 編程人員都不可能具有

6、sa賬號的使用權(quán)限,因此在將身份驗證方式修改為SQLServer和Windows混合驗證后,需要為某應用程序創(chuàng)建一個專用的登錄賬戶。 其操作步驟描述如下。(1)使用Windows身份驗證登錄SQL Server,在對象資源管理器中點擊“安全性”節(jié)點前面的加號+”,在展開后的“登錄名”子節(jié)點上單擊右鍵,如圖2-3所示,并在彈出的快捷菜單中選擇“新建登錄名”選項圖2-3登錄名節(jié)點的右鍵菜單(2) 系統(tǒng)彈出“登錄名一新建”對話框中,如圖2-4所示。首先在登錄名輸入框中填寫需要創(chuàng)建的用戶名,此處以“ zd”為例;將身份驗證方式選為SQLServer身份驗證”,為新建賬戶設置密碼為“ 123”,同時去除

7、“強制實施密碼策略” 和“用戶在下次登錄時必須更改密碼”選項;最后為賬戶選擇默認數(shù)據(jù)庫“hap2'。圖2-4“登錄名-新建”對話框“常規(guī)”選項卡(3)服務器角色節(jié)點不予配置。有關(guān) SQL Server服務器角色請參考相關(guān)資 料,此處不再詳細介紹。(4)在對話框左側(cè)選項卡中選擇“用戶映射”節(jié)點,如圖2-5所示,在“映射 到此登錄名的用戶”列表中,勾選此前創(chuàng)建好的數(shù)據(jù)庫“ chap2',在窗體右下方的“數(shù)據(jù)庫角色成員身份”框里選擇db_Owner”,即數(shù)據(jù)庫擁有者。圖2-5“登錄名-新建”對話框“用戶映射”選項卡(5)安全對象節(jié)點一般不予配置。(6)在對話框左側(cè)選項卡中選擇“狀態(tài)”

8、節(jié)點,如圖2-6所示,將“是否允許連接到數(shù)據(jù)庫引擎”選項設為“授予”,同時將“登錄”選項設為“啟用”。以上各節(jié)點 配置完成后單擊【確定】按鈕,即完成了對賬戶的創(chuàng)建工作圖2-6“登錄名-新建”對話框“狀態(tài)配置”選項卡(7)新建賬戶完成后,重新連接 SQL Server,如圖2-7所示,選擇SQLServer身份驗證方式,輸入前面設置的登錄名“ zd”及密碼123”,點擊【連接】按鈕,即可完成登錄。登錄成功后在對象資源管理器中可看到服務器實例名后 面顯示的登錄用戶名,如圖2-8所示SQL Server :二土tjI出逛名獻RSf t4J.Id-曲口mAWfH14BJJ»圖2-8對象資源管

9、理器圖2-7 “連接到服務器”對話框2.2使用ADO.NET訪問數(shù)據(jù)庫2.2.1連接數(shù)據(jù)庫在對數(shù)據(jù)源進行操作之前,首先需建立到數(shù)據(jù)源的連接,可使用Conn ection對象顯式創(chuàng)建到數(shù)據(jù)源的連接?!纠?-1】 設計一個 Windows應用程序,能通過“Windows驗證“和Windows和SQL Server混合驗證”兩種方式建立到數(shù)據(jù)庫的連接。圖2-9 “連接數(shù)據(jù)庫”窗體控件 Tab順序?qū)崿F(xiàn)過程如下。(1)新建一 Windows應用程序,命名為connection,將創(chuàng)建的默認窗體名 更名為frmConnect,窗體的Text屬性設置為“連接數(shù)據(jù)庫”,界面設計如圖2-9 所示。frmConn

10、ect窗體中的主要控件,按Tab鍵順序,描述如表2-3所示。表2-3 “連接數(shù)據(jù)庫”窗體控件及說明Tab順序控件類型控件名稱說明主要屬性屬性名屬性值0ButtonbtnConnect1Windows身份驗證方式連接數(shù)據(jù)庫TextWindows 驗證1btnConnect2混合驗證方式連接數(shù)據(jù)庫Text混合驗證(2)主要程序代碼說明:本節(jié)內(nèi)所有例題代碼均需引用 System.Data.SqlClient命名空間,代碼如下:using System.Data.SqlClient; /添加對 SQL Server 數(shù)據(jù)訪問對象的引用后續(xù)例題不再逐一說明。 由于篇幅所限,本節(jié)中所有例題的異常捕獲代碼都

11、省略了,讀者需自行添加獲取控件輸入及訪問數(shù)據(jù)庫等處的異常捕獲代碼。雙擊【W(wǎng)in dows驗證】按鈕,進入其 Click事件處理函數(shù),代碼如下:/Windows方式連接數(shù)據(jù)庫private void btnConnect1_Click(object sender, EventArgs e)string strConn = "server=XP-4;database=chap2;integrated security=true" / 連接字符串SqlConnection conn = new SqlConnection(strConn); / 創(chuàng)建連接對象conn.Open()

12、;/ 打開連接/如連接成功則彈岀消息框提示MessageBox.Show(”數(shù)據(jù)庫已通過集成驗證方式連接成功",”連接狀態(tài)對話框");conn.Close();/使用完畢后關(guān)閉數(shù)據(jù)庫連接雙擊【混合驗證】按鈕,進入其 Click事件處理函數(shù),填寫代碼如下。/SQL Server + Windows方式連接數(shù)據(jù)庫private void btnConnect2_Click(object sender, EventArgs e)string strConn = "server=XP-4.;database=chap2;uid=zd;pwd=123" / 連接字

13、符串SqlConnection conn = new SqlConnection(strConn); / 創(chuàng)建連接對象conn.Open(); / 打開連接/如連接成功則彈岀消息框提示MessageBox.Show(”數(shù)據(jù)庫已通過混合驗證方式連接成功",”連接狀態(tài)對話框");conn.Close();/使用完畢后關(guān)閉數(shù)據(jù)庫連接數(shù)據(jù)庫連接字符串包含要連接的數(shù)據(jù)庫的信息,如server屬性指定數(shù)據(jù)庫服務器名稱,database屬性指定數(shù)據(jù)庫名稱,使用Win dows身份驗證方式只需要給出server和 database兩個屬性的值,并使用“ integrated securit

14、y=true"指定身 份驗證方式為 Windows驗證;當使用混合驗證時則需要使用uid屬性指定數(shù)據(jù)庫賬戶、pwd屬性指定該賬號的密碼。說明:上例中的連接字符串中的用戶名“ zd”和密碼“3”,是以本節(jié)“添加登 錄賬戶”的方式創(chuàng)建的,讀者可自行修改為自己計算機的SQLServer登錄名及密運行程序,分別單擊【W(wǎng)indows驗證】和【混合驗證】兩個按鈕,如連接成功,將分別彈出不同的連接狀態(tài)對話框,如圖2-10所示兀粧疋嵐二莊阪荃二石77宜實疋H唏 盂E團曲諂駐皿式垂接就口圖2-10連接狀態(tài)對話框222對數(shù)據(jù)庫進行添加、修改及刪除操作在創(chuàng)建好到數(shù)據(jù)庫的連接之后,可以使用Comma nd對

15、象對數(shù)據(jù)庫進行更新操作?!纠?-2】設計一個Windows應用程序,能實現(xiàn)對數(shù)據(jù)庫表的添加、修改 及刪除操作。實現(xiàn)過程:(1)新建一 Windows應用程序,命名為operateData將創(chuàng)建的默認窗體名更名為frmCommand,窗體的Text屬性設置為“對數(shù)據(jù)庫執(zhí)行添加、修改及刪 除操作”,界面設計如圖2-11所示。frmCommand窗體中的主要控件,按Tab鍵 順序,描述如表2-4所示。圖2-11“對數(shù)據(jù)庫進行添加、修改及刪除操作”窗體Tab順序視圖表2-4 “對數(shù)據(jù)庫執(zhí)行添加、修改及刪除操作”窗體控件及說明Tab順序控件類型控件名稱說明主要屬性屬性名屬性值0Buttonbtnlnse

16、rt向數(shù)據(jù)庫表添加一條記錄Text添加1btnUpdate修改數(shù)據(jù)庫表中的記錄Text修改2btnDelete刪除數(shù)據(jù)庫表中的記錄Text刪除(2)主要程序代碼 雙擊【添加】按鈕,進入其 Click事件處理函數(shù),代碼如下。/【添加】按鈕單擊事件處理函數(shù)private void btnlnsert_Click(object sender, EventArgs e)string strConn = "server=XP-4;database=chap2;integrated security=true" / 連接字符串SqlConnection conn = new SqlCo

17、nnection(strConn); / 聲明并創(chuàng)建連接對象conn.Open(); /打開數(shù)據(jù)庫連接/向商品表插入一條新記錄string strSql="insert into Products values('0012','雙層蒸鍋蘇泊爾集團','廚具',129.9,100,'false')"SqlCommand comm = new SqlCommand(strSql, conn); / 聲明并創(chuàng)建命令對象int row = comm.ExecuteNonQuery(); /執(zhí)行SQL語句,并獲取受影響的

18、行數(shù)if (row > 0) /如果記錄插入成功,則彈出消息框提示MessageBox.Show(”插入數(shù)據(jù)成功","操作狀態(tài)對話框”);conn.Close(); /關(guān)閉數(shù)據(jù)庫連接 雙擊【修改】按鈕,進入其 Click事件處理函數(shù),代碼如下。/【修改】按鈕單擊事件處理函數(shù)private void btnUpdate_Click(object sender, EventArgs e)string strConn = "server=XP-4;database=chap2;integrated security=true"SqlConnection

19、conn = new SqlConnection(strConn);conn.Open();/修改商品表中的一條記錄string strSql = "update Products set UnitsInStock=500 where ProductlD='0012";SqlCommand comm = new SqlCommand(strSql, conn);int row = comm.ExecuteNonQuery();if (row > 0)MessageBox.Show(”修改數(shù)據(jù)成功","操作狀態(tài)對話框”);conn.Close

20、(); 雙擊【刪除】按鈕,進入其 Click事件處理函數(shù),代碼如下。/【刪除】按鈕單擊事件處理函數(shù)private void btnDelete_Click(object sender, EventArgs e)string strConn = "server=XP-4;database=chap2;integrated security=true"SqlConnection conn = new SqlConnection(strConn);conn.Open();/刪除商品表中的一條記錄string strSql = "delete from Products

21、where ProductID='0012'"SqlCommand comm = new SqlCommand(strSql, conn);int row = comm.ExecuteNonQuery();if (row > 0)MessageBox.Show(”刪除數(shù)據(jù)成功",”操作狀態(tài)對話框");conn.Close();運行程序,分別單擊【添加】、【修改】和【刪除】按鈕,如操作成功, 將分別彈出不同的操作狀態(tài)對話框,如圖2-12所示。對于數(shù)據(jù)庫記錄的修改情況,讀者可同時從SQL Server管理控制臺訪問數(shù)據(jù)庫chap2的Product

22、s表進行 驗證。損作狀態(tài)對話框斗圖2-12操作狀態(tài)對話框2.2.3查詢數(shù)據(jù)庫中的數(shù)據(jù)【例2-3】設計一個 Windows應用程序,使用DataReade查詢數(shù)據(jù)庫中的信息并加載到ComboBox控件的選項中。實現(xiàn)過程:(1)新建一 Windows應用程序,命名為testDataReade,將創(chuàng)建的默認窗體名更名為frmProducts,窗體的Text屬性設置為“商品類別及名稱”,界面設計如圖2-13所示。frmProducts窗體中的主要控件,按Tab鍵順序,描述如表2-5 所示。圖2-13 “商品類別及名稱”窗體 Tab鍵順序視圖表2-5“商品類別及名稱”窗體控件及說明Tab順序控件類型控件

23、名稱說明主要屬性屬性名屬性值0ComboBoxcomboCategory所有商品類別名稱DropDownStyleDropDownList1comboProducts某商品類別下的商品名稱DropDownStyleDropDownList說明:界面中不參與編程的Label控件不再進行說明,以下各例題均同樣處(2)主要程序代碼雙擊窗體標題欄,進入Load事件處理函數(shù),訪問數(shù)據(jù)庫,為“商品類別”下拉框加載數(shù)據(jù),代碼如下/窗體加載事件處理函數(shù),為“商品類別”組合框加載所有的商品類別數(shù)據(jù)private void frmProducts_Load(object sender, EventArgs e)s

24、tring strConn = "server=XP-4;database=chap2;integrated security=true" 連接字符串SqlConnection conn = new SqlConnection(strConn); / 聲明并創(chuàng)建連接對象conn.Open(); /打開數(shù)據(jù)庫連接string strSql = "select distinct CategoryName from Products" / 查詢SqlCommand comm = new SqlCommand(strSql, conn);SqlDataReade

25、r dr = comm.ExecuteReader();while (dr.Read()comboCategory.ltems.Add(drO); / 依次加載數(shù)據(jù)項至 ComboBoxdr.Close();conn.Close();雙擊商品類別下拉框,進入其 Selected In dexCha nge(事件處理函數(shù),根據(jù)其選項為“商品名稱”下拉框加載數(shù)據(jù),代碼如下/ “商品類別”下拉框選項索引變化事件處理函數(shù),/根據(jù)商品類別下拉框中的選項加載該類別下的所有的商品名稱private void comboCategory_SelectedlndexChanged(object sender,

26、EventArgs e)comboProducts.ltems.Clear();string strConn = "server=XP-4;database=chap2;integrated security=true"SqlConnection conn = new SqlConnection(strConn);conn.Open();string strSql = "select ProductName from Products where CategoryName="'+comboCategory.Text+""

27、9; SqlCommand comm = new SqlCommand(strSql, conn);SqlDataReader dr = comm.ExecuteReader();while (dr.Read()comboProducts.ltems.Add(drO);dr.Close(); conn.Close();【例2-4】使用DataAdaper和 DataSet對象查詢數(shù)據(jù)庫中的信息并加載到ComboBox控件的選項中。實現(xiàn)過程:(1) 新建一 Windows應用程序,命名為dataSe,將創(chuàng)建的默認窗體名更名為frmProducts,窗體及各主要控件的屬性設置同例2-3。(2) 主

28、要程序代碼 雙擊窗體標題欄,進入其Load事件處理函數(shù),訪問數(shù)據(jù)庫,為“商品類別”下拉框加載數(shù)據(jù),代碼如下。窗體加載事件處理函數(shù),為“商品類別”組合框加載所有的商品分類數(shù)據(jù)。private void frmProducts_Load(object sender, EventArgs e)string strConn = "server=XP-4;database=chap2;integrated security=true" / 連接字符串SqlConnection conn = new SqlConnection(strConn); / 聲明并創(chuàng)建連接對象string s

29、trSql = "select distinct CategoryName from Products" / 查詢不重復的商品類別名稱 SqlDataAdapter da = new SqlDataAdapter(strSql, conn); / 聲明并創(chuàng)建數(shù)據(jù)適配器對象DataSet ds = new DataSet(); /聲明并創(chuàng)建數(shù)據(jù)集對象da.Fill(ds); /使用數(shù)據(jù)適配器填充數(shù)據(jù)集comboCatagory.DataSource = ds.Tables0; / 設置商品類別下拉框數(shù)據(jù)源 comboCatagory.DisplayMember = "

30、;CategoryName" / 設置商品類別下拉框的顯示屬性 雙擊“商品類別”下拉框,進入其SelectedI ndexCha nge(事件處理函數(shù),根據(jù)其選中項為“商品名稱”下拉框加載數(shù)據(jù),代碼如下。/ “商品類別”下拉框選項索引變化事件處理函數(shù),/根據(jù)商品類別下拉框中的選項加載該類別下的所有的商品名稱private void comboCatagory_SelectedlndexChanged(object sender, EventArgs e)string strConn = "server=XP-4;database=chap2;integrated secur

31、ity=true"SqlConnection conn = new SqlConnection(strConn);根據(jù)“商品類別”下拉框中的選項查詢商品名稱string strSql="select ProductName from Products where CategoryName="'+comboCategory.Text+""'SqlDataAdapter da = new SqlDataAdapter(strSql, conn);DataSet ds = new DataSet();da.Fill(ds);combo

32、Products.DataSource = ds.TablesO; / 設置商品名稱下拉框的數(shù)據(jù)源 comboProducts.DisplayMember = "ProductName" / 設置商品名稱下拉框的顯示屬性思考:細心的同學會發(fā)現(xiàn),例2-3和例2-4雖然運行界面完全相同,但是窗 體加載之后列表框中選項的情況是有區(qū)別的。那么,區(qū)別在哪呢?原因又是什 么呢?2.2.4數(shù)據(jù)綁定控件【例2-5】設計一個Windows應用程序,能實現(xiàn)商品信息的維護。本例題中,程序要讀取數(shù)據(jù)庫中的數(shù)據(jù),加載數(shù)據(jù)至ListBox和ComboBox控件,并根據(jù)用戶在ListBox控件中選擇的數(shù)

33、據(jù)項再次訪問數(shù)據(jù)庫,獲取相關(guān)記錄。另 外,本例題還實現(xiàn)了對商品表Products的增加、修改及刪除操作。圖2-14“商品信息管理”窗體 Tab鍵順序視圖實現(xiàn)過程:(1)新建一 Windows應用程序,命名為products,將創(chuàng)建的默認窗體名更名為frmProducts,窗體的Text屬性設置為“商品信息管理”,界面設計如圖2-14所示。frmProducts窗體中的主要控件,按Tab鍵順序,描述如表2-6所示表2-6 “商品信息管理”窗體控件及說明Tab順序控件類型控件名稱說明主要屬性屬性名屬性值0TextBoxtxtID輸入和顯示商品編號ReadonlyTrue1txtName輸入和顯示商

34、品名稱ReadonlyTrue2txtSupplier輸入和顯示供應商名稱ReadonlyTrue3ComboBoxcomboCategory輸入和顯示商品類別EnabledFalse4TextBoxtxtUnitPrice輸入和顯示商品單價ReadonlyTrue5txtUnitsInStock輸入和顯示庫存數(shù)量ReadonlyTrue6CheckBoxchkDisc輸入和顯示是否打折EnabledFalse7ButtonbtnInsert添加商品EnabledTrue8btnUpdate修改商品EnabledTrue9btnSave保存數(shù)據(jù)EnabledFalse10btnCancle取消

35、編輯EnabledFalse11btnDelete刪除數(shù)據(jù)EnabledTrue12ListBoxlstProducts商品名稱列表EnabledTrue(2)主要程序代碼首先要為該程序添加兩個成員變量,代碼如下:string strConn = "server=XP-4;database=chap2;integrated security=true" / 連接字符串string insertORupdate = ""/標識變量,用來記錄要保存的是添加還是修改操作自定義方法DataLoad(),訪問數(shù)據(jù)庫,加載商品類別列表及商品名稱列表,代碼如下。/ &

36、lt;summary>/訪問數(shù)據(jù)庫,加載商品類別列表及商品名稱列表/ </summary>void DataLoad()/以下代碼使用DataReader訪問數(shù)據(jù)庫SqlConnection conn = new SqlConnection(strConn); / 創(chuàng)建連接對象conn.Open();/ 打開連接string strSql = "select distinct CategoryName from Products" / 查詢不重復的商品類別名 SqlCommand comm = new SqlCommand(strSql, conn); /

37、 聲明并創(chuàng)建命令對象 SqlDataReader dr = comm.ExecuteReader(); / 執(zhí)行查詢,用 DataReader 存放數(shù)據(jù) while (dr.Read()/如果查詢到數(shù)據(jù)comboCategory.ltems.Add(drO); / 逐項加載商品類別名至ComboBoxdr.Close();/ 關(guān)閉 dataReader/以下代碼使用DataAdapter和DataSet訪問數(shù)據(jù)庫strSql = "select ProductName,ProductlD from Products" / 查詢商品名稱及商品編號SqlDataAdapter

38、da = new SqlDataAdapter(strSql, conn); / 聲明并創(chuàng)建數(shù)據(jù)適配器對象DataSet ds = new DataSet(); 聲明并創(chuàng)建數(shù)據(jù)集對象da.Fill(ds); /填充數(shù)據(jù)集IstProducts.DataSource = ds.TablesO; / 設置商品名稱列表的數(shù)據(jù)源IstProducts.DisplayMember = "ProductName" / 設置顯示值屬性IstProducts.ValueMember = "ProductID" / 設置實際值屬性 conn.Close();/ 關(guān)閉連接I

39、stProducts.Selectedlndex = -1; /使商品名稱列表沒有選中項商品管理窗體的Load事件處理函數(shù),就是調(diào)用 DataLoad()方法,代碼如下。/窗體加載事件處理函數(shù)private void frmProducts _Load(object sender, EventArgs e)DataLoad();聲明自定義方法controlEnabled(),控制各輸入控件在“查看”和“編輯”操作時的可用性,代碼如下。/自定義方法,控制控件的可用性,將控件可用性分為查看”和編輯”兩種狀態(tài)public void controlEnabled(string status)if (s

40、tatus = "show") /當前為查看數(shù)據(jù)狀態(tài),控件都不可編輯btnInsert.Enabled = true;btnUpdate.Enabled = true;btnSave.Enabled = false;btnCancle.Enabled = false;btnDelete.Enabled = true;chkDisc.Enabled = false;comboCategory.Enabled = false;foreach (Control c in this.Controls)if (c is TextBox)TextBox txtb = (TextBox)

41、c);txtb.ReadOnly = true;else 當前為編輯數(shù)據(jù)狀態(tài),控件可用btnInsert.Enabled = false;btnUpdate.Enabled = false;btnSave.Enabled = true;btnCancle.Enabled = true;btnDelete.Enabled = false;chkDisc.Enabled = true;comboCategory.Enabled = true;foreach (Control c in this.Controls)if (c is TextBox)TextBox txtb = (TextBox)c)

42、;txtb.ReadOnly = false; 雙擊lstProducts控件,進入其選項索引變化事件處理函數(shù),根據(jù)選擇的商品,查詢該商品其他信息,并為界面其他控件賦值,代碼如下。/商品名稱列表選項索引變化事件,根據(jù)選擇的商品名稱加載商品其他信息private void lstProducts_SelectedlndexChanged(object sender, EventArgs e)/用來判斷用戶是否選中了有效的選項,且保證是數(shù)據(jù)加載后用戶進行的操作if (IstProducts.Selectedlndex != -1)&&(lstProducts.SelectedVal

43、ue.ToString()!="System.Data.DataRowView")string proId = lstProducts.SelectedValue.ToString(); / 獲取當前選中商品的商品編號SqlConnection conn=new SqlConnection(strConn); / 聲明并創(chuàng)建連接對象conn.Open();/打開數(shù)據(jù)庫連接string strSql="select * from Products where Productld="'+prold+""' /由商品編號查詢

44、該商品其他信息SqlCommand comm=new SqlCommand(strSql,conn); / 聲明并創(chuàng)建命令對象SqlDataReader dr = comm.ExecuteReader(); /使用 DataReader獲取查詢結(jié)果if (dr.Read() /如果查詢到數(shù)據(jù),就將該商品各字段的值賦予窗體各控件用以顯示txtID.Text = dr"P roductlD".ToString();txtName.Text=dr"ProductName".ToString();txtSupplier.Text=dr"Supplier

45、Name".ToString();comboCategory.Text = dr"CategoryName".ToString(); txtUnitPrice.Text=dr"UnitPrice".ToString(); txtUnitslnStock.Text=dr"UnitslnStock".ToString(); chkDisc.Checked = (dr"Discount".ToString()="True"?true:false;dr.Close(); / 關(guān)閉 DataRe

46、aderconn.Close(); / 關(guān)閉連接controlEnabled("show"); /將控件設置為查看狀態(tài)說明:由于為ListBox控件加載選項時會觸發(fā)SelectedlndexChangec事件, 此時獲取到的 ListBox.SelectedValue.ToString()值為System.Data.DataRowView”,而不是經(jīng)用戶選擇過的商品編號,程序需過濾掉這種情況。只有完成ListBox控件的選項加載后,經(jīng)用戶選擇某條商品數(shù)據(jù)時,程序才進行后續(xù)操作,如下代碼即可實現(xiàn)這種過濾功能。if (IstProducts.Selectedlndex != -

47、1)&& (lstProducts.SelectedValue.ToString()!="System.Data.DataRowView")雙擊btnInsert按鈕,進入其Click事件處理函數(shù),清空所有輸入控件并使其為可編輯狀態(tài),設置編輯狀態(tài)為insert,真正的插入操作在btnSave的Click事件處理函數(shù)中進行。代碼如下/【添加】按鈕單擊事件處理函數(shù)private void btnlnsert_Click(object sender, EventArgs e) insertORupdate = "insert" /設置標識變量為

48、添加操作 controlEnabled("edit"); /將控件設置為編輯狀態(tài)/清空所有控件foreach (Control c in this.Controls)if (c is TextBox)TextBox txtb = (TextBox)c);txtb.Text ="" comboCategory.SelectedIndex = -1; chkDisc.Checked = false;雙擊btnUpdate按鈕,進入其Click事件處理函數(shù),使各輸入控件為可編 輯狀態(tài),設置編輯狀態(tài)為update,真正的修改操作在btnSave的Click事件處

49、理 函數(shù)中進行。代碼如下。/【修改】按鈕單擊事件處理函數(shù)private void btnUpdate_Click(object sender, EventArgs e)controlEnabled("edit");txtID.ReadOnly = true; /商品編號不能修改 insertORupdate = "update" /設置標志變量為修改操作雙擊btnSave按鈕,進入其Click事件處理函數(shù),根據(jù)編輯狀態(tài)對數(shù)據(jù)庫進行insert或update操作,代碼如下。I /【保存】按鈕單擊事件處理函數(shù),完成添加和修改操作private void bt

50、nSave_Click(object sender, EventArgs e)SqlConnection conn = new SqlConnection(strConn); / 聲明并創(chuàng)建連接對象conn.Open(); /打開數(shù)據(jù)庫連接下面一段代碼將保存添加的商品數(shù)據(jù)if (insertORupdate = "insert")string strSql = "insert into Products values(ProductlD,ProductName ,SupplierName,CategoryName,UnitPrice,UnitslnStock,Di

51、scount)"SqlCommand comm = new SqlCommand(strSql, conn); comm.Parameters.Add(new SqlParameter("ProductID", txtID.Text); comm.Parameters.Add(new SqlParameter("ProductName", txtName.Text); comm.Parameters.Add(new SqlParameter("SupplierName", txtSupplier.Text); comm.Pa

52、rameters.Add(new SqlParameter("CategoryName", comboCategory.Text); comm.Parameters.Add(new SqlParameter("UnitPrice", float.Parse(txtUnitPrice.Text); comm.Parameters.Add(new SqlParameter("UnitslnStock", float.Parse(txtUnitslnStock.Text); comm.Parameters.Add(new SqlParame

53、ter("Discount", (chkDisc.Checked = true ? "1" : "0"); if (comm.ExecuteNonQuery() > 0)MessageBox.Show(”添加商品信息成功!");elseMessageBox.Show(”添加商品信息失??!");下面一段代碼將保存修改的商品數(shù)據(jù)elsestring strSql = "update Products set ProductName=ProductName, SupplierName=SupplierNa

54、me,CategoryName=CategoryName,UnitPrice=UnitPrice, UnitslnStock=UnitslnStock,Discount=Discount where ProductID=ProductID"SqlCommand comm = new SqlCommand(strSql, conn); comm.Parameters.Add(new SqlParameter("ProductID", txtID.Text); comm.Parameters.Add(new SqlParameter("ProductName

55、", txtName.Text); comm.Parameters.Add(new SqlParameter("SupplierName", txtSupplier.Text); comm.Parameters.Add(new SqlParameter("CategoryName", comboCategory.Text); comm.Parameters.Add(new SqlParameter("UnitPrice", float.Parse(txtUnitPrice.Text); comm.Parameters.Add

56、(new SqlParameter("UnitsInStock", float.Parse(txtUnitslnStock.Text); comm.Parameters.Add(new SqlParameter("Discount", (chkDisc.Checked = true ? "1" : "0"); if (comm.ExecuteNonQuery() > 0)MessageBox.Show("更新商品信息成功!");elseMessageBox.Show("更新商品信

57、息失??!");conn.Close(); /關(guān)閉數(shù)據(jù)庫連接DataLoad(); /重新訪問數(shù)據(jù)庫,刷新界面顯示的商品信息controlEnabled("show"); /將控件設置為查看狀態(tài)說明:代碼中出現(xiàn)的SqIParamete類為SQL命令對象類。命令對象可使用參數(shù)來將值傳遞給SQL語句或存儲過程,提供類型檢查和驗證。與命令文本不同,參數(shù)輸入被視為文本值,而不是可執(zhí)行代碼。這樣可幫助抵御“SQL注入”攻擊,這種攻擊的攻擊者會將命令插入SQL語句,從而危及服務器的安 全。一般來說,在更新 DataTable或是DataSet時,如果不采用 SqIParamete, 那么當輸入的Sql語句出現(xiàn)歧義時,如字

溫馨提示

  • 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會有圖紙預覽,若沒有圖紙預覽就沒有圖紙。
  • 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
  • 5. 人人文庫網(wǎng)僅提供信息存儲空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負責。
  • 6. 下載文件中如有侵權(quán)或不適當內(nèi)容,請與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。

評論

0/150

提交評論