您的位置:首页 > 编程语言 > C#

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

2017-09-13 15:50 603 查看
/// <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;
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息