首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何用数据填充System.Data.DataTable的子类?

如何用数据填充System.Data.DataTable的子类?
EN

Stack Overflow用户
提问于 2013-09-12 20:07:35
回答 2查看 744关注 0票数 1

我有一个从DataTable派生的类。在它的ctor中,我希望它拥有从调用函数获得的DataTable对象中的所有数据。

这听起来像一件非常琐碎的事情,但我很惊讶,我无法弄清楚。对不起,我已经连续编码超过12个小时了,所以我想我已经被淘汰了。

我们会感谢你的帮助。

代码语言:javascript
复制
using System.Data;
using Foo.Data;

namespace Foo.BusinessObjects
{
    public class StringTable : DataTable
    {
        public StringTable() : base()
        {
            var sql = "SELECT * FROM FooBar";


            // I know that that's not a legal C# statement but 
            // if it were, I'd want to do the equivalent of the following:

            this = Database.DefaultDatabase.GetDataTable(sql);


        }
    }
}

其中,GetDataTable方法返回一个System.Data.DataTable对象。签名在这里:

代码语言:javascript
复制
public DataTable GetDataTable(string sql, params SqlParameter[] parameters)
{
   DataSet dataset;

   return ((dataset = GetDataSetInternal(sql, false, parameters)) == null ? 
            null : dataset.Tables[0]);
}
EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2013-09-13 09:25:37

可以在派生类的构造函数中替换下面一行。

代码语言:javascript
复制
this = Database.DefaultDatabase.GetDataTable(sql);

使用

代码语言:javascript
复制
DataTable dtResult = Database.DefaultDatabase.GetDataTable(sql);
this.Merge(dtResult);
票数 2
EN

Stack Overflow用户

发布于 2013-09-12 21:28:06

不能在构造函数中执行此类操作。您可以支持组合而不是继承,并且仍然拥有您的StringTable类。

代码语言:javascript
复制
public class StringTable
{
    private DataTable dataTable;

    public StringTable()
    {
        var sql = "SELECT * FROM FooBar";


        // I know that that's not a legal C# statement but 
        // if it were, I'd want to do the equivalent of the following:

        dataTable = Database.DefaultDatabase.GetDataTable(sql);
    }
}

另一种选择是寻找使用DataTable的工厂模式,而不是对其进行子类化。沿着这些路线的东西。继承实际上只会给您带来好处,如果它可以表现出多态的方式。否则我不确定你会得到什么,

代码语言:javascript
复制
public class DataTableFactory
{
    public DataTable CreateStringTable()
    {
        var sql = "SELECT * FROM FooBar";
        DataTable dataTable = new DataTable();

        return Database.DefaultDatabase.GetDataTable(sql);
    }

    public DataTable CreateSomeOtherTable()
    {
       //etc etc
    }
}
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/18773449

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档