用C#如何执行存储过程,并带参数呢?帮我写一下代码,谢谢!!1
- C# code
SqlParameter[] prams ={ this.BeylandSoft1.MakeInParam("@GHDWBM",SqlDbType.VarChar,50,a1), this.BeylandSoft1.MakeInParam("@RKLXBM",SqlDbType.VarChar,50,a2), this.BeylandSoft1.MakeInParam("@WZXXBM",SqlDbType.VarChar,50,a3), this.BeylandSoft1.MakeInParam("@SL",SqlDbType.VarChar,50,a4), this.BeylandSoft1.MakeInParam("@DJ",SqlDbType.VarChar,50,a5), this.BeylandSoft1.MakeInParam("@SCRQSJ",SqlDbType.VarChar,50,a6), this.BeylandSoft1.MakeInParam("@CPDQSJ",SqlDbType.VarChar,50,a7), this.BeylandSoft1.MakeInParam("@XHBM",SqlDbType.VarChar,50,a8), this.BeylandSoft1.MakeInParam("@PHBM",SqlDbType.VarChar,50,a9), this.BeylandSoft1.MakeInParam("@JCDWBM",SqlDbType.VarChar,50,a10), this.BeylandSoft1.MakeInParam("@YHBM",SqlDbType.VarChar,50,a11), this.BeylandSoft1.MakeInParam("@BZ",SqlDbType.VarChar,50,a12), }; this.BeylandSoft1.ExeSQL_RunProcedure("PR_KF_YBWZYSD_001", prams);
- SQL code
SET ANSI_NULLS ONGOSET QUOTED_IDENTIFIER ONGOALTER PROCEDURE [dbo].[PR_KF_YBWZYSD_001]@P_GHDWBM varchar(50),@P_RKLXBM varchar(50),@P_WZXXBM varchar(50),@P_SL varchar(50),@P_DJ varchar(50),@P_SCRQSJ varchar(50),@P_CPDQSJ varchar(50),@P_XHBM varchar(50),@P_PHBM varchar(50),@P_JCDWBM varchar(50),@P_YHBM varchar(50),@P_BZ varchar(50),@ReturnID varchar(5) OUTPUTASDeclare @V_SL varchar(50)Declare @T_SL decimal(18,3)Declare @T_DJ decimal(18,2)Declare @T_JE decimal(18,2)Declare @P_JE varchar(50)Declare @V_YBWZMX_XLH bigintDeclare @V_YBWZKC_XLH bigintDeclare @sql varchar(2000)Declare @V_SJ varchar(50)Declare @V_ZERO varchar(50)Declare @P_YBWZMX_XLH varchar(50)Declare @P_YBWZKC_XLH varchar(50)/*物资入库与入库冲销用的是这两个存储过程PR_KF_YBWZYSDMX_GC_01,PR_KF_YBWZYSDMX_02*//*这两个过程没有用上PR_KF_YBWZYSDMX_01,PR_KF_YBWZYSDMX_GC_02,*/Begin Transaction /*转换传入值的数据类型 */ set @T_SL=CAST(@P_SL AS decimal(18,3)) set @T_DJ=CAST(@P_DJ AS decimal(18,2)) set @T_JE=round((@T_SL*@T_DJ),2); set @V_SJ=CONVERT(char(11),getdate(),21); set @V_ZERO='0'; set @P_JE=CAST(@T_JE AS varchar(50)) /*更新库房数量 @@IDENTITY 取得最近写入表的最大自增量 XLH */ SELECT @V_YBWZMX_XLH=@@IDENTITY from KF_YBWZMX; SELECT @V_YBWZKC_XLH=@@IDENTITY from KF_YBWZKC; set @P_YBWZMX_XLH=CAST(@V_YBWZMX_XLH AS varchar(50)) set @P_YBWZKC_XLH=CAST(@V_YBWZKC_XLH AS varchar(50)) set @P_SCRQSJ=CONVERT(char(11),@P_SCRQSJ,21); set @P_CPDQSJ=CONVERT(char(11),@P_CPDQSJ,21); insert into KF_YBWZMX([GHDWBM],[RKLXBM] ,[WZXXBM] ,[SL],[DJ],[JE],[SCRQSJ] ,[CPDQSJ] ,[XHBM] ,[PHBM],[KC_XLH],[JCDWBM] ,[YHBM] ,[CJSJ] ,[XTBZ] ,[SCBZ] ,[BZ])values (''+ @P_GHDWBM+'',''+@P_RKLXBM+'',''+@P_WZXXBM+'',''+@P_SL+'',''+@P_DJ+'',''+@P_JE+'',''+@P_SCRQSJ+'',''+ @P_CPDQSJ+'',''+@P_XHBM+'',''+@P_PHBM+'','0',''+@P_JCDWBM+'',''+@P_YHBM+'',''+ @V_SJ+'',''+@V_ZERO+'',''+@V_ZERO+'',''+@P_BZ+''); If (@@error <> 0) Begin Rollback Transaction return set @ReturnID=-1 EndCommit Transactionreturn set @ReturnID=1GOSET ANSI_NULLS OFFGOSET QUOTED_IDENTIFIER OFFGO
- C# code
public SqlDataReader RunProcedure(int ConnID, string storedProcName, IDataParameter[] parameters) { //SqlConnection connection = new SqlConnection(_GetResultDBConnStr(ConnID)); using (SqlConnection connection = new SqlConnection(_GetResultDBConnStr(ConnID))) { SqlDataReader returnReader=null; connection.Open(); SqlCommand command = null; command = BuildQueryCommand(connection, storedProcName, parameters); command.CommandType = CommandType.StoredProcedure; returnReader = command.ExecuteReader(); return returnReader; } }
- C# code
public SqlParameter MakeInParam(string ParamName, SqlDbType DbType, int Size, object Value) { return MakeParam(ParamName, DbType, Size, ParameterDirection.Input, Value); }
[解决办法]
我给你封装一个执行存储过程的类,你自己调用吧。
- C# code
using System;using System.Collections.Generic;using System.Linq;using System.Text;using System.Data.SqlClient;using System.Data;using System.Diagnostics;namespace DataAccess{ /// <summary> /// </summary> class BaseDb { /// <summary> /// 连接字符串 /// </summary> public static string strCon = System.Configuration.ConfigurationManager.ConnectionStrings["NSdpWebConnectionString"].ToString(); /// <summary> /// 查询 -- 执行存储过程返回数据集 /// </summary> /// <param name="storedProcName">存储过程名</param> /// <param name="parameters">存储过程参数</param> /// <param name="tableName">DataSet结果中的表名</param> /// <returns>DataSet</returns> public static DataSet RunProcedureForQuery(string storedProcName, IDataParameter[] parameters) { using (SqlConnection connection = new SqlConnection(strCon)) { DataSet dataSet = new DataSet(); try { connection.Open(); SqlDataAdapter sqlDA = new SqlDataAdapter(); sqlDA.SelectCommand = BuildQueryCommand(connection, storedProcName, parameters); sqlDA.Fill(dataSet); connection.Close(); return dataSet; } catch(Exception ex) { //返回为空时代表数据库访问出现异常,界面调用方根据返回信息给用户友好提示。 Debug.Print(ex.ToString()); return null; } } } public static DataSet RunSQLForQuery(string sql) { using (SqlConnection connection = new SqlConnection(strCon)) { DataSet dataSet = new DataSet(); try { connection.Open(); SqlDataAdapter sqlDA = new SqlDataAdapter(); sqlDA.SelectCommand = new SqlCommand(sql, connection); sqlDA.Fill(dataSet); connection.Close(); return dataSet; } catch (Exception ex) { //返回为空时代表数据库访问出现异常,界面调用方根据返回信息给用户友好提示。 Debug.Print(ex.ToString()); return null; } } } /// <summary> /// 更新--执行存储过程,返回影响的行数 /// </summary> /// <param name="storedProcName">存储过程名</param> /// <param name="parameters">存储过程参数</param> /// <returns></returns> public static int RunProcedureForUpdate(string storedProcName, IDataParameter[] parameters) { using (SqlConnection connection = new SqlConnection(strCon)) { int rowsAffected = 0; try { connection.Open(); SqlCommand command = BuildQueryCommand(connection, storedProcName, parameters); rowsAffected = command.ExecuteNonQuery(); } catch (Exception ex) { Debug.Print(ex.ToString()); } return rowsAffected; } } /// <summary> /// 构建 SqlCommand 对象(用来返回一个结果集,而不是一个整数值) /// </summary> /// <param name="connection">数据库连接</param> /// <param name="storedProcName">存储过程名</param> /// <param name="parameters">存储过程参数</param> /// <returns>SqlCommand</returns> private static SqlCommand BuildQueryCommand(SqlConnection connection, string storedProcName, IDataParameter[] parameters) { SqlCommand command = new SqlCommand(storedProcName, connection); command.CommandType = CommandType.StoredProcedure; if (parameters != null) { foreach (SqlParameter parameter in parameters) { command.Parameters.Add(parameter); } } return command; } }}