雖然調(diào)用存儲(chǔ)過(guò)程并不難實(shí)現(xiàn),但是在程序中合理的組織代碼,能使得程序結(jié)構(gòu)更加的明晰,也更加易于維護(hù)。
下面的示例將存儲(chǔ)過(guò)程的調(diào)用分為三部分:
1、為調(diào)用存儲(chǔ)過(guò)程準(zhǔn)備各種數(shù)據(jù):數(shù)據(jù)庫(kù)連接字符串、存儲(chǔ)過(guò)程參數(shù)
2、為執(zhí)行命令準(zhǔn)備參數(shù),使用1中的各種數(shù)據(jù),建立與數(shù)據(jù)庫(kù)的連接,為存儲(chǔ)過(guò)程的調(diào)用準(zhǔn)備好參變量和設(shè)置變量
3、執(zhí)行存儲(chǔ)過(guò)程,如查詢操作或更新操作
示例代碼如下:
?
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Data;
using System.Data.SqlClient;
namespace 使用存儲(chǔ)過(guò)程
{
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[] //為存儲(chǔ)過(guò)程配置參數(shù)
{
new SqlParameter("@parms0",SqlDbType.NVarChar),
new SqlParameter("@parms1",SqlDbType.NVarChar),
.
.
.
.
};
//為參數(shù)賦值
parms[0].Value=需要傳入存儲(chǔ)過(guò)程中的值
parms[1].Value=
parms[2].Value=
.
.
.
.
p.ExcStoreNonQuery(CommandType.StoredProcedure, "QHC_DomesticCompanyManage", parms);
Console.ReadLine();
}
#region 存儲(chǔ)過(guò)程執(zhí)行更新
///<summary>
///執(zhí)行一個(gè)不需要返回值的SqlCommand命令,通過(guò)指定專用的連接字符串。
/// 使用參數(shù)數(shù)組形式提供參數(shù)列表
/// </summary>
/// <remarks>
/// 使用示例:
/// int result = ExcStoreNonQuery(connString, CommandType.StoredProcedure, "PublishOrders", new SqlParameter("@prodid", 24));
/// </remarks>
/// <param name="connectionString">一個(gè)有效的數(shù)據(jù)庫(kù)連接字符串</param>
/// <param name="commandType">SqlCommand命令類型 (存儲(chǔ)過(guò)程, T-SQL語(yǔ)句, 等等。)</param>
/// <param name="commandText">存儲(chǔ)過(guò)程的名字或者 T-SQL 語(yǔ)句</param>
/// <param name="commandParameters">以數(shù)組形式提供SqlCommand命令中用到的參數(shù)列表</param>
/// <returns>返回一個(gè)數(shù)據(jù)值表示此SqlCommand命令執(zhí)行后影響的行數(shù)</returns>
public int ExcStoreNonQuery(string connString, CommandType cmdType, string cmdText, params SqlParameter[] commandParameters)
{
SqlCommand cmd = new SqlCommand();
SqlConnection conn = new SqlConnection(ConnString);
try
{
//通過(guò)PrePareCommand方法將參數(shù)逐個(gè)傳入到SqlCommand的參數(shù)集合中
PrepareCommand(cmd, conn, null, cmdType, cmdText, commandParameters);
int val = cmd.ExecuteNonQuery();
//清空SqlCommand中的參數(shù)列表
cmd.Parameters.Clear();
return val;
}
catch (Exception e)
{
throw new Exception("執(zhí)行任務(wù)失敗:" + e.Message + " " + cmdText);
}
finally
{
cmd.Dispose();
conn.Close();
conn = null;
}
}
#endregion
#region 存儲(chǔ)過(guò)程執(zhí)行查詢
/// <summary>
/// 執(zhí)行一條返回結(jié)果集的SqlCommand,通過(guò)一個(gè)已經(jīng)存在的數(shù)據(jù)庫(kù)連接
/// 使用參數(shù)數(shù)組提供參數(shù)
/// </summary>
/// <remarks>
/// 使用示例:
/// DataTable table=StoreGetTable(conn,CommandType.StoredProcedure,"PublishOrders");
/// </remarks>
/// <param name="connecttionString">一個(gè)現(xiàn)有的數(shù)據(jù)庫(kù)連接</param>
/// <param name="cmdTye">SqlCommand命令類型</param>
/// <param name="cmdText">存儲(chǔ)過(guò)程的名字或者 T-SQL 語(yǔ)句</param>
/// <returns>返回一個(gè)表(DataTable)表示查詢得到的數(shù)據(jù)集</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);
//返回一個(gè)表集
return ds;
}
catch (Exception e)
{
throw new Exception("執(zhí)行任務(wù)失敗:" + e.Message + " " + cmdText);
}
finally
{
cmd.Dispose();
conn.Close();
conn = null;
}
}
#endregion
#region 為執(zhí)行命令準(zhǔn)備參數(shù)
///<summary>
///為執(zhí)行命令準(zhǔn)備參數(shù)
///</summary>
///<param name="cmd">Sqlcommang命令</param>
///<param name="conn">已經(jīng)存在的數(shù)據(jù)庫(kù)連接</param>
///<param name="trans">數(shù)據(jù)庫(kù)事物處理</param>
///<param name="cmdType">SqlCommand命令類型(存儲(chǔ)過(guò)程,T-Sql語(yǔ)句,等等。)</param>
///<param name="cmdText">Command text,T-Sql語(yǔ)句,例如:Select * from sufei</param>
///<param name="cmdParms">返回帶參數(shù)的命令</param>
private static void PrepareCommand(SqlCommand cmd, SqlConnection conn, SqlTransaction trans, CommandType cmdType, string cmdText, SqlParameter[] cmdParms)
{
//判斷數(shù)據(jù)庫(kù)連接狀態(tài)
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
?
?
更多文章、技術(shù)交流、商務(wù)合作、聯(lián)系博主
微信掃碼或搜索:z360901061
微信掃一掃加我為好友
QQ號(hào)聯(lián)系: 360901061
您的支持是博主寫(xiě)作最大的動(dòng)力,如果您喜歡我的文章,感覺(jué)我的文章對(duì)您有幫助,請(qǐng)用微信掃描下面二維碼支持博主2元、5元、10元、20元等您想捐的金額吧,狠狠點(diǎn)擊下面給點(diǎn)支持吧,站長(zhǎng)非常感激您!手機(jī)微信長(zhǎng)按不能支付解決辦法:請(qǐng)將微信支付二維碼保存到相冊(cè),切換到微信,然后點(diǎn)擊微信右上角掃一掃功能,選擇支付二維碼完成支付。
【本文對(duì)您有幫助就好】元

