C#调用存储过程通用类

从网上找了一个调了半天也没有出来,最后又翻了翻,算是出来了,原来那个有错......看来不经过亲自实验的代码还是不要贴了......

经修改为以下,试了试没有问题,贴出来喽.....

    public class StoreProcedure
    {
        //存储过程名称。
        private string _name;
        //数据库连接字符串。
        private string _conStr;
        //构造函数
        //sprocName: 存储过程名称;
        //conStr: 数据库连接字符串。
        public StoreProcedure(string sprocName, string conStr)
        {
            _conStr = conStr;
            _name = sprocName;
        }
        //执行存储过程,不返回值。
        //paraValues: 参数值列表。
        //return: void
        public void ExecuteNoQuery(params object[] paraValues)
        {
            using (SqlConnection con = new SqlConnection(_conStr))
            {
                SqlCommand comm = new SqlCommand(_name, con);
                comm.CommandType = CommandType.StoredProcedure;
                AddInParaValues(comm, paraValues);
                con.Open();
                int count = comm.ExecuteNonQuery();
                con.Close();
            }
        }
        // 执行存储过程返回一个表。
        // paraValues: 参数值列表。
        // return: DataTable
        public DataTable ExecuteDataTable(params object[] paraValues)
        {
            SqlCommand comm = new SqlCommand(_name, new SqlConnection(_conStr));
            comm.CommandType = CommandType.StoredProcedure;
            AddInParaValues(comm, paraValues);
            SqlDataAdapter sda = new SqlDataAdapter(comm);
            DataTable dt = new DataTable();
            sda.Fill(dt);
            return dt;
        }
        // 执行存储过程,返回SqlDataReader对象,
        // 在SqlDataReader对象关闭的同时,数据库连接自动关闭。
        // paraValues: 要传递给给存储过程的参数值类表。
        // return: SqlDataReader
        public SqlDataReader ExecuteDataReader(params object[] paraValues)
        {
            SqlConnection con = new SqlConnection(_conStr);
            SqlCommand comm = new SqlCommand(_name, con);
            comm.CommandType = CommandType.StoredProcedure;
            AddInParaValues(comm, paraValues);
            con.Open();
            return comm.ExecuteReader(CommandBehavior.CloseConnection);
        }
        // 获取存储过程的参数列表。这是最重要的一个过程,我调了半天才出来的......
        private ArrayList GetParas()
        {
            //sp_sproc_columns为系统存储过程
            //@procedure_name为其列名
            SqlCommand comm = new SqlCommand("sp_sproc_columns", new SqlConnection(_conStr));
            comm.CommandType = CommandType.StoredProcedure;

            comm.Parameters.AddWithValue("@procedure_name", (object)_name);
            SqlDataAdapter sda = new SqlDataAdapter(comm);
            DataTable dt = new DataTable();
            sda.Fill(dt);
            sda.Dispose();

            ArrayList al = new ArrayList();
            for (int i = 1; i < dt.Rows.Count; i++)//记得从1开始算起
            {
                al.Add(dt.Rows[i][3].ToString());
            }
            return al;

        }
        // 为 SqlCommand 添加参数及赋值。
        private void AddInParaValues(SqlCommand comm, params object[] paraValues)
        {
            comm.Parameters.Add(new SqlParameter("@RETURN_VALUE", SqlDbType.VarChar));
            comm.Parameters["@RETURN_VALUE"].Direction = ParameterDirection.ReturnValue;
            if (paraValues != null)
            {
                ArrayList al = GetParas();
                for (int i = 0; i < paraValues.Length; i++)
                {

                    //这是从i算起,注意啦......
                    comm.Parameters.AddWithValue(al[i].ToString(), paraValues[i]);

                }
            }
        }
    }

 

 

调用时:只列一个返回Table的

            object[] para ={ 参数值1,参数值2,...... };
            

            //类的实例
            StoreProcedure store = new StoreProcedure("存储过程名称", "server=.;database=cspro;user id=sa;pwd=sa");
           

            //执行带参数的存储过程
           
            DataTable dt = store.ExecuteDataTable(para);
            this.dataGridView1.DataSource = dt;

评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值