TL;DR: - 从数据集中获取数据表并从 rows 属性中读取。
DataSet ds = new DataSet();
DataTable dt = new DataTable();
DataColumn col = new DataColumn("Id", typeof(int));
dt.Columns.Add(col);
dt.Rows.Add(new object[] { 1 });
ds.Tables.Add(dt);
var row = ds.Tables[0].Rows[0];
//access the ID column.
var id = (int) row.ItemArray[0];
DataSet 是从数据库访问的数据的副本,但根本不需要使用数据库。不过,这是首选。
请注意,如果您正在创建新应用程序,请考虑使用 ORM,例如实体框架或 NHibernate,因为不再首选数据集;但是,它们仍然受到支持,据我所知,它们不会很快消失。
如果您从标准数据集读取,那么@KMC 的答案就是您要寻找的。但是,执行此操作的正确方法是创建一个强类型数据集并使用它,以便您可以利用 Intellisense。假设您没有使用实体框架,请继续。
如果您还没有专门的数据访问层空间,例如项目或 App_Data 文件夹,我建议您现在创建一个。否则,在您的数据项目文件夹下进行如下操作:
添加 > 添加新项目 > 数据集。创建的文件将具有 .xsd 扩展名。
然后您需要创建一个数据表。创建一个 DataTable(单击文件,然后右键单击设计窗口 - 该文件具有 .xsd 扩展名 - 然后单击 Add > DataTable)。创建一些列(右键单击刚刚创建的数据表 > 添加 > 列)。最后,您需要一个表适配器来访问数据。您需要设置与数据库的连接才能访问数据集中引用的数据。
完成后,在项目中成功引用DataSet(using语句)后,就可以通过intellisense访问DataSet了。这使得它比无类型数据集容易得多。
如果可能,请使用强类型数据集而不是无类型数据集。尽管创建工作量更大,但最终使用智能感知为您节省了大量时间。你可以这样做:
MyStronglyTypedDataSet trainDataSet = new MyStronglyTypedDataSet();
DataAdapterForThisDataSet dataAdapter = new DataAdapterForThisDataSet();
//code to fill the dataset
//omitted - you'll have to either use the wizard to create data fill/retrieval
//methods or you'll use your own custom classes to fill the dataset.
if(trainDataSet.NextTrainDepartureTime > CurrentTime){
trainDataSet.QueueNextTrain = true; //assumes QueueNextTrain is in your Strongly-Typed dataset
}
else
//do some other work
上面的示例假设您的强类型数据集有一个名为 NextTrainDepartureTime 的 DateTime 类型的列。希望对您有所帮助!