存儲過程:項目中使用存儲過程的一個實例


  項目中存儲過程的一個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;
    }

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM