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); } }