欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页  >  IT编程

C#中如何执行存储过程方法

程序员文章站 2023-12-10 17:23:28
功能 :  根据调用的方法名称  反射动态调用  sql command 的方法 复制代码 代码如下: ///

功能 :  根据调用的方法名称  反射动态调用  sql command 的方法

复制代码 代码如下:

 /// <summary>
    /// 存储过程的属性
    /// procname 存储过程的名称
    /// methodname 执行sqlcommand 方法的名称
    /// prmlist 存储过程的参数
    /// </summary>
    public class exeproc
    {
        public string procname;
        public string methodname;
        public object[] prmvalue;
    }

根据制定的存储过程的名称

和参数  来执行指定的存储过程 和 调用 sqlcommand 的方法

复制代码 代码如下:

public class datahelper
    {
        private string connstring = null;
        public datahelper(string constr)
        {
            this.connstring = constr;
        }
        /// <summary>
        ///  执行存储过程
        /// </summary>
        /// <param name="ep">执行存储过程的属性
        /// procname 存储过程的名称
        /// methodname 执行sqlcommand 方法的名称
        /// prmlist 存储过程的参数
        /// </param>
        /// <returns>返回执行的结果</returns>
        public object execprocretobj(exeproc ep)
        {
            if (this.connstring != null && this.connstring != string.empty)
            {
                try
                {
                    sqlconnection con = new sqlconnection(this.connstring);
                    sqlcommand cmd = new sqlcommand();
                    cmd.connection = con;
                    cmd.commandtext = "exec " + ep.procname + " ";
                    foreach (object obj in ep.prmvalue)
                    {
                        cmd.commandtext += obj + ",";
                    }
                    cmd.commandtext = cmd.commandtext.remove(cmd.commandtext.length - 1, 1);
                    type ty = cmd.gettype();
                    con.open();

                    //用反射根据输入的方法名 执行对应的方法

                    object retobj = ty.invokemember(ep.methodname, bindingflags.invokemethod, null, cmd, null);
                    if (retobj.gettype().fullname == "system.data.sqlclient.sqldatareader")
                    {
                        //将返回的object 转换成datatable
                        datatable retdt = new datatable();
                        retdt.load(retobj as sqldatareader);
                        con.close();
                        con.dispose();
                        return retdt;
                    }

                    return retobj;
                }
                catch (exception ex)
                {
                    system.windows.forms.messagebox.show("获取数据发生错误\n" + ex.message);
                }

            }
            return null;
        }
    }