項目中存儲過程的一個C#例子,一個展示頁面需要顯示不同表(申請動態,相關資料,資料下載等)的信息;因為邏輯功能都一樣,sql語句都是select top(6) * from table;只是表面不同,邏輯功能一樣,就可以模仿面向對象語言的對象的方法模式,把查詢功能封裝一個存儲過程(方法),表明做參數。
這樣使用使用存儲過程不僅使對數據庫訪問操作更便捷,而且更安全,不易遭受sql注入攻擊。
下面是項目中的一個名為 sp_review_releaseInfo 的存儲過程,代碼如下:
ALTER PROCEDURE [dbo].[sp_review_releaseInfo]
@type varchar(50), @other varchar(200) AS BEGIN if(@type='release_dongtai') begin select top(6) info_title,info_id,release_date from review_releaseInfo where release_id='1' and is_state='啟用' order by release_date desc end if(@type='release_cailiao') begin select top(6) info_title,info_id,release_date from review_releaseInfo where release_id='2' and is_state='啟用' order by release_date desc end if(@type='release_upload') begin select top(6) true_name,info_id,file_url from View_relsase_upload where is_state='啟用' order by release_date desc end if(@type='release_upload_list') begin select info_title, true_name,filel_id,file_url,[file_name] from View_relsase_upload where info_id=@other order by release_date desc end if(@type='release_list') begin SELECT review_releaseInfo.info_id,review_releaseInfo.info_title,review_releaseInfo.is_state, review_releaseInfo.person_name,review_releaseInfo.release_date,review_releaseType.release_name FROM review_releaseInfo INNER JOIN review_releaseType ON review_releaseInfo.release_id = review_releaseType.release_id order by release_date desc end END
C#端的調用存儲過程的代碼,如下
protected void Bind_data() {//調用bind_data()函數,傳入不同欄目的參數 this.GridView1.DataKeyNames = new string[] { "info_id" }; GridView1.DataSource = bind_data("release_dongtai"); GridView1.DataBind(); this.GridView2.DataKeyNames = new string[] { "info_id" }; GridView2.DataSource = bind_data("release_cailiao"); GridView2.DataBind(); this.GridView3.DataKeyNames = new string[] { "info_id" }; GridView3.DataSource = bind_data("release_upload"); GridView3.DataBind(); } protected DataSet bind_data(string type) {//根據欄目參數type,利用存儲過程查詢數據庫,最后返回展示不同表的查詢信息 Con = new SqlConnection(ConnStr); if (Con.State != ConnectionState.Open) { Con.Open(); } ds.Clear(); cmd = new SqlCommand("[sp_review_releaseInfo]", Con); cmd.CommandType = CommandType.StoredProcedure; cmd.Parameters.AddWithValue("@type", type); cmd.Parameters.AddWithValue("@other", ""); cmd.ExecuteNonQuery(); da.SelectCommand = cmd; if (ds != null) { da.Fill(ds, "table"); } Con.Close(); return ds; }