首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > .NET > C# >

用C#怎么执行存储过程,并带参数呢?帮小弟我写一上代码,多谢!1

2012-09-21 
用C#如何执行存储过程,并带参数呢?帮我写一下代码,谢谢!!1C# codeSqlParameter[] prams {this.BeylandSof

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

热点排行