将所有表加载到XSD中定义的强类型数据集中?

时间:2010-12-30 10:54:25

标签: c# xsd dataset strongly-typed-dataset

我想要做的是缓存存储在数据库中的整个表,就像在所有行中一样。我正在使用XSD来定义强类型数据集,并在关联的tableadapter部分类中定义自定义get()set()操作。

我想要做的是遍历数据集中的所有tableadapter并在每个中执行相同的命令。似乎不可能,没有tableadapters的集合。

那么我怎样才能基本上以动态方式填充强类型数据集中的每个数据表呢?

非常感谢, 河豚

2 个答案:

答案 0 :(得分:0)

为什么不使用TableAdapterManager

它包含每个TableAdapter的属性。

答案 1 :(得分:0)

我知道这是一个有10年历史的问题了,但是由于tableadapters被生成为partial,因此您可以相对轻松地执行以下操作:

  • 双击您的数据集以切换到代码视图
  • 编辑代码,例如:
//make sure you're in the TableAdapters namespace rather than the dataset one
namespace YourAppNamespace.YourDataSetNameTableAdapters
{
    //define in this interface the common things you want to have 
    //access to on all your ITableAdapters 
    public interface ITableAdapter
    {
        SqlConnection Connection { get; set; }

        bool ClearBeforeFill { get; set; }

        int Update(YourDataSetName ds);

    }

    //then mention every tableadapter here, as an empty partial, just to mark it as implementing the interface
    public partial class My1TableAdapter : ITableAdapter { }
    public partial class My2TableAdapter : ITableAdapter { }
    public partial class My3TableAdapter : ITableAdapter { }

您无需执行其他任何操作;您现在可以将您的表适配器称为ITableAdapters,并访问您在此处声明的属性。

如果要在列表中列出所有表适配器,还可以采取一些技巧,例如枚举表单上的组件(请注意;它们不是控件)或反思地查看表适配器管理器的属性:

        List<ITableAdapter> _ta = new List<ITableAdapter>();
 


        foreach(var p in tableAdapterManager.GetType().GetProperties())
            if((typeof(ITableAdapter).IsAssignableFrom(p.PropertyType)))
                _ta.Add((ITableAdapter)p.GetValue(tableAdapterManager));

请注意,您不会“迭代数据集中的每个表适配器”-表适配器不存在于数据集中,数据表存在于数据集中; tableadapters位于不同的命名空间中,与数据集没有任何关系,就像水龙头不一定与存储桶相关