web-dev-qa-db-ja.com

データセットの読み取り

WPFでDataSetからデータを読み取るにはどうすればよいですか? 2列だけの列車の時刻表があり、出発時刻を読み取り、次の列車が出発する時刻を計算できるようにしたいと考えています。たとえば、現在の時刻は12:29であり、私のアプリケーションでは、次の列車が12:33に出発することを通知する必要があります。

私はすでに左右をグーグルで検索しました。 .NET 3.5を使用しています。

42
Matt

DataSetデータベースに似ています。 DataTableはデータベーステーブルに似ており、DataRowはテーブル内のレコードに似ています。フィルタリングまたは並べ替えオプションを追加する場合は、DataViewオブジェクトを使用して追加し、別のDataTableオブジェクトに変換します。

データベースを使用してデータを保存している場合は、まずデータベーステーブルをメモリ内のDataSetオブジェクトにロードします。 1つの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();
100
KMC

DsがDataSetの場合、次のような方法で最初のテーブルの最初の行のCustomerID列にアクセスできます。

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

DataSetは、データベースからアクセスされるデータのコピーですが、データベースを使用する必要さえありません。ただし、推奨されます。

新しいアプリケーションを作成する場合、DataSetsは優先されないため、Entity FrameworkやNHibernateなどのORMの使用を検討してください。しかし、それらはまだサポートされており、私が知る限り、すぐに消えることはありません。

標準データセットから読み取る場合は、@ KMCの答えが探しているものです。ただし、これを行う適切な方法は、Strongly-Typed DataSetを作成し、それを使用してIntellisenseを活用することです。 Entity Frameworkを使用していない場合、続行します。

プロジェクトやApp_Dataフォルダーなど、データアクセスレイヤー専用のスペースがまだない場合は、今すぐ作成することをお勧めします。それ以外の場合は、データプロジェクトフォルダの下で次の手順を実行します。[追加]> [新しい項目の追加]> [データセット]作成されたファイルの拡張子は.xsdになります。

次に、DataTableを作成する必要があります。 DataTableを作成します(ファイルをクリックし、デザインウィンドウを右クリックします-ファイルの拡張子は.xsdです-[追加]> [DataTable]をクリックします)。いくつかの列を作成します(作成したデータテーブルを右クリックし、[追加]> [列])。最後に、データにアクセスするにはテーブルアダプターが必要です。データセットで参照されているデータにアクセスするには、データベースへの接続を設定する必要があります。

完了したら、プロジェクトでDataSetを正常に参照した後(ステートメントを使用)、intellisenseを使用してDataSetにアクセスできます。これにより、型指定されていないデータセットよりもはるかに簡単になります。

可能な場合は、型指定されていない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

上記の例では、Strongly-Typed DataSetにNextTrainDepartureTimeというDateTime型の列があることを前提としています。お役に立てば幸いです!

1
cloudstrifebro

これがSQL Serverデータベースからのものである場合、この種類のクエリを発行できます...

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

GetDate()も使用できますが、日付がどのように保存されているかはわかりません。

データがどのように保存および/または読み取られるのかわかりません。

1
Jon Raynor