![SQL數(shù)據(jù)庫操作步驟代碼_第1頁](http://file2.renrendoc.com/fileroot_temp3/2021-11/25/abbd6292-99fe-4cea-b9cf-87f35cf66abc/abbd6292-99fe-4cea-b9cf-87f35cf66abc1.gif)
![SQL數(shù)據(jù)庫操作步驟代碼_第2頁](http://file2.renrendoc.com/fileroot_temp3/2021-11/25/abbd6292-99fe-4cea-b9cf-87f35cf66abc/abbd6292-99fe-4cea-b9cf-87f35cf66abc2.gif)
![SQL數(shù)據(jù)庫操作步驟代碼_第3頁](http://file2.renrendoc.com/fileroot_temp3/2021-11/25/abbd6292-99fe-4cea-b9cf-87f35cf66abc/abbd6292-99fe-4cea-b9cf-87f35cf66abc3.gif)
版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進(jìn)行舉報或認(rèn)領(lǐng)
文檔簡介
1、第 2 章數(shù)據(jù)庫高級編程ADO.NET 是為 .NET 框架而創(chuàng)建的,是對ADO (ActiveXData Objects)對象模型的擴(kuò)充。 ADO.NET 提供了一組數(shù)據(jù)訪問服務(wù)的類,可用于對Microsoft SQL Server 、Oracle 等數(shù)據(jù)源的一致訪問。ADO.NET 模型分為 .NET Data Provider (數(shù)據(jù)提供程序)和DataSet 數(shù)據(jù)集(數(shù)據(jù)處理的核心)兩大主要部分。.NET 數(shù)據(jù)提供程序提供了四個核心對象,分別是Connection、 Command、 DataReader和 DataAdapter 對象。功能如表 2-1 所示。表 2-1 ADO.NE
2、T 核心對象對象功能Connection提供和數(shù)據(jù)源的連接功能Command提供訪問數(shù)據(jù)庫命令, 執(zhí)行查詢數(shù)據(jù)或修改數(shù)據(jù)的功能,例如運(yùn)行 SQL命令和存儲過程等DataReader從數(shù)據(jù)源中讀取只向前的且只讀的數(shù)據(jù)流DataAdapter是 DataSet 對象和數(shù)據(jù)源間的橋梁。DataAdapter 使用 4 個 Command 對象來運(yùn)行查詢、新建、修改、刪除的SQL 命令,把數(shù)據(jù)加載到 DataSet,或者把 DataSet 內(nèi)的數(shù)據(jù)送回數(shù)據(jù)源2.1 SQL Server相關(guān)配置在使用 C# 訪問數(shù)據(jù)庫之前,首先創(chuàng)建一個名為“節(jié)及 2.2 節(jié)中例題操作的默認(rèn)數(shù)據(jù)庫。然后創(chuàng)建數(shù)據(jù)表建完畢后
3、可錄入初始化數(shù)據(jù)若干條。chap2”的數(shù)據(jù)庫,此數(shù)據(jù)庫作為2.1Products,表結(jié)構(gòu)如表2-2 所示。創(chuàng)表 2-2 Products 表表結(jié)構(gòu)序號列名字段說明數(shù)據(jù)類型長度主鍵允許空1ProductID商品編號char4主鍵否2ProductName商品名稱nvarchar40否3SupplierName供應(yīng)商名稱nvarchar40否4CategoryName商品類別名稱nvarchar40否5UnitPrice單價money否6UnitsInStock庫存量smallint否7Discount是否折扣char1否下面首先介紹幾個SQL Server 2012 的常用操作。這些操作都是初學(xué)
4、者在實踐環(huán)節(jié)及上機(jī)課的操作中出現(xiàn)問題較多的地方。1身份驗證方式SQL Server 2012 在安裝時默認(rèn)是使用Windows 驗證方式的,但是安裝過后用戶可隨時修改身份驗證方式。啟動 SQL Server 2012 Management Studio ,在“連接到服務(wù)器”對話框中選擇 “ Windows身份驗證”連接服務(wù)器,連接成功后,在窗體左側(cè)的“對象資源管理器”中右鍵單擊服務(wù)器實例節(jié)點,并在彈出的快捷菜單中選擇“屬性”菜單項,系統(tǒng)將彈出“服務(wù)器屬性”窗體,切換至“安全性”選項卡,如圖2-1 所示。圖 2-1“服務(wù)器屬性”對話框-“安全性”選項卡在“服務(wù)器身份驗證”部分選擇“擊【確定】按鈕
5、。系統(tǒng)將提示需要重新啟動SQL Server 和 Windows 身份驗證模式”選項,并單SQL Server 以使配置生效,如圖2-2 所示。圖 2-2系統(tǒng)提示框右鍵單擊 “對象資源管理器”的服務(wù)器實例節(jié)點,在彈出的快捷菜單中選擇“重新啟動”菜單項, SQL Server 將重新啟動服務(wù),重啟成功后即可使用混合驗證方式登錄 SQL Server 服務(wù)器。2添加登錄賬戶大部分初學(xué)者都習(xí)慣于使用SQL Server 的系統(tǒng)管理員賬號“sa”來登錄數(shù)據(jù)庫服務(wù)器,而在實際工作環(huán)境中使用sa 賬號登錄服務(wù)器是不合理的。因為很多情況下系統(tǒng)的數(shù)據(jù)庫是部署在租用的數(shù)據(jù)庫服務(wù)器上的,此時數(shù)據(jù)庫設(shè)計人員或編程人
6、員都不可能具有sa 賬號的使用權(quán)限,因此在將身份驗證方式修改為SQL Server 和 Windows 混合驗證后,需要為某應(yīng)用程序創(chuàng)建一個專用的登錄賬戶。其操作步驟描述如下。( 1)使用 Windows 身份驗證登錄SQL Server,在對象資源管理器中點擊“安全性”節(jié)點前面的加號“+”,在展開后的“登錄名”子節(jié)點上單擊右鍵,如圖2-3 所示,并在彈出的快捷菜單中選擇“新建登錄名”選項。圖2-3登錄名節(jié)點的右鍵菜單( 2)系統(tǒng)彈出“登錄名新建”對話框中,如圖2-4 所示。首先在登錄名輸入框中填寫需要創(chuàng)建的用戶名,此處以“zd”為例;將身份驗證方式選為“SQL Server 身份驗證” ,為
7、新建賬戶設(shè)置密碼為“123”,同時去除“強(qiáng)制實施密碼策略”和“用戶在下次登錄時必須更改密碼”選項;最后為賬戶選擇默認(rèn)數(shù)據(jù)庫“chap2”。圖 2-4 “登錄名 -新建”對話框“常規(guī)”選項卡( 3)服務(wù)器角色節(jié)點不予配置。有關(guān)SQL Server 服務(wù)器角色請參考相關(guān)資料,此處不再詳細(xì)介紹。( 4)在對話框左側(cè)選項卡中選擇“用戶映射”節(jié)點,如圖2-5 所示,在“映射到此登錄名的用戶”列表中,勾選此前創(chuàng)建好的數(shù)據(jù)庫“ chap2”,在窗體右下方的“數(shù)據(jù)庫角色成員身份”框里選擇“ db_Owner ”,即數(shù)據(jù)庫擁有者。圖 2-5 “登錄名 -新建”對話框“用戶映射”選項卡( 5)安全對象節(jié)點一般不予
8、配置。( 6)在對話框左側(cè)選項卡中選擇“狀態(tài)”節(jié)點,如圖2-6 所示,將“是否允許連接到數(shù)據(jù)庫引擎”選項設(shè)為“授予” ,同時將“登錄”選項設(shè)為“啟用” 。以上各節(jié)點配置完成后單擊【確定】按鈕,即完成了對賬戶的創(chuàng)建工作。圖 2-6“登錄名 -新建”對話框“狀態(tài)配置”選項卡( 7)新建賬戶完成后,重新連接 SQL Server ,如圖 2-7 所示,選擇 SQL Server 身份驗證方式,輸入前面設(shè)置的登錄名“ zd”及密碼“ 123”,點擊【連接】按鈕,即可完成登錄。登錄成功后在對象資源管理器中可看到服務(wù)器實例名后面顯示的登錄用戶名,如圖2-8 所示。圖 2-7“連接到服務(wù)器”對話框圖 2-8
9、對象資源管理器2.2 使用 ADO.NET 訪問數(shù)據(jù)庫2.2.1連接數(shù)據(jù)庫在對數(shù)據(jù)源進(jìn)行操作之前,首先需建立到數(shù)據(jù)源的連接,可使用Connection 對象顯式創(chuàng)建到數(shù)據(jù)源的連接?!纠?2-1】 設(shè)計一個 Windows 應(yīng)用程序, 能通過 “ Windows 驗證“和“ Windows 和 SQL Server 混合驗證”兩種方式建立到數(shù)據(jù)庫的連接。圖 2-9“連接數(shù)據(jù)庫”窗體控件 Tab 順序?qū)崿F(xiàn)過程如下。( 1)新建一 Windows 應(yīng)用程序,命名為connection ,將創(chuàng)建的默認(rèn)窗體名更名為frmConnect ,窗體的 Text 屬性設(shè)置為“連接數(shù)據(jù)庫” ,界面設(shè)計如圖2-9
10、所示。 frmConnect窗體中的主要控件,按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ù)例題不再逐一說明。 由于篇幅所
11、限,本節(jié)中所有例題的異常捕獲代碼都省略了,讀者需自行添加獲取控件輸入及訪問數(shù)據(jù)庫等處的異常捕獲代碼。雙擊【 Windows 驗證】按鈕,進(jìn)入其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);/
12、創(chuàng)建連接對象conn.Open();/ 打開連接/如連接成功則彈出消息框提示MessageBox.Show(" 數(shù)據(jù)庫已通過集成驗證方式連接成功", " 連接狀態(tài)對話框");conn.Close();/使用完畢后關(guān)閉數(shù)據(jù)庫連接雙擊【混合驗證】按鈕,進(jìn)入其Click 事件處理函數(shù),填寫代碼如下。/SQL Server + Windows 方式連接數(shù)據(jù)庫private void btnConnect2_Click(object sender, EventArgs e)string strConn = "server=XP-4.;database=c
13、hap2;uid=zd;pwd=123"/ 連接字符串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ù)庫服務(wù)器名稱,database屬性指定數(shù)據(jù)庫名稱, 使用 Windows 身份驗證方式只需要給出 ser
14、ver 和 database兩個屬性的值,并使用“ integrated security=true ”指定身份驗證方式為 Windows 驗證;當(dāng)使用混合驗證時則需要使用uid 屬性指定數(shù)據(jù)庫賬戶、pwd 屬性指定該賬號的密碼。說明:上例中的連接字符串中的用戶名“ zd”和密碼 “ 123”,是以本節(jié) “添加登錄賬戶”的方式創(chuàng)建的,讀者可自行修改為自己計算機(jī)的SQLServer 登錄名及密碼。運(yùn)行程序,分別單擊【W(wǎng)indows 驗證】和【混合驗證】兩個按鈕,如連接成功,將分別彈出不同的連接狀態(tài)對話框,如圖2-10 所示。圖 2-10連接狀態(tài)對話框2.2.2對數(shù)據(jù)庫進(jìn)行添加、修改及刪除操作在創(chuàng)
15、建好到數(shù)據(jù)庫的連接之后,可以使用Command 對象對數(shù)據(jù)庫進(jìn)行更新操作?!纠?2-2】設(shè)計一個Windows 應(yīng)用程序,能實現(xiàn)對數(shù)據(jù)庫表的添加、修改及刪除操作。實現(xiàn)過程:( 1)新建一Windows應(yīng)用程序,命名為operateData,將創(chuàng)建的默認(rèn)窗體名更名為frmCommand ,窗體的Text 屬性設(shè)置為“對數(shù)據(jù)庫執(zhí)行添加、修改及刪除操作”如圖 2-11 所示。 frmCommand 窗體中的主要控件,按Tab 鍵順序,描述如表,界面設(shè)計2-4 所示。圖 2-11“對數(shù)據(jù)庫進(jìn)行添加、修改及刪除操作”窗體Tab 順序視圖表 2-4“對數(shù)據(jù)庫執(zhí)行添加、修改及刪除操作”窗體控件及說明Tab
16、順序主要屬性控件類型控件名稱說 明屬性名屬性值0btnInsert向數(shù)據(jù)庫表添加一條記錄Text添加1ButtonbtnUpdate修改數(shù)據(jù)庫表中的記錄Text修改2btnDelete刪除數(shù)據(jù)庫表中的記錄Text刪除( 2)主要程序代碼 雙擊【添加】按鈕,進(jìn)入其Click 事件處理函數(shù),代碼如下。/【添加】按鈕單擊事件處理函數(shù)private void btnInsert_Click(object sender, EventArgs e)string strConn = "server=XP-4;database=chap2;integrated security=true"
17、/連接字符串SqlConnection conn = new SqlConnection(strConn); /聲明并創(chuàng)建連接對象 conn.Open(); /打開數(shù)據(jù)庫連接/向商品表插入一條新記錄string strSql="insert into Products values('0012',' 雙層蒸鍋 ','蘇泊爾集團(tuán) ','廚具 ',129.9,100,'false')" SqlCommand comm = new SqlCommand(strSql, conn); /聲明并創(chuàng)建命令對
18、象int row = comm.ExecuteNonQuery(); / 執(zhí)行 SQL 語句,并獲取受影響的行數(shù) if (row > 0) /如果記錄插入成功,則彈出消息框提示 MessageBox.Show(" 插入數(shù)據(jù)成功 ", " 操作狀態(tài)對話框");conn.Close();/ 關(guān)閉數(shù)據(jù)庫連接 雙擊【修改】按鈕,進(jìn)入其Click 事件處理函數(shù),代碼如下。/【修改】按鈕單擊事件處理函數(shù)private void btnUpdate_Click(object sender, EventArgs e)string strConn = "s
19、erver=XP-4;database=chap2;integrated security=true" SqlConnection conn = new SqlConnection(strConn);conn.Open();/修改商品表中的一條記錄string strSql = "update Products set UnitsInStock=500 where ProductID='0012'" SqlCommand comm = new SqlCommand(strSql, conn); int row = comm.ExecuteNonQu
20、ery();if (row > 0)MessageBox.Show(" 修改數(shù)據(jù)成功 ", " 操作狀態(tài)對話框");conn.Close(); 雙擊【刪除】按鈕,進(jìn)入其Click 事件處理函數(shù),代碼如下。/【刪除】按鈕單擊事件處理函數(shù)private void btnDelete_Click(object sender, EventArgs e)string strConn = "server=XP-4;database=chap2;integrated security=true" SqlConnection conn = ne
21、w SqlConnection(strConn); conn.Open();/刪除商品表中的一條記錄string strSql = "delete from Products where ProductID='0012'"SqlCommand comm = new SqlCommand(strSql, conn);int row = comm.ExecuteNonQuery();if (row > 0)MessageBox.Show(" 刪除數(shù)據(jù)成功 ", " 操作狀態(tài)對話框");conn.Close();運(yùn)行程
22、序,分別單擊【添加】、【修改】和【刪除】按鈕,如操作成功,將分別彈出不同的操作狀態(tài)對話框, 如圖 2-12 所示。對于數(shù)據(jù)庫記錄的修改情況, 讀者可同時從 SQL Server 管理控制臺訪問數(shù)據(jù)庫 chap2 的 Products 表進(jìn)行驗證。圖 2-12操作狀態(tài)對話框2.2.3查詢數(shù)據(jù)庫中的數(shù)據(jù)【例 2-3】設(shè)計一個Windows 應(yīng)用程序,使用DataReader 查詢數(shù)據(jù)庫中的信息并加載到 ComboBox 控件的選項中。實現(xiàn)過程:( 1)新建一 Windows 應(yīng)用程序,命名為 testDataReader,將創(chuàng)建的默認(rèn)窗體名更名為frmProducts ,窗體的 Text 屬性設(shè)置
23、為 “商品類別及名稱” ,界面設(shè)計如圖 2-13 所示。frmProducts窗體中的主要控件,按 Tab 鍵順序,描述如表 2-5 所示。圖 2-13 “商品類別及名稱”窗體 Tab 鍵順序視圖表 2-5 “商品類別及名稱”窗體控件及說明Tab 順序主要屬性控件類型控件名稱說 明屬性名屬性值0ComboBoxcomboCategory所有商品類別名稱DropDownStyleDropDownList1comboProducts某商品類別下的商品名稱DropDownStyleDropDownList說明: 界面中不參與編程的Label 控件不再進(jìn)行說明,以下各例題均同樣處理。( 2)主要程序代
24、碼 雙擊窗體標(biāo)題欄,進(jìn)入 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)建連接對象conn.Open()
25、;/打開數(shù)據(jù)庫連接string strSql = "select distinct CategoryName from Products"SqlCommand comm = new SqlCommand(strSql, conn);SqlDataReader dr = comm.ExecuteReader();while (dr.Read()comboCategory.Items.Add(dr0);/ 依次加載數(shù)據(jù)項至dr.Close();conn.Close();/查詢ComboBox 雙擊商品類別下拉框,進(jìn)入其SelectedIndexChanged 事件處理函數(shù),根據(jù)
26、其選項為“商品名稱”下拉框加載數(shù)據(jù),代碼如下。/“商品類別”下拉框選項索引變化事件處理函數(shù),/根據(jù)商品類別下拉框中的選項加載該類別下的所有的商品名稱private void comboCategory_SelectedIndexChanged(object sender, EventArgs e)comboProducts.Items.Clear();string strConn = "server=XP-4;database=chap2;integrated security=true" SqlConnection conn = new SqlConnection(str
27、Conn); conn.Open();string strSql = "select ProductName from Products where CategoryName='"+comboCategory.Text+"'" SqlCommand comm = new SqlCommand(strSql, conn);SqlDataReader dr = comm.ExecuteReader();while (dr.Read()comboProducts.Items.Add(dr0);dr.Close();conn.Close();【例
28、 2-4】 使用 DataAdaper 和 DataSet 對象查詢數(shù)據(jù)庫中的信息并加載到ComboBox控件的選項中。實現(xiàn)過程:( 1 )新建一Windows應(yīng)用程序,命名為dataSet,將創(chuàng)建的默認(rèn)窗體名更名為frmProducts ,窗體及各主要控件的屬性設(shè)置同例2-3。( 2)主要程序代碼 雙擊窗體標(biāo)題欄,進(jìn)入其 Load 事件處理函數(shù),訪問數(shù)據(jù)庫,為“商品類別”下拉框加載數(shù)據(jù),代碼如下。/窗體加載事件處理函數(shù),為“商品類別”組合框加載所有的商品分類數(shù)據(jù)。private void frmProducts_Load(object sender, EventArgs e)string s
29、trConn = "server=XP-4;database=chap2;integrated security=true" / 連接字符串SqlConnection conn = new SqlConnection(strConn);/聲明并創(chuàng)建連接對象string strSql = "select distinct CategoryName from Products" /查詢不重復(fù)的商品類別名稱 SqlDataAdapter da = new SqlDataAdapter(strSql, conn); / 聲明并創(chuàng)建數(shù)據(jù)適配器對象 DataSet
30、ds = new DataSet(); /聲明并創(chuàng)建數(shù)據(jù)集對象da.Fill(ds);/使用數(shù)據(jù)適配器填充數(shù)據(jù)集comboCatagory.DataSource = ds.Tables0;/設(shè)置商品類別下拉框數(shù)據(jù)源comboCatagory.DisplayMember = "CategoryName"/設(shè)置商品類別下拉框的顯示屬性 雙擊“商品類別”下拉框,進(jìn)入其 SelectedIndexChanged 事件處理函數(shù),根據(jù)其選中項為“商品名稱”下拉框加載數(shù)據(jù),代碼如下。/“商品類別”下拉框選項索引變化事件處理函數(shù),/根據(jù)商品類別下拉框中的選項加載該類別下的所有的商品名稱pr
31、ivate void comboCatagory_SelectedIndexChanged(object sender, EventArgs e)string strConn = "server=XP-4;database=chap2;integrated security=true" SqlConnection conn = new SqlConnection(strConn);/根據(jù)“商品類別”下拉框中的選項查詢商品名稱string strSql="select ProductName from Products where CategoryName='
32、;"+comboCategory.Text+"'" SqlDataAdapter da = new SqlDataAdapter(strSql, conn);DataSet ds = new DataSet();da.Fill(ds);comboProducts.DataSource = ds.Tables0; / 設(shè)置商品名稱下拉框的數(shù)據(jù)源 comboProducts.DisplayMember = "ProductName" / 設(shè)置商品名稱下拉框的顯示屬性思考:細(xì)心的同學(xué)會發(fā)現(xiàn),例 2-3 和例 2-4 雖然運(yùn)行界面完全相同,但是
33、窗體加載之后列表框中選項的情況是有區(qū)別的。那么,區(qū)別在哪呢?原因又是什么呢?2.2.4數(shù)據(jù)綁定控件【例 2-5】 設(shè)計一個Windows 應(yīng)用程序,能實現(xiàn)商品信息的維護(hù)。本例題中,程序要讀取數(shù)據(jù)庫中的數(shù)據(jù),加載數(shù)據(jù)至ListBox 和 ComboBox 控件,并根據(jù)用戶在ListBox 控件中選擇的數(shù)據(jù)項再次訪問數(shù)據(jù)庫,獲取相關(guān)記錄。另外,本例題還實現(xiàn)了對商品表Products的增加、修改及刪除操作。圖 2-14“商品信息管理”窗體 Tab 鍵順序視圖實現(xiàn)過程:( 1)新建一 Windows 應(yīng)用程序,命名為products,將創(chuàng)建的默認(rèn)窗體名更名為frmProducts ,窗體的 Text
34、屬性設(shè)置為 “商品信息管理” ,界面設(shè)計如圖2-14 所示。frmProducts窗體中的主要控件,按Tab 鍵順序,描述如表2-6 所示。表 2-6“商品信息管理”窗體控件及說明Tab 順序主要屬性控件類型控件名稱說 明屬性名屬性值0txtID輸入和顯示商品編號ReadonlyTrue1TextBoxtxtName輸入和顯示商品名稱ReadonlyTrue2txtSupplier輸入和顯示供應(yīng)商名稱ReadonlyTrue3ComboBoxcomboCategory輸入和顯示商品類別EnabledFalse4TextBoxtxtUnitPrice輸入和顯示商品單價ReadonlyTrue5t
35、xtUnitsInStock輸入和顯示庫存數(shù)量ReadonlyTrue6CheckBoxchkDisc輸入和顯示是否打折EnabledFalse7btnInsert添加商品EnabledTrue8btnUpdate修改商品EnabledTrue9ButtonbtnSave保存數(shù)據(jù)EnabledFalse10btnCancle取消編輯EnabledFalse11btnDelete刪除數(shù)據(jù)EnabledTrue12ListBoxlstProducts商品名稱列表EnabledTrue( 2)主要程序代碼 首先要為該程序添加兩個成員變量,代碼如下:string strConn = "ser
36、ver=XP-4;database=chap2;integrated security=true"/連接字符串string insertORupdate = ""/標(biāo)識變量,用來記錄要保存的是添加還是修改操作 自定義方法DataLoad() ,訪問數(shù)據(jù)庫,加載商品類別列表及商品名稱列表,代碼如下。/ <summary>/ 訪問數(shù)據(jù)庫,加載商品類別列表及商品名稱列表/ </summary>void DataLoad()/ 以下代碼使用 DataReader 訪問數(shù)據(jù)庫SqlConnection conn = new SqlConnection
37、(strConn);/創(chuàng)建連接對象conn.Open();/打開連接string strSql = "select distinct CategoryName from Products"/ 查詢不重復(fù)的商品類別名SqlCommand comm = new SqlCommand(strSql, conn);/ 聲明并創(chuàng)建命令對象SqlDataReader dr = comm.ExecuteReader();/執(zhí)行查詢,用DataReader 存放數(shù)據(jù)while (dr.Read()/ 如果查詢到數(shù)據(jù)comboCategory.Items.Add(dr0);/ 逐項加載商品類
38、別名至ComboBoxdr.Close();/關(guān)閉dataReader/ 以下代碼使用DataAdapter 和 DataSet 訪問數(shù)據(jù)庫strSql = "select ProductName,ProductID 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ù)集lstProducts.DataSource = ds.Ta
39、bles0;/設(shè)置商品名稱列表的數(shù)據(jù)源lstProducts.DisplayMember = "ProductName"/設(shè)置顯示值屬性lstProducts.ValueMember = "ProductID"/設(shè)置實際值屬性conn.Close();/關(guān)閉連接lstProducts.SelectedIndex = -1;/使商品名稱列表沒有選中項商品管理窗體的Load事件處理函數(shù),就是調(diào)用DataLoad() 方法,代碼如下。/窗體加載事件處理函數(shù)private void frmProducts _Load(object sender, EventAr
40、gs e)DataLoad(); 聲明自定義方法 controlEnabled() ,控制各輸入控件在“查看”和“編輯”操作時的可用性,代碼如下。/自定義方法,控制控件的可用性,將控件可用性分為“查看 ”和“編輯 ”兩種狀態(tài)public void controlEnabled(string status)if (status = "show")/ 當(dāng)前為查看數(shù)據(jù)狀態(tài),控件都不可編輯btnInsert.Enabled = true;btnUpdate.Enabled = true;btnSave.Enabled = false;btnCancle.Enabled = fals
41、e;btnDelete.Enabled = true;chkDisc.Enabled = false;comboCategory.Enabled = false;foreach (Control c in this.Controls)if (c is TextBox)TextBox txtb = (TextBox)c);txtb.ReadOnly = true;else/當(dāng)前為編輯數(shù)據(jù)狀態(tài),控件可用btnInsert.Enabled = false;btnUpdate.Enabled = false;btnSave.Enabled = true;btnCancle.Enabled = true
42、;btnDelete.Enabled = false;chkDisc.Enabled = true;comboCategory.Enabled = true;foreach (Control c in this.Controls)if (c is TextBox)TextBox txtb = (TextBox)c);txtb.ReadOnly = false; 雙擊 lstProducts 控件 ,進(jìn)入其選項索引變化事件處理函數(shù),根據(jù)選擇的商品,查詢該商品其他信息,并為界面其他控件賦值,代碼如下。/商品名稱列表選項索引變化事件,根據(jù)選擇的商品名稱加載商品其他信息private void lst
43、Products_SelectedIndexChanged(object sender, EventArgs e)/用來判斷用戶是否選中了有效的選項,且保證是數(shù)據(jù)加載后用戶進(jìn)行的操作if (lstProducts.SelectedIndex != -1)&&(lstProducts.SelectedValue.ToString()!="System.Data.DataRowView")string proId = lstProducts.SelectedValue.ToString();/獲取當(dāng)前選中商品的商品編號SqlConnection conn=new
44、 SqlConnection(strConn);/ 聲明并創(chuàng)建連接對象conn.Open();/ 打開數(shù)據(jù)庫連接string strSql="select * from Products where ProductId='"+proId+"'"/ 由商品編號查詢該商品其他信息SqlCommand comm=new SqlCommand(strSql,conn);/ 聲明并創(chuàng)建命令對象SqlDataReader dr = comm.ExecuteReader();/使用 DataReader獲取查詢結(jié)果if (dr.Read()/如果查詢到
45、數(shù)據(jù),就將該商品各字段的值賦予窗體各控件用以顯示txtID.Text = dr"ProductID".ToString();txtName.Text=dr"ProductName".ToString();txtSupplier.Text=dr"SupplierName".ToString();comboCategory.Text = dr"CategoryName".ToString();txtUnitPrice.Text=dr"UnitPrice".ToString();txtUnitsInS
46、tock.Text=dr"UnitsInStock".ToString();chkDisc.Checked = (dr"Discount".ToString()="True"?true:false;dr.Close();/關(guān)閉 DataReaderconn.Close();/關(guān)閉連接/打開數(shù)據(jù)庫連接controlEnabled("show");/將控件設(shè)置為查看狀態(tài)說明: 由于為 ListBox 控件加載選項時會觸發(fā)SelectedIndexChanged 事件,此時獲取到的 ListBox.SelectedVal
47、ue.ToString() 值為“ System.Data.DataRowView ”,而不是經(jīng)用戶選擇過的商品編號,程序需過濾掉這種情況。只有完成ListBox 控件的選項加載后,經(jīng)用戶選擇某條商品數(shù)據(jù)時,程序才進(jìn)行后續(xù)操作,如下代碼即可實現(xiàn)這種過濾功能。if (lstProducts.SelectedIndex != -1)&&(lstProducts.SelectedValue.ToString()!="System.Data.DataRowView") 雙擊 btnInsert 按鈕,進(jìn)入其Click 事件處理函數(shù),清空所有輸入控件并使其為可編輯狀態(tài)
48、,設(shè)置編輯狀態(tài)為insert,真正的插入操作在btnSave 的 Click 事件處理函數(shù)中進(jìn)行。代碼如下。/【添加】按鈕單擊事件處理函數(shù)private void btnInsert_Click(object sender, EventArgs e)insertORupdate = "insert"/設(shè)置標(biāo)識變量為添加操作controlEnabled("edit");/將控件設(shè)置為編輯狀態(tài)/清空所有控件foreach (Control c in this.Controls)if (c is TextBox)TextBox txtb = (TextBox)
49、c);txtb.Text = ""comboCategory.SelectedIndex = -1;chkDisc.Checked = false; 雙擊 btnUpdate 按鈕,進(jìn)入其Click 事件處理函數(shù),使各輸入控件為可編輯狀態(tài),設(shè)置編輯狀態(tài)為update,真正的修改操作在btnSave 的 Click 事件處理函數(shù)中進(jìn)行。代碼如下。/ 【修改】按鈕單擊事件處理函數(shù)private void btnUpdate_Click(object sender, EventArgs e)controlEnabled("edit");txtID.ReadOnly = true;/商品編號不能修改insertORupdate = "update"/ 設(shè)置標(biāo)志變量為修改操作 雙擊 btnSave 按鈕,進(jìn)入
溫馨提示
- 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
- 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
- 5. 人人文庫網(wǎng)僅提供信息存儲空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負(fù)責(zé)。
- 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時也不承擔(dān)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 2025年度建筑工程合同保險理賠流程與處理規(guī)范
- 2025年度智能建筑項目施工合同范本
- 2025年度建筑勞務(wù)派遣與施工現(xiàn)場管理三方合同大全
- 達(dá)州2024年四川達(dá)州萬源市衛(wèi)生健康局定向醫(yī)學(xué)專科生引進(jìn)10人筆試歷年參考題庫附帶答案詳解
- 甘肅2025年甘肅省中醫(yī)院招聘32人筆試歷年參考題庫附帶答案詳解
- 湖州浙江湖州長興縣機(jī)關(guān)事務(wù)管理服務(wù)中心招聘編外工作人員筆試歷年參考題庫附帶答案詳解
- 河北2025年河北省氣象部門招聘應(yīng)屆畢業(yè)生2人筆試歷年參考題庫附帶答案詳解
- 昆明2025年中國地質(zhì)調(diào)查局昆明自然資源綜合調(diào)查中心招聘10人(第一批)筆試歷年參考題庫附帶答案詳解
- 成都四川成都市衛(wèi)生健康委員會所屬6家事業(yè)單位招聘高層次人才109人筆試歷年參考題庫附帶答案詳解
- 廣西2025年廣西血液中心招聘4人筆試歷年參考題庫附帶答案詳解
- 統(tǒng)編版小學(xué)語文五年級下冊第四單元解讀與大單元設(shè)計思路
- 貓狗創(chuàng)業(yè)計劃書
- 復(fù)產(chǎn)復(fù)工試題含答案
- 部編版語文三年級下冊第六單元大單元整體作業(yè)設(shè)計
- 售后服務(wù)經(jīng)理的競聘演講
- 臨床醫(yī)技科室年度運(yùn)營發(fā)展報告
- 慢加急性肝衰竭護(hù)理查房課件
- 文件丟失應(yīng)急預(yù)案
- 從建設(shè)和諧社會角度思考治超限載(十)
- 幼兒園小班開學(xué)家長會課件
- 云南華葉投資公司2023年高校畢業(yè)生招聘1人筆試參考題庫(共500題)答案詳解版
評論
0/150
提交評論