1

C#を使用してデータベースにアクセスする方法はたくさんありますが、データの単純な読み取り/書き込み/操作に「最適」な方法がわかりません。以前は汎用のDataSet/DataTableオブジェクトを使用していましたが、よりタイプセーフな構造を使用しようとしています。Visual Studioにデータセット(xsd)を追加し、SQLサーバーバックエンドに接続することから始めました。

テーブル内の列で特定の文字列をクエリ検索しようとしていますが、その列が主キーではありません(したがって、.Find()を使用できません)。どうすればこれを行うことができますか?LINQを使用する必要がありますか、それとも拡張メソッド/ラムダ式を使用できますか?

より基本的なレベルでは、設計時データセットを使用する場合、使用するデータセットの各テーブルを埋めるためにテーブルアダプターを使用する必要がありますか、それともデータセットをインスタンス化するだけですか?ドキュメントは私には少し混乱しています。

4

1 に答える 1

3

をクエリするLinq-To-DataSetには、これが最も強力な方法(効率ではなく、読みやすさと保守性の観点から)を使用できますDataSet

続きを読む:型付きデータセットのクエリ

VSデザイナでTableAdapterまたはを作成するオプションがあります。DataTableTableAdapter VSを追加すると、それに応じたDataTableも作成されます。DataTableのみを追加する場合は、独自の方法でデータテーブルに入力する必要があります。 ADO.NETTableAdaptersのに似ています。DataAdapter

したがって、という名前のDataSetを作成し、という名前DataSet1のテーブルを選択するTableAdapterを追加した場合、VisualStudioは名前空間に名前と名前付きtabDataのDataTableを自動的に作成します。tabDataDataTableTableAdaptertabDataTableAdapterDataSet1TableAdapters

したがって、このテーブルを次のように入力できます。

var dataSet = new DataSet1();
var da = new DataSet1TableAdapters.tabDataTableAdapter();
da.Fill(dataSet.tabData);

テーブルに列がNameありAge、名前が始まり"Jon"、年齢が30を超えるすべての行を検索するとすると、LINQを使用できますWhere

var jons = dataSet.tabData
                  .Where(r => r.Name.StartsWith("Jon") && r.Age > 30);
foreach (DataSet1.tabDataRow row in jons)
{
    Console.WriteLine("{0} is {1} years old", row.Name, row.Age);
}

r.NameLINQ-To-DataSetタイプsafe(は文字列とr.Ageint)を使用できることに注意してください。

于 2012-09-28T14:54:05.410 に答える