读数据集
一个绝对的初学者的问题:我如何从WPF中的数据集读取数据? 我有一个只有2列的列车时刻表,我希望能够读取出发时间,并计算下一class列车何时离开。 例如,现在的时间是12:29,我的申请应该告诉我下一class列车将在12:33出发。
我已经search了左右。 我在.NET 3.5上。
谢谢
DataSet类似于数据库。 DataTable类似于数据库表,而DataRow类似于表中的logging。 如果要添加筛选或sorting选项,则可以使用DataView对象执行此操作,然后将其转换回单独的DataTable对象。
如果您使用数据库来存储数据,则首先将数据库表加载到内存中的DataSet对象。 您可以将多个数据库表加载到一个DataSet中 ,并通过DataTable对象从DataSet中select要读取的特定表。 随后,通过DataRow从DataTable中读取特定的一行数据。 以下代码显示了以下步骤:
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是DataSet,则可以使用类似如下方法访问第一个表中第一行的CustomerID列:
DataRow dr = ds.Tables[0].Rows[0]; Console.WriteLine(dr["CustomerID"]);
如果这是来自SQL Server数据库,您可以发出这种查询…
从TrainSchedule中selectTop 1 DepartureTime,其中DepartureTime> GetUTCDate()按出发时间顺序ASC
GetDate()也可以使用,不知道如何存储date。
我不确定数据是如何存储和/或读取的。
数据集是从数据库访问的数据副本,但根本不需要数据库。 不过,这是首选。
请注意,如果您正在创build新的应用程序,请考虑使用ORM,例如entity framework或NHibernate,因为DataSets不再是首选; 然而,就我所知,它们仍然得到支持,不会很快消失。
如果您正在从标准数据集中读取数据,那么@ KMC的答案就是您要查找的数据。 但是,正确的做法是创build一个强types数据集并使用它,以便利用Intellisense。 假设你没有使用entity framework,继续。
如果您的数据访问层没有专门的空间,例如项目或App_Data文件夹,我build议您现在创build一个空间。 否则,请在数据项目文件夹下按以下步骤操作:添加>添加新项目>数据集。 创build的文件将具有.xsd扩展名。
您将需要创build一个DataTable。 创build一个DataTable(单击文件,然后右键单击devise窗口 – 该文件具有.xsd扩展名 – 并单击添加>数据表)。 创build一些列(右键单击刚创build的数据表>添加>列)。 最后,你需要一个表格适配器来访问数据。 您需要build立与数据库的连接以访问数据集中引用的数据。
完成后,在成功引用项目中的DataSet(使用语句)后,可以使用intellisense访问DataSet。 这使得它比无types数据集更容易。
如果可能,请使用强types数据集而不是无types数据集。 虽然创造更多的工作,但最终可以通过智能感知为您节省大量时间。 你可以做这样的事情:
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
上面的例子假设你的强types数据集有一个名为NextTrainDepartureTime的DateTimetypes的列。 希望有所帮助!