C# 执行存储过程 方法

 

功能 :  根据调用的方法名称  反射动态调用  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;
        }




    }

 

 

posted @ 2013-04-01 00:23  hzy168  阅读(379)  评论(0编辑  收藏  举报