【发布时间】:2009-08-05 18:06:01
【问题描述】:
我的应用程序中有几个强类型数据集。编写更新数据的方法变得乏味,因为每个方法都有多个表。我想创建一个可以轻松更新所有表的通用函数。我不介意是否必须为每个 DataSet 创建其中一个,但如果一个函数可以处理所有这些,那就太棒了!
将有任意数量的新记录、更新记录或删除记录,并且应正确标记每一行。这个函数应该只是处理实际的保存。这是我目前所拥有的:
private bool SaveData(object oTableAdaptor, object ds)
{
try
{
Type oType = oTableAdaptor.GetType();
MethodInfo[] oMethodInfoArray = oType.GetMethods();
foreach (MethodInfo oMI in oMethodInfoArray)
{
if (oMI.Name == "Update")
{
ParameterInfo[] oParamaterInfoArray = oMI.GetParameters();
foreach (ParameterInfo oPI in oParamaterInfoArray)
{
Type DsType = null;
if (oPI.ParameterType.Name == "NameOfDataSet")
{
DsType = typeof(MyDataSet);
// get a list of the changed tables???
}
if (((DataSet)ds).HasChanges() == true)
{
if (oPI.ParameterType == DsType)
{
object[] values = { ds };
try
{
oMI.Invoke(oTableAdaptor, values);
}
catch (Exception ex)
{
System.Diagnostics.Debug.WriteLine(oTableAdaptor.GetType().Name + Environment.NewLine + ex.Message);
}
}
}
}
}
}
}
catch (Exception Exp)
{
System.Diagnostics.Debug.WriteLine(Exp.Message);
if (Exp.InnerException != null) System.Diagnostics.Debug.WriteLine(Exp.InnerException.Message);
return false;
}
return true;
我已经从另一个开发人员在不同应用程序中的另一段代码中改编了这个。到目前为止的主要区别是他传入了一个数据适配器数组(对象类型),并将三个数据集(全局实例化)中的每一个都设置为单独的 if 块内的 foreach(oParamaterInfoArray 中的 ParameterInfo oPI)块(其中我的 ' NameOfDataSet' 将是数据集之一)
任何人都可以在完成这个功能的方向上给我一点推动(或推一下?)吗?我知道我就在那儿,但感觉就像我在寻找某些东西。这段代码编译没有错误。
【问题讨论】:
-
+1 -- 我一直认为 xxTableAdapter 类应该实现了一个通用接口或从某个基类派生。
-
我认为 xxTableAdapter 继承自 SqlDataAdapter 并继承自 DbDataAdapter。它还应该实现 IDbDataAdapter 接口
标签: c# reflection datatable generics tableadapter