私は、TableAdapter は弱くて愚かであり、実際の開発者は DataAdapter を使用するだろうという多くの参考文献を見てきました。それが本当かどうかはわかりませんが、私はこの問題を調査しており、この「型指定されたデータセットに対する DataAdapter/TableAdapter」全体の臭いについて強調しています。
説明してみましょう...
Typed DataSet が xsd ファイルに定義されているとします。これで、そのスキーマに対してコードで DataAdapter を作成する準備が整いました... (ちなみに、OleDb を使用して、フォルダー...ここで呼び出すSQLサーバーストアドプロシージャはありません。単純な古い生のテーブルだけで、アクションの準備ができています。)
これまでの調査から、DataAdapter を Typed DataSet と組み合わせて使用する方法を以下に示します。私が間違っているかどうか教えてください。(そして、最後に大きな不満/質問があります。)
public DataTable GetJobsByCustomer(string CustNo)
{
OleDbConnection conn1 = new OleDbConnection(dbConnectionString);
conn1.Open();
LMVFP ds1 = new LMVFP(); //My Typed DataSet
string sqlstring = @"SELECT act_compda, contact, cust_num, est_cost, invoiced, job_hours,
job_invnum, job_num, job_remark, job_start, mach_cost, mat_cost, mat_mkup,
p_o_num, priority, quote_no, quoted_by, ship_date, ship_info, shop_notes, status, total_cost
FROM job_info
WHERE (cust_num = ?) AND (status = 'A')
ORDER BY priority";
OleDbDataAdapter JobsAdapter = new OleDbDataAdapter(sqlstring,conn1);
JobsAdapter.SelectCommand.Parameters.Add("?", OleDbType.VarChar,6).Value=CustNo;
JobsAdapter.Fill(ds1, "Jobs"); // A table schema in the Typed DataSet
return ds1.Jobs;
}
そういうことですか?それはうまくいくので、それは良いことです。実際、強く型付けされた動作は素晴らしいものです。
さて、私の不満.... xsd のテーブルのスキーマと一致するように、DAL メソッド (GetJobsByCustomer) で同じ exaxt SQL 構文を維持しなければならないということですか? 手作業でコーディングした SQL と xsd スキーマの間で、これほど多くのメンテナンスと分離が行われるのは気が狂っています。テキスト文字列を書いているので、エラーはまったくありません!! 動作するかどうかは、実行時に確認できます。
すべての SQL をコードで入力するとき、コード化された SQL を xsd テーブル スキーマと同期させておくために前後を調べなければならないのはひどいことです。
確かに私は何かが欠けています。
なんて茶番。型指定されたデータセットは、スキーマから生成されるため、優れた IntelliSense などで動作しますが、結局のところ、型指定されたスキーマに一致する SQL を記述するのは面倒です。彼らがしたことは、頭痛を新しい領域に移しただけです。
これをより良くする何かが欠けていると教えてください。