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。上帝保佑您,我正是在寻找这个。。。