C#开发学习笔记:动态调用不同程序集中的方法

版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/JustWantToFly/article/details/77967113
 /// <summary>
        /// 执行数据库操作方法
        /// </summary>
        /// <param name="ServiceName">要执行的Service名称</param>
        /// <param name="ds">数据源</param>
        public static DataSet ExecuteService(String ServiceName, DataSet ds)
        {
            DataSet ReturnInfo = new DataSet();
            try
            {
                
                //string sql = "SELECT * FROM TSM09 T WHERE T.SERVICE_NAME=:SERVICE_NAME";
                //RCDbCommand comm = new RCDbCommand(DBConnection.conn);
                //comm.CommandText = sql;
                //comm.Parameter("SERVICE_NAME", ServiceName);
                //DataSet ReturnInfo = new DataSet();
                //comm.ExecuteDataSet(ReturnInfo);
                //if(ReturnInfo.Tables[0].Rows.Count>0)
                //{
                //根据ServiceName查询出来的信息(ServiceName所在的程序集,程序集中的类)获取当前Service方法                
                MethodInfo ServiceVoid = Assembly.LoadFrom("SMSql.DLL").GetType("SMSql.FormSM01Sql").GetMethod(ServiceName);
                //}

                //定义一个存储参数值的数组,长度等于要调用的方法的参数个数
                object[] ParametersList = new object[ServiceVoid.GetParameters().Length];

                //根据参数个数按照顺序给ParametersList添加元素
                for (int i = 0; i < ServiceVoid.GetParameters().Length; i++)
                    ParametersList[i]=ds.Tables[0];

                //使用Invoke方法立即调用当前的方法同时传参数接收返回结果(如果调用的方法有返回结果且类型已知则转类型)
                //类型未知则用object接收
                ReturnInfo = ServiceVoid.Invoke(null, ParametersList) as DataSet;
            }
            catch (Exception ex)
            {
                Tools.RCMesInfo.Flag = -1;
                Tools.RCMesInfo.ReturnMsg = ex.ToString();
                return ReturnInfo;
            }
            return ReturnInfo;
            //Tools.RCMesInfo.Flag = 0;
        }

猜你喜欢

转载自blog.csdn.net/JustWantToFly/article/details/77967113