雖然調用存儲過程并不難實現,但是在程序中合理的組織代碼,能使得程序結構更加的明晰,也更加易于維護。
下面的示例將存儲過程的調用分為三部分:
1、為調用存儲過程準備各種數據:數據庫連接字符串、存儲過程參數
2、為執行命令準備參數,使用1中的各種數據,建立與數據庫的連接,為存儲過程的調用準備好參變量和設置變量
3、執行存儲過程,如查詢操作或更新操作
示例代碼如下:
?
using System; using System.Collections.Generic; using System.Linq; using System.Text; using System.Data; using System.Data.SqlClient; namespace 使用存儲過程 { class Program { //配置連接字符串 public static string ConnString = @"Data Source=Q-PC\SQLEXPRESS;Integrated Security=SSPI;uid=sa;pwd=;Initial Catalog=hangyun"; static void Main(string[] args) { Program p = new Program(); SqlParameter[] parms = new SqlParameter[] //為存儲過程配置參數 { new SqlParameter("@parms0",SqlDbType.NVarChar), new SqlParameter("@parms1",SqlDbType.NVarChar), . . . . }; //為參數賦值 parms[0].Value=需要傳入存儲過程中的值 parms[1].Value= parms[2].Value= . . . . p.ExcStoreNonQuery(CommandType.StoredProcedure, "QHC_DomesticCompanyManage", parms); Console.ReadLine(); } #region 存儲過程執行更新 ///<summary> ///執行一個不需要返回值的SqlCommand命令,通過指定專用的連接字符串。 /// 使用參數數組形式提供參數列表 /// </summary> /// <remarks> /// 使用示例: /// int result = ExcStoreNonQuery(connString, CommandType.StoredProcedure, "PublishOrders", new SqlParameter("@prodid", 24)); /// </remarks> /// <param name="connectionString">一個有效的數據庫連接字符串</param> /// <param name="commandType">SqlCommand命令類型 (存儲過程, T-SQL語句, 等等。)</param> /// <param name="commandText">存儲過程的名字或者 T-SQL 語句</param> /// <param name="commandParameters">以數組形式提供SqlCommand命令中用到的參數列表</param> /// <returns>返回一個數據值表示此SqlCommand命令執行后影響的行數</returns> public int ExcStoreNonQuery(string connString, CommandType cmdType, string cmdText, params SqlParameter[] commandParameters) { SqlCommand cmd = new SqlCommand(); SqlConnection conn = new SqlConnection(ConnString); try { //通過PrePareCommand方法將參數逐個傳入到SqlCommand的參數集合中 PrepareCommand(cmd, conn, null, cmdType, cmdText, commandParameters); int val = cmd.ExecuteNonQuery(); //清空SqlCommand中的參數列表 cmd.Parameters.Clear(); return val; } catch (Exception e) { throw new Exception("執行任務失敗:" + e.Message + " " + cmdText); } finally { cmd.Dispose(); conn.Close(); conn = null; } } #endregion #region 存儲過程執行查詢 /// <summary> /// 執行一條返回結果集的SqlCommand,通過一個已經存在的數據庫連接 /// 使用參數數組提供參數 /// </summary> /// <remarks> /// 使用示例: /// DataTable table=StoreGetTable(conn,CommandType.StoredProcedure,"PublishOrders"); /// </remarks> /// <param name="connecttionString">一個現有的數據庫連接</param> /// <param name="cmdTye">SqlCommand命令類型</param> /// <param name="cmdText">存儲過程的名字或者 T-SQL 語句</param> /// <returns>返回一個表(DataTable)表示查詢得到的數據集</returns> public DataTable StroreGetTable(CommandType cmdTye, string cmdText, params SqlParameter[] commandParameters) { SqlCommand cmd = new SqlCommand(); DataTable ds = new DataTable(); SqlConnection conn = new SqlConnection(ConnString); try { PrepareCommand(cmd, conn, null, cmdTye, cmdText, commandParameters); SqlDataAdapter adapter = new SqlDataAdapter(); adapter.SelectCommand = cmd; adapter.Fill(ds); //返回一個表集 return ds; } catch (Exception e) { throw new Exception("執行任務失敗:" + e.Message + " " + cmdText); } finally { cmd.Dispose(); conn.Close(); conn = null; } } #endregion #region 為執行命令準備參數 ///<summary> ///為執行命令準備參數 ///</summary> ///<param name="cmd">Sqlcommang命令</param> ///<param name="conn">已經存在的數據庫連接</param> ///<param name="trans">數據庫事物處理</param> ///<param name="cmdType">SqlCommand命令類型(存儲過程,T-Sql語句,等等。)</param> ///<param name="cmdText">Command text,T-Sql語句,例如:Select * from sufei</param> ///<param name="cmdParms">返回帶參數的命令</param> private static void PrepareCommand(SqlCommand cmd, SqlConnection conn, SqlTransaction trans, CommandType cmdType, string cmdText, SqlParameter[] cmdParms) { //判斷數據庫連接狀態 if (conn.State != ConnectionState.Open) conn.Open(); cmd.Connection = conn; cmd.CommandText = cmdText; //判斷是否需要事物處理 if (trans != null) { cmd.Transaction = trans; } cmd.CommandType = cmdType; if (cmdParms != null) { foreach (SqlParameter parm in cmdParms) cmd.Parameters.Add(parm); } } #endregion } }turnValue Output
?
?
更多文章、技術交流、商務合作、聯系博主
微信掃碼或搜索:z360901061

微信掃一掃加我為好友
QQ號聯系: 360901061
您的支持是博主寫作最大的動力,如果您喜歡我的文章,感覺我的文章對您有幫助,請用微信掃描下面二維碼支持博主2元、5元、10元、20元等您想捐的金額吧,狠狠點擊下面給點支持吧,站長非常感激您!手機微信長按不能支付解決辦法:請將微信支付二維碼保存到相冊,切換到微信,然后點擊微信右上角掃一掃功能,選擇支付二維碼完成支付。
【本文對您有幫助就好】元
