《數(shù)據(jù)庫與信息系統(tǒng)》系統(tǒng)開發(fā)使用技術(shù)-1_第1頁
《數(shù)據(jù)庫與信息系統(tǒng)》系統(tǒng)開發(fā)使用技術(shù)-1_第2頁
《數(shù)據(jù)庫與信息系統(tǒng)》系統(tǒng)開發(fā)使用技術(shù)-1_第3頁
《數(shù)據(jù)庫與信息系統(tǒng)》系統(tǒng)開發(fā)使用技術(shù)-1_第4頁
《數(shù)據(jù)庫與信息系統(tǒng)》系統(tǒng)開發(fā)使用技術(shù)-1_第5頁
已閱讀5頁,還剩19頁未讀, 繼續(xù)免費閱讀

下載本文檔

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

文檔簡介

1、系統(tǒng)使用開發(fā)技術(shù)7目 錄視圖、存儲過程及事務(wù)應用7.1多頁面應用程序的實現(xiàn)7.2非關(guān)系型數(shù)據(jù)庫應用7.3目 錄視圖、存儲過程及事務(wù)應用7.1多頁面應用程序的實現(xiàn)7.2非關(guān)系型數(shù)據(jù)庫應用7.3視圖與存儲過程的應用視圖和存儲過程視圖和存儲過程是建立在數(shù)據(jù)庫中的可編程對象,是已經(jīng)編譯好的、可直接執(zhí)行的SQL語句段。簡化應用程序開發(fā)執(zhí)行效率高于客戶端發(fā)出的SQL命令避免在頁面文件中暴露SQL代碼,增強安全性提示:視圖的使用方法與基本表完全相同,只是不能對多源視圖進行更新操作。使用存儲過程時只需要說明MySqlCommand對象的CommandType屬性為StoredProcedure【例7.1】存儲

2、過程和視圖的使用編程實現(xiàn)成績錄入功能。在下拉列表中選擇課程號,將顯示學習該課程的所有學生信息;選擇某個學生,則在下部表格中顯示該學生的主要信息;輸入成績后單擊“確定”按鈕,可修改成績,單擊“取消”按鈕,將清空成績。 (1)設(shè)計頁面上部為下拉列表框中間是GridView1下部是一個Panel控件,拖放到合適大小標簽Label1顯示“輸入成績”表格布局,5行2列的表格左列:輸入對應文本右列:3個標簽(Label2、Label3、Label4)和1個文本框底部2個按鈕:“確定”、“取消”(2)在e_learning數(shù)據(jù)庫中建立存儲過程和視圖 CREATE PROCEDURE proc_coursec

3、ode()SELECT CourseCode FROM Course;存儲過程proc_coursename():從Course表查詢所有課程號,用來填充下拉列表框。 CREATE VIEW view_studentcourse AS SELECT student.StudentCode AS 學號, StudentName AS 姓名, course.CourseCode As 課程號, CourseName AS 課程名, Score AS 成績FROM student JOIN courseenroll ON student.StudentCode = courseenroll.Stud

4、entCodeJOIN course ON course.CourseCode = courseenroll.CourseCode;視圖view_studentcourse:查詢已選課程,信息來自三個表:Student、CourseEnroll、Course。 CREATE PROCEDURE proc_updatescore(stcode int, cscode char(4), sc float)UPDATE courseenroll - 以sc值修改成績SET Score=sc WHERE StudentCode=stcode AND CourseCode=cscode;存儲過程proc

5、_updatescore:根據(jù)學號和課程號修改學生成績,帶三個參數(shù) (3)程序的主要代碼/公共變量數(shù)據(jù)庫連接cn MySqlConnection cn = new MySqlConnection(server=localhost; database=e_learning; user id=root; password=1234);/頁面加載時,執(zhí)行存儲過程proc_coursecode為下拉列表框添加課程號protected void Page_Load(object sender, EventArgs e) if (!IsPostBack) /若是頁面首次加載執(zhí)行下面代碼,如因回傳消息加載則

6、不執(zhí)行 /創(chuàng)建MySqlCommand對象cmd并說明命令來自存儲過程proc_coursecode MySqlCommand cmd = new MySqlCommand(); cmd.Connection = cn; cmd.CommandType = CommandType.StoredProcedure; cmd.CommandText = proc_coursecode; /打開數(shù)據(jù)庫連接,執(zhí)行存儲過程獲得課程號 cn.Open(); MySqlDataReader rd= cmd.ExecuteReader(); /返回學號字段值 /將rd中課程號數(shù)據(jù)綁定到DropDownList

7、1 DropDownList1.DataSource = rd; /指定數(shù)據(jù)源rd DropDownList1.DataTextField = rd.GetName(0); /獲取rd第1字段名為下拉列表框提供值 DropDownList1.DataBind(); /與rd綁定 cn.Close(); /關(guān)閉數(shù)據(jù)庫連接 Panel1.Visible = false; /隱藏Panel1 (3)程序的主要代碼/從下拉列表框選課程號,查詢視圖view_StudentCourse獲得選課名單填充Gridview protected void DropDownList1_SelectedIndexCh

8、anged(object sender, EventArgs e) /創(chuàng)建MySqlDataAdapter對象,并說明訪問view_studentcourse的SQL命令 MySqlDataAdapter da =new MySqlDataAdapter(SELECT * FROM view_studentcourse WHERE 課程號=Sccode,cn); da.SelectCommand.Parameters.AddWithValue(Sccode, DropDownList1.SelectedValue); DataSet ds =new DataSet(); da.Fill(ds,

9、StCs); GridView1.DataSource = ds.TablesStCs; GridView1.DataBind(); Panel1.Visible = false; /隱藏Panel1 (3)程序的主要代碼/在GridView1中選擇某個學生,在下部表格中填充相關(guān)信息protected void GridView1_SelectedIndexChanged(object sender, EventArgs e) Panel1.Visible = true; GridViewRow row = GridView1.SelectedRow; Label2.Text = row.Ce

10、lls1.Text; Label3.Text = row.Cells2.Text; Label4.Text = row.Cells3.Text; if (row.Cells5.Text != ) /如果成績不為空 TextBox1.Text = row.Cells5.Text; else TextBox1.Text = ; (3)程序的主要代碼/ “確定”按鈕,執(zhí)行存儲過程proc_updatescore修改成績,并刷新GridView1 protected void Button1_Click(object sender, EventArgs e) /創(chuàng)建MySqlCommand對象cmd并

11、說明命令來自存儲過程proc_updatescore MySqlCommand cmd = new MySqlCommand(); cmd.Connection = cn; cmd.CommandType = CommandType.StoredProcedure; cmd.CommandText = proc_updatescore; cmd.Parameters.AddWithValue(stcode, Label2.Text); cmd.Parameters.AddWithValue(cscode, Label4.Text); cmd.Parameters.AddWithValue(sc

12、,TextBox1.Text); /打開數(shù)據(jù)庫連接,執(zhí)行存儲過程修改成績 cn.Open(); try cmd.ExecuteNonQuery(); catch (MySqlException ex) /捕獲try后的程序段執(zhí)行異常 Label1.Text = ex.Message; cn.Close(); /待續(xù)存儲過程的三個參數(shù)(3)程序的主要代碼/ “確定”按鈕,執(zhí)行存儲過程proc_updatescore修改成績,并刷新GridView1 . /接上頁 /從數(shù)據(jù)庫再次提取數(shù)據(jù)集,刷新GridView1顯示更新后的數(shù)據(jù) MySqlDataAdapter da = new MySqlDat

13、aAdapter(SELECT * FROM view_studentcourse WHERE 課程號=Sccode, cn); da.SelectCommand.Parameters.AddWithValue(Sccode, DropDownList1.SelectedValue); DataSet ds = new DataSet(); da.Fill(ds, StCs); GridView1.DataSource = ds.TablesStCs; GridView1.DataBind(); /“取消”按鈕,清空成績文本框 protected void Button2_Click(obje

14、ct sender, EventArgs e) TextBox1.Text = ; 視圖和存儲過程視圖和存儲過程是建立在數(shù)據(jù)庫中的可編程對象,是已經(jīng)編譯好的、可直接執(zhí)行的SQL語句段。簡化應用程序開發(fā)執(zhí)行效率高于客戶端發(fā)出的SQL命令避免在頁面文件中暴露SQL代碼,增強安全性提示:視圖的使用方法與基本表完全相同,只是不能對多源視圖進行更新操作。使用存儲過程時只需要說明MySqlCommand對象的CommandType屬性為StoredProcedureTHANK YOU!事務(wù)的應用事務(wù)將一組需要保證其原子性的數(shù)據(jù)庫操作定義為事務(wù)。當事務(wù)執(zhí)行完畢之后,它所包含的所有數(shù)據(jù)庫操作要么全部成功執(zhí)行被

15、提交,要么全部被取消。程序中使用Connection、Transaction和Command對象來控制事務(wù),一般操作步驟如下: 創(chuàng)建MySqlConnection對象,建立與數(shù)據(jù)庫的連接。 用MySqlConnection對象的BeginTransaction()方法創(chuàng)建一個Transaction對象,啟動事務(wù)。 創(chuàng)建MySqlCommand對象,Transaction屬性賦值為Transaction對象實例。 執(zhí)行事務(wù)的數(shù)據(jù)庫操作命令,調(diào)用Transaction對象的Commit()方法來提交事務(wù);如果捕獲異常,則調(diào)用Rollback()方法來取消事務(wù),即回滾對數(shù)據(jù)庫所做的修改。【例7.2】

16、事務(wù)的使用學生選課事務(wù)。在左側(cè)列表框中顯示全部課程,右側(cè)上方的下拉列表自動顯示學號;選擇學號后,在右側(cè)下方的列表框中顯示該學生已選課程;將學生選課的操作定義為一個事務(wù)。在左側(cè)選擇某門課程,單擊“選課”按鈕執(zhí)行事務(wù)完成選課將選課記錄添加到courseenroll表中將course表中的選課總?cè)藬?shù)StudentNum加1刷新兩個列表(1)設(shè)計頁面3*3表格布局左中GridView1,右上下拉列表框,右中GridView2,右下Label1,中間格放按鈕Button1 GridView1GridView2下拉列表框Label1Button1(2)程序的主要代碼(其他代碼見備注)/“選課”按鈕,使用事

17、務(wù)實現(xiàn)選課和修改選課總?cè)藬?shù)protected void Button1_Click(object sender, EventArgs e) cn.Open(); MySqlTransaction Trans = cn.BeginTransaction(); /創(chuàng)建名為Trans的Transaction對象 MySqlCommand cmd = new MySqlCommand(); cmd.Connection = cn; cmd.Transaction = Trans; /將Trans賦值給MySqlCommand對象的Transaction屬性 try /在courseenroll表中插入

18、一條選課記錄 cmd.CommandText = Insert Into courseenroll(StudentCode,CourseCode) Values(Stcode,Cscode); cmd.Parameters.AddWithValue(Stcode, DropDownList1.SelectedValue); cmd.Parameters.AddWithValue(Cscode, GridView1.SelectedRow.Cells1.Text); cmd.ExecuteNonQuery(); /修改course表的人數(shù) cmd.CommandText = Update cou

19、rse Set StudentNum=StudentNum+1 Where CourseCode=Cscode; cmd.ExecuteNonQuery(); /事務(wù)提交 Trans.Commit(); Label1.Text = GridView1.SelectedRow.Cells2.Text + 課程選課成功!; 將學生選課的操作定義為一個事務(wù)。在左側(cè)選擇某門課程,單擊“選課”按鈕執(zhí)行事務(wù)完成選課將選課記錄添加到courseenroll表中將course表中的選課總?cè)藬?shù)StudentNum加1刷新兩個列表(2)程序的主要代碼 catch (Exception ex) /捕捉異常 Tran

20、s.Rollback(); /回滾事務(wù) Label1.Text = ex.Message; finally cn.Close(); /刷新GridView1 MySqlDataAdapter da = new MySqlDataAdapter(SELECT CourseCode,CourseName,Credits, StudentNum FROM Course, cn); DataSet ds = new DataSet(); da.Fill(ds, Cs); GridView1.DataSource = ds.TablesCs; GridView1.DataBind(); /刷新GridV

21、iew2 da.SelectCommand.CommandText = SELECT * FROM view_studentcourse WHERE 學號=Stcode; da.SelectCommand.Parameters.AddWithValue(Stcode, DropDownList1.SelectedValue); da.Fill(ds, StCs); GridView2.DataSource = ds.TablesStCs; GridView2.DataBind(); 另一種實現(xiàn)方式:用存儲過程實現(xiàn)事務(wù)protected void Button2_Click(object sender, EventArgs e) MySqlCommand cmd = new MySqlCommand(); cmd.Connection = cn; cn.Open(); try /調(diào)用存儲過程proc_courseenroll() cmd.CommandType = CommandType.StoredProcedure; cmd.CommandText = proc_courseenroll; cmd.Parameters.AddWithValue(Stcode, DropDownList1.

溫馨提示

  • 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

提交評論