c#調用存儲過程


http://www.cnblogs.com/zxtceq/p/5956808.html

存儲過程(Stored Procedure)即用來存儲數據表操作的一個過程,是把對數據表操作的方法存儲到一起的一個對象,是存儲在數據庫中。

優點:1.降低網絡傳輸數據量:通過存儲過程的名稱和參數傳遞即可調用執行,不用傳輸sql。

2.執行效率高:sqlserver會事先將存儲過程編譯成可執行的二進制代碼,運行存儲過程時,無需再次編譯。

3.封裝性:也可叫模塊式編程,將實現某種功能的多條sql封裝到一個對象中,可多次重復調用,可移植性強。

4.安全:可針對不同的權限的用戶使用不同的存儲過程。

下面講C#如何調用寫好的存儲過程,下面是對數據操作封裝幾個函數

//執行對表的增刪改操作的sql語句
public static int ExecuteCommand(string text)
        {
            using (SqlConnection conn = new SqlConnection(connectionString))
            {
                conn.Open();
                using (SqlCommand cmd = new SqlCommand(text, conn))
                {
                    int i = cmd.ExecuteNonQuery();
                    return i;
                }               
            }            
        }

public static int ExecStoredProcedure(string procName, params SqlParameter[] parameters)
        {
            int rtn = 0;
            using (SqlConnection conn = new SqlConnection(connectionString))
            {
                conn.Open();
                using (SqlCommand cmd = conn.CreateCommand())
                {                   
                    SqlTransaction st = conn.BeginTransaction();
                    cmd.Transaction = st;
                    try
                    {
                        cmd.CommandText = procName;
                        cmd.CommandType = CommandType.StoredProcedure;
                        cmd.Parameters.AddRange(parameters);
                        rtn= cmd.ExecuteNonQuery();
                        st.Commit();
                        return rtn;
                    }
                    catch(SqlException sqlex)
                    {
                        st.Rollback();
                        throw sqlex;
                    }                                       
                }
            }
        }
        public static int ExecuteStoredProcedure(string procName,
            params SqlParameter[] parameters)
        {
            using (SqlConnection conn = new SqlConnection(connectionString))
            {
                conn.Open();
                using (SqlCommand cmd = conn.CreateCommand())
                {
                    cmd.CommandText = procName;
                    cmd.CommandType = CommandType.StoredProcedure;
                    cmd.Parameters.AddRange(parameters);
                    return cmd.ExecuteNonQuery();
                }
            }
            
        }

推薦用第三種方式,用到了事務處理,若只要有一條不通過全部回滾,避免臟數據的產生。也可以在存儲過程中使用事務,后續會繼續更新...

protected void Button1_Click(object sender, EventArgs e)
    {
        string mainName = "圓夢組";
        string detailName="劉能|趙本山|沈燕|歐陽鋒";
        string detailAge="23|32|18|19";
        int rtn=DBHelper.ExecuteCommand(string.Format("exec dbo.Proc_TestBatchMainDetailIns '{0}','{1}','{2}'", mainName, detailName,detailAge));
    }
    protected void Button2_Click(object sender, EventArgs e)
    {
        string mainName = "起航組2";
        string detailName="段毅2|喬峰2|楊過2|李莫愁2";
        string detailAge="18|28|jj|35";
        SqlParameter[] sps = new SqlParameter[] { 
        new SqlParameter("@mainName",mainName),
            new SqlParameter("@detailNameStr",detailName),
             new SqlParameter("@detailAgeStr",detailAge)
        };
        try
        {           
            int rtn = DBHelper.ExecuteStoredProcedure("dbo.Proc_TestBatchMainDetailIns", sps);
        }
        catch (Exception ex)
        {
            Response.Write(ex.Message);
        }
        
    }
    protected void Button3_Click(object sender, EventArgs e)
    {
        string mainName = "起航組2";
        string detailName = "段毅2|喬峰2|楊過2|李莫愁2";
        string detailAge = "18|28|jj|35";
        SqlParameter[] sps = new SqlParameter[] { 
        new SqlParameter("@mainName",mainName),
            new SqlParameter("@detailNameStr",detailName),
             new SqlParameter("@detailAgeStr",detailAge)
        };
        try
        {
            int rtn = DBHelper.ExecStoredProcedure("dbo.Proc_TestBatchMainDetailIns", sps);
        }
        catch (Exception ex)
        {
            Response.Write(ex.Message);
        }
    }

protected void Button1_Click(object sender, EventArgs e)
    {
        string mainName = "圓夢組";
        string detailName="劉能|趙本山|沈燕|歐陽鋒";
        string detailAge="23|32|18|19";
        int rtn=DBHelper.ExecuteCommand(string.Format("exec dbo.Proc_TestBatchMainDetailIns '{0}','{1}','{2}'", mainName, detailName,detailAge));
    }
    protected void Button2_Click(object sender, EventArgs e)
    {
        string mainName = "起航組2";
        string detailName="段毅2|喬峰2|楊過2|李莫愁2";
        string detailAge="18|28|jj|35";
        SqlParameter[] sps = new SqlParameter[] { 
        new SqlParameter("@mainName",mainName),
            new SqlParameter("@detailNameStr",detailName),
             new SqlParameter("@detailAgeStr",detailAge)
        };
        try
        {           
            int rtn = DBHelper.ExecuteStoredProcedure("dbo.Proc_TestBatchMainDetailIns", sps);
        }
        catch (Exception ex)
        {
            Response.Write(ex.Message);
        }
        
    }
    protected void Button3_Click(object sender, EventArgs e)
    {
        string mainName = "起航組2";
        string detailName = "段毅2|喬峰2|楊過2|李莫愁2";
        string detailAge = "18|28|jj|35";
        SqlParameter[] sps = new SqlParameter[] { 
        new SqlParameter("@mainName",mainName),
            new SqlParameter("@detailNameStr",detailName),
             new SqlParameter("@detailAgeStr",detailAge)
        };
        try
        {
            int rtn = DBHelper.ExecStoredProcedure("dbo.Proc_TestBatchMainDetailIns", sps);
        }
        catch (Exception ex)
        {
            Response.Write(ex.Message);
        }
    }

 


免責聲明!

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



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