Подтвердить что ты не робот

Чтение DataSet

Как мне прочитать данные из DataSet в WPF? У меня есть таблица расписания поездов всего с 2 столбцами, и я хочу иметь возможность прочитать время отправления и рассчитать, когда следующий поезд отправляется. Например, сейчас время 12:29, и в моем заявлении должно быть указано, что следующий поезд отправится в 12:33.

Я уже гуглил влево и вправо. Я на .NET 3.5.

4b9b3361

Ответ 1

DataSet похож на базу данных. DataTable похожа на таблицу базы данных, а DataRow похожа на запись в таблице. Если вы хотите добавить параметры фильтрации или сортировки, вы затем сделаете это с помощью объекта DataView и преобразуете его обратно в отдельный объект DataTable.

Если вы используете базу данных для хранения ваших данных, сначала загружаете таблицу базы данных в объект DataSet в памяти. Вы можете загрузить несколько таблиц базы данных в один DataSet и выбрать определенную таблицу для чтения из объекта DataSet через DataTable. Впоследствии вы читаете определенную строку данных из DataTable через DataRow. Следующие коды демонстрируют шаги:

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();

Ответ 2

Если ds - это DataSet, вы можете получить доступ к столбцу CustomerID первой строки в первой таблице с чем-то вроде:

DataRow dr = ds.Tables[0].Rows[0];
Console.WriteLine(dr["CustomerID"]);

Ответ 3

Если это из базы данных SQL Server, вы можете выполнить этот вид запроса...

Select Top 1 DepartureTime From TrainSchedule where DepartureTime > 
GetUTCDate()
Order By DepartureTime ASC

Также можно использовать GetDate() не GetDate(), как хранятся даты.

Я не уверен, как данные хранятся и/или читаются.

Ответ 4

DataSet - это копия данных, доступ к которым осуществляется из базы данных, но даже не требует использования базы данных вообще. Однако это предпочтителен.

Обратите внимание, что если вы создаете новое приложение, подумайте об использовании ORM, например, Entity Framework или NHibernate, поскольку DataSets больше не являются предпочтительными; однако они все еще поддерживаются, и, насколько я могу судить, они не уйдут в ближайшее время.

Если вы читаете стандартный набор данных, тогда ответ @KMC - это то, что вы ищете. Правильный способ сделать это, однако, состоит в том, чтобы создать сильно типизированный DataSet и использовать его, чтобы вы могли использовать Intellisense. Предполагая, что вы не используете Entity Framework, продолжайте.

Если у вас еще нет выделенного места для вашего уровня доступа к данным, такого как проект или папка App_Data, я предлагаю вам создать его сейчас. В противном случае выполните следующие действия в папке проекта данных: Добавить > Добавить новый элемент > DataSet. Созданный файл будет иметь расширение .xsd.

Затем вам нужно создать DataTable. Создайте DataTable (щелкните по файлу, затем щелкните правой кнопкой мыши на окне дизайна - файл имеет расширение .xsd - и нажмите "Добавить" > "DataTable" ). Создайте несколько столбцов (щелкните правой кнопкой мыши на только что созданном datatable > Add > Column). Наконец, для доступа к данным вам понадобится адаптер таблицы. Вам необходимо настроить соединение с вашей базой данных для доступа к данным, указанным в наборе данных.

После того, как вы закончите, после успешного обращения к DataSet в своем проекте (с использованием инструкции), вы можете получить доступ к DataSet с помощью intellisense. Это делает его намного проще, чем нетипизированные наборы данных.

Когда это возможно, используйте сильно типизированные DataSets вместо нетипизированных. Хотя это больше работы для создания, он в конечном итоге сэкономит вам много времени с помощью 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

В приведенном выше примере предполагается, что ваш сильно типизированный DataSet имеет столбец типа DateTime с именем NextTrainDepartureTime. Надеюсь, что это поможет!