正在读取数据集
本文关键字:数据集 读取 | 更新日期: 2023-09-27 17:59:44
如何在WPF中从数据集中读取数据?我有一个只有两列的列车时刻表,我想能够读取发车时间并计算下一列列车何时发车。例如,现在的时间是12:29,我的申请应该告诉我下一班火车将在12:33发车。
我已经在谷歌上搜索过了。我使用的是.NET 3.5。
数据集类似于数据库DataTable类似于数据库表,而DataRow则类似于表中的记录。如果要添加筛选或排序选项,请使用DataView对象进行添加,并将其转换回单独的DataTable。
若使用数据库存储数据,则首先将数据库表加载到内存中的DataSet对象中。您可以将多个数据库表加载到一个DataSet中,并通过DataTable对象从DataSet中选择要读取的特定表。随后,通过DataRow从data_Table读取特定的数据行。以下代码演示步骤:
SqlCeDataAdapter da = new SqlCeDataAdapter();
DataSet ds = new DataSet();
DataTable dt = new DataTable();
da.SelectCommand = new SqlCommand(@"SELECT * FROM FooTable", connString);
da.Fill(ds, "FooTable");
dt = ds.Tables["FooTable"];
foreach (DataRow dr in dt.Rows)
{
MessageBox.Show(dr["Column1"].ToString());
}
要读取一行中的特定单元格:
int rowNum // row number
string columnName = "DepartureTime"; // database table column name
dt.Rows[rowNum][columnName].ToString();
如果ds是数据集,则可以使用以下内容访问第一个表中第一行的CustomerID列:
DataRow dr = ds.Tables[0].Rows[0];
Console.WriteLine(dr["CustomerID"]);
如果这是来自SQL Server数据库的,则可以发出这种查询。。。
Select Top 1 DepartureTime From TrainSchedule where DepartureTime >
GetUTCDate()
Order By DepartureTime ASC
也可以使用GetDate()
,不确定日期是如何存储的。
我不确定数据是如何存储和/或读取的。
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];
数据集是从数据库访问的数据的副本,但根本不需要使用数据库。不过,这是首选。
请注意,如果您正在创建一个新的应用程序,请考虑使用ORM,如实体框架或NHibernate,因为DataSet不再是首选;然而,他们仍然得到支持,据我所知,他们不会很快消失。
如果您正在阅读标准数据集,那么@KMC的答案就是您想要的。不过,正确的方法是创建一个强类型数据集并使用它,以便利用Intellisense。假设您没有使用实体框架,请继续。
如果您还没有一个用于数据访问层的专用空间,例如项目或App_data文件夹,我建议您现在创建一个。否则,请在数据项目文件夹下执行以下操作:添加>添加新项>数据集。创建的文件将具有.xsd扩展名。
然后您需要创建一个DataTable。创建一个DataTable(单击该文件,然后右键单击设计窗口-该文件的扩展名为.xsd-然后单击"添加">"DataTable")。创建一些列(右键单击刚刚创建的数据表>添加>列)。最后,您需要一个表适配器来访问数据。您需要建立到数据库的连接,才能访问数据集中引用的数据。
完成后,在项目中成功引用数据集(使用语句)后,可以使用intellisense访问数据集。这使得它比非类型化数据集容易得多。
如果可能,请使用强类型数据集,而不是非类型数据集。尽管创建它需要更多的工作,但它最终会为您节省大量时间。你可以做一些类似的事情:
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
上面的示例假设强类型数据集有一个名为NextTrainDepartmentTime的DateTime类型列。希望能有所帮助!