C# 将数据适配器的结果填充到我自己的数据集? 在开始我的问题之前,我需要提到我是C++程序员而不是C语言,所以我的代码语法可能是错误的。我是业余爱好者,需要提高!;)

C# 将数据适配器的结果填充到我自己的数据集? 在开始我的问题之前,我需要提到我是C++程序员而不是C语言,所以我的代码语法可能是错误的。我是业余爱好者,需要提高!;),c#,dataset,C#,Dataset,关于如何处理数据适配器输出的结果,我有一个问题(也许这是一个想法而不是问题)。 让我们来看看以下几行: public DataSet CollectData() { DataSet result = new DataSet(); using (SqlConnection conn = new SqlConnection(connectionString)) using (SqlCommand cmd = new SqlCommand("dbo.StoredProc1",

关于如何处理数据适配器输出的结果,我有一个问题(也许这是一个想法而不是问题)。 让我们来看看以下几行:

public DataSet CollectData()
{
    DataSet result = new DataSet();
    using (SqlConnection conn = new SqlConnection(connectionString))
    using (SqlCommand cmd = new SqlCommand("dbo.StoredProc1", conn))
    {
        cmd.CommandType = CommandType.StoredProcedure;
        IDataAdapter adapter = new SqlDataAdapter(cmd);

        adapter.Fill(result);/// filling a dataset

        return result;
    }
}
如您所见,此函数填充数据集并返回它。 无论我想在哪里使用这个对象,我都应该像这样循环:

    DataSet dataSet = DataObj.CollectData(); /// above function!

    string token;
    string lemma;
    foreach (DataRow row in dataSet.Tables[0].Rows)
    {
        token = ((string)row["Token"]);
        lemma = ((string)row["Lemma"]);
        ...

        //// TODO: ex. write to file 
    }
public class Lexeme
{
private int tokenId = -1;
private string token;
private string lemma;
/// some get and set functions!
}
public MYDATASET CollectData()
{
    MYDATASET result = new MYDATASET ();
    using (SqlConnection conn = new SqlConnection(connectionString))
    using (SqlCommand cmd = new SqlCommand("dbo.StoredProc1", conn))
    {
        cmd.CommandType = CommandType.StoredProcedure;
        IDataAdapter adapter = new SqlDataAdapter(cmd);

        adapter.Fill(result);/// filling a dataset

        return result;
    }
}
但是,我有一个类,它演示了这个存储对象

像这样的课程:

    DataSet dataSet = DataObj.CollectData(); /// above function!

    string token;
    string lemma;
    foreach (DataRow row in dataSet.Tables[0].Rows)
    {
        token = ((string)row["Token"]);
        lemma = ((string)row["Lemma"]);
        ...

        //// TODO: ex. write to file 
    }
public class Lexeme
{
private int tokenId = -1;
private string token;
private string lemma;
/// some get and set functions!
}
public MYDATASET CollectData()
{
    MYDATASET result = new MYDATASET ();
    using (SqlConnection conn = new SqlConnection(connectionString))
    using (SqlCommand cmd = new SqlCommand("dbo.StoredProc1", conn))
    {
        cmd.CommandType = CommandType.StoredProcedure;
        IDataAdapter adapter = new SqlDataAdapter(cmd);

        adapter.Fill(result);/// filling a dataset

        return result;
    }
}
正如您看到的,这个类持有一个对象(它类似于数据库表中存储对象的包装器)

所以我想知道是否有返回这个对象列表(这里是Lexeme)而不是数据集的方法?我指的是有效利用内存的东西。因为我处理大量的数据

例如,类似这样的事情:

    DataSet dataSet = DataObj.CollectData(); /// above function!

    string token;
    string lemma;
    foreach (DataRow row in dataSet.Tables[0].Rows)
    {
        token = ((string)row["Token"]);
        lemma = ((string)row["Lemma"]);
        ...

        //// TODO: ex. write to file 
    }
public class Lexeme
{
private int tokenId = -1;
private string token;
private string lemma;
/// some get and set functions!
}
public MYDATASET CollectData()
{
    MYDATASET result = new MYDATASET ();
    using (SqlConnection conn = new SqlConnection(connectionString))
    using (SqlCommand cmd = new SqlCommand("dbo.StoredProc1", conn))
    {
        cmd.CommandType = CommandType.StoredProcedure;
        IDataAdapter adapter = new SqlDataAdapter(cmd);

        adapter.Fill(result);/// filling a dataset

        return result;
    }
}

数据集是否可以继承?

您可以使用
类型化数据集而不是自己的对象。这允许您轻松地填充数据集,但也具有强类型列,并且能够轻松访问行中的每个属性。转到Visual Studio的
添加新项目
窗口并添加数据集。使用设计器添加新表,并添加从sql查询返回的列。转到每列的“属性”窗口并指定类型(int、string等)

从这里开始,在加载数据集时,创建数据集类型的新对象,并像以前一样填充它:

public MyTypedDataset GetMyDataSet()
{
    MyTypedDataset ds = new MyTypedDataset();
    using (SqlConnection conn = new SqlConnection(connectionString))
    using (SqlCommand cmd = new SqlCommand("dbo.StoredProc1", conn))
    {
        cmd.CommandType = CommandType.StoredProcedure;
        IDataAdapter adapter = new SqlDataAdapter(cmd);

        adapter.Fill(ds.Table1);

        return result;
    }
}
对于类型化数据集,在设计器中创建的每个表项都有一个属性。(默认情况下,我认为它的名称为
Table1
?)

现在,当访问数据时,您可以

MyTypedDataset ds = GetMyDataSet();
string myToken = ds.Table1.Rows[0].Token;
string myLemma = ds.Table1.Rows[0].Lemma;
或者在一个foreach中:

MyTypedDataset ds = GetMyDataSet();
foreach(var row in ds.Table1)
{
    string myToken = row.Token;
    string myLemma = row.Lemma;
}

这并不如获得一个对象列表好,但它几乎就在那里了。如果您想要自己的对象列表,您很可能需要使用
对象关系映射器
,例如实体框架或NHibernate。

上帝保佑您,我正是在寻找这个。。。