正在读取数据集

本文关键字:数据集 读取 | 更新日期: 2023-09-27 17:59:44

如何在WPF中从数据集中读取数据?我有一个只有两列的列车时刻表,我想能够读取发车时间并计算下一列列车何时发车。例如,现在的时间是12:29,我的申请应该告诉我下一班火车将在12:33发车。

我已经在谷歌上搜索过了。我使用的是.NET 3.5。

正在读取数据集

数据集类似于数据库DataTable类似于数据库表,而DataRow则类似于表中的记录。如果要添加筛选或排序选项,请使用DataView对象进行添加,并将其转换回单独的DataTable

若使用数据库存储数据,则首先将数据库表加载到内存中的DataSet对象中。您可以将多个数据库表加载到一个DataSet中,并通过DataTable对象从DataSet中选择要读取的特定表。随后,通过DataRowdata_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类型列。希望能有所帮助!