任務(wù)2.8 商品信息查詢界面功能設(shè)計(jì)
制作人:第二組 徐黎明
1.任務(wù)介紹
基于智慧社區(qū)開發(fā)的智慧商超系統(tǒng)
在智慧社區(qū)商超管理系統(tǒng)中,后臺(tái)管理人員查詢系統(tǒng)已有商品信息,然后對(duì)某條信息進(jìn)行相應(yīng)操作(如:修改或者刪除)。查詢信息也是信息管理系統(tǒng)的一項(xiàng)基礎(chǔ)功能。
2.任務(wù)目標(biāo)
1.進(jìn)一步認(rèn)識(shí)ADO .NET;
2.了解C#實(shí)現(xiàn)數(shù)據(jù)庫(kù)數(shù)據(jù)查詢、修改、刪除、的過程;
3.了解C#數(shù)據(jù)庫(kù)編程中DataGridView控件的使用方法。
3.任務(wù)實(shí)施
3.1.1搭建商超管理系統(tǒng)數(shù)據(jù)庫(kù)SuperMarketSales
在數(shù)據(jù)庫(kù)服務(wù)器上,新建SuperMarketSales數(shù)據(jù)庫(kù),并導(dǎo)入SuperMarketSales.sql腳本。
3.1.2設(shè)計(jì)并制作商品信息查詢界面
(1)設(shè)計(jì)并制作商品信息查詢界面;
(2)規(guī)劃商品信息查詢界面在整個(gè)系統(tǒng)中進(jìn)入的路徑。
3.1.3實(shí)現(xiàn)步驟
- 導(dǎo)入命名空間;
- 定義數(shù)據(jù)庫(kù)連接字符串,創(chuàng)建Connection對(duì)象;
- 打開連接;
- 利用DataAdapter對(duì)象,建立與數(shù)據(jù)庫(kù)的連接橋;
- 通過DataAdapter橋,將查詢結(jié)果存儲(chǔ)到DataSet對(duì)象中;
- DataGridView控件綁定DataSet,將查詢結(jié)果顯示出來;
- 關(guān)閉連接。
3.1.4查詢代碼
// 連接字符串,注意與實(shí)際環(huán)境保持一致
String connStr = ConfigurationManager.ConnectionStrings["SuperMarketSales"].ConnectionString;
SqlConnection sqlConn = new SqlConnection(connStr);
try
{
// 連接數(shù)據(jù)庫(kù)
sqlConn.Open();
// 構(gòu)造命令
String sqlStr = "select * from GOODS where 1=1 ";
// 添加查詢條件
if (!this.tb_Id.Text.Trim().Equals("")){
sqlStr += " and ID='" + this.tb_Id.Text.Trim() + "'";
}
if (!this.tb_Name.Text.Trim().Equals("")){
sqlStr += " and NAME like '%" + this.tb_Name.Text.Trim() + "%'";
}
SqlCommand cmd = new SqlCommand(sqlStr, sqlConn);
// 將該查詢過程綁定到DataAdapter
SqlDataAdapter adp = new SqlDataAdapter();
adp.SelectCommand = cmd;
// 將DataSet和DataAdapter綁定
DataSet ds = new DataSet();
// 自定義一個(gè)表(MyGoods)來標(biāo)識(shí)數(shù)據(jù)庫(kù)的GOODS表
adp.Fill(ds, "MyGoods");
// 指定DataGridView的數(shù)據(jù)源為DataSet的MyGoods表
this.dgv_Goods.DataSource = ds.Tables["MyGoods"];
// DataGridView數(shù)據(jù)綁定
}
catch (Exception exp)
{
MessageBox.Show("訪問數(shù)據(jù)庫(kù)錯(cuò)誤:" + exp.Message);
}
finally
{
sqlConn.Close();
}
代碼實(shí)現(xiàn)了商品的查詢、數(shù)據(jù)庫(kù)連接 ;
首先構(gòu)造查詢語(yǔ)句;添加相應(yīng)的條件。
然后將該查詢過程綁定到DataAdapter 即將DataSet和DataAdapter綁定;
最后自定義一個(gè)表(MyGoods)來標(biāo)識(shí)數(shù)據(jù)庫(kù)的GOODS表 、指定DataGridView的數(shù)據(jù)源為DataSet的MyGoods表;
3.1.5查詢效果演示

3. 編碼實(shí)現(xiàn)商品信息修改功能
(1)窗口加載后,顯示商品信息,運(yùn)用ADO.NET實(shí)現(xiàn)數(shù)據(jù)庫(kù)查詢;
(2)點(diǎn)擊修改后,修改商品信息,運(yùn)用ADO.NET實(shí)現(xiàn)數(shù)據(jù)庫(kù)修改。
實(shí)現(xiàn)步驟
ADO.NET查詢
- 導(dǎo)入命名空間;
- 定義數(shù)據(jù)庫(kù)連接字符串,創(chuàng)建Connection對(duì)象 ;
- 打開連接;
- 利用Command對(duì)象的ExecuteReader()方法執(zhí)行Select查詢語(yǔ)句;
- 利用ExecuteReader()方法返回的DataReader對(duì)象讀取數(shù)據(jù),顯示到界面上;
- 關(guān)閉連接。
ADO.NET插入/更新/刪除
- 導(dǎo)入命名空間;
- 定義數(shù)據(jù)庫(kù)連接字符串,創(chuàng)建Connection對(duì)象;
- 打開連接;
- 利用Command對(duì)象的ExecuteNonQuery()方法執(zhí)行Insert/Update/Delete語(yǔ)句;
- 通過ExecuteNonQuery()方法返回值判斷是否修改成功,并在界面上提示;
- 關(guān)閉連接。
修改代碼
// 數(shù)據(jù)修改、刪除
private void dgv_Goods_CellContentClick(object sender, DataGridViewCellEventArgs e)
{
// 點(diǎn)擊修改鏈接
if (e.RowIndex != -1 && e.ColumnIndex == 0)
{
// 獲取所要修改關(guān)聯(lián)對(duì)象的主鍵
string goodsId = this.dgv_Goods["Id", e.RowIndex].Value.ToString();
ModifyForm modifyForm = new ModifyForm(goodsId);
modifyForm.Show();
}
else if (e.RowIndex != -1 && e.ColumnIndex == 1)
{
if (MessageBox.Show("確認(rèn)刪除?", "提示", MessageBoxButtons.OKCancel, MessageBoxIcon.Question) == DialogResult.OK)
{
// 獲取所要?jiǎng)h除關(guān)聯(lián)對(duì)象的主鍵
string goodsId = this.dgv_Goods["Id", e.RowIndex].Value.ToString();
// 連接字符串,注意與實(shí)際環(huán)境保持一致
String connStr = ConfigurationManager.ConnectionStrings["SuperMarketSales"].ConnectionString;
SqlConnection sqlConn = new SqlConnection(connStr);
try
{
// 連接數(shù)據(jù)庫(kù)
sqlConn.Open();
// 構(gòu)造命令
String sqlStr = "delete from GOODS where ID=@id";
SqlCommand cmd = new SqlCommand(sqlStr, sqlConn);
// SQL字符串參數(shù)賦值
cmd.Parameters.Add(new SqlParameter("@id", goodsId));
// 將命令發(fā)送給數(shù)據(jù)庫(kù)
int res = cmd.ExecuteNonQuery();
// 根據(jù)返回值判斷是否修改成功
if (res != 0)
{
MessageBox.Show("刪除成功");
}
else
{
MessageBox.Show("刪除失敗");
}
}
catch (Exception exp)
{
MessageBox.Show("訪問數(shù)據(jù)庫(kù)錯(cuò)誤:" + exp.Message);
}
finally
{
sqlConn.Close();
}
}
代碼實(shí)現(xiàn)了商品信息的修改
首先運(yùn)用ADO.NET實(shí)現(xiàn)數(shù)據(jù)庫(kù)查詢,窗口加載后,顯示商品信息
然后運(yùn)用ADO.NET實(shí)現(xiàn)數(shù)據(jù)庫(kù)修改,就可以點(diǎn)擊修改后,修改商品信息
最后運(yùn)用ADO.NET實(shí)現(xiàn)數(shù)據(jù)庫(kù)刪除,點(diǎn)擊刪除后,提示確認(rèn),確認(rèn)后刪除
修改效果演示

4.迭代過程(無供應(yīng)商/有供應(yīng)商)
在該服務(wù)器上,創(chuàng)建供應(yīng)商表

(1)填充ComboBox的下拉列表
(2)綁定ComboBox數(shù)據(jù)源
數(shù)據(jù)整體插入
程序?qū)崿F(xiàn)步驟:
1.連接數(shù)據(jù)庫(kù)
2.綁定數(shù)據(jù)源
3.構(gòu)造查詢命令
4.將該查詢過程綁定到DataAdapter
5.自定義一個(gè)表(MySupplier)來標(biāo)識(shí)數(shù)據(jù)庫(kù)的SUPPLIER表
6.指定ComboBox的數(shù)據(jù)源為DataSet的MySupplier表
(3)數(shù)據(jù)整體插入
程序?qū)崿F(xiàn)步驟:
1連接數(shù)據(jù)庫(kù)
2.SQL字符串參數(shù)賦值
3.將命令發(fā)送給數(shù)據(jù)庫(kù)
4.根據(jù)返回值判斷是否插入成功
5.數(shù)據(jù)庫(kù)表結(jié)構(gòu)
| 商品條碼 | 商品名稱 | 價(jià)格 | 供應(yīng)商代碼 | 商品規(guī)格 | 備注 |
|---|---|---|---|---|---|