1

私は、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 を記述するのは面倒です。彼らがしたことは、頭痛を新しい領域に移しただけです。

これをより良くする何かが欠けていると教えてください。

4

2 に答える 2

1

LINQ to SQL と EF に対する Adam の評価には賛成ですが、サードパーティの DBMS がサポートされていないため、これは (まだ) あなたの選択肢にはならないと思います。一方で、サードパーティの ORM (NHibernate など) を使用することもできます。

おそらく私は十分な注意を払っていませんが、TableAdapters と DataAdapters を避ける正当な理由を知りません。リンクを 1 つか 2 つ持っていますか?

于 2009-04-02T19:53:21.307 に答える
0

何かが欠けているとは思いません。このタイプのコードを維持することは決して楽しいことではありません。ありがたいことに、LINQ to SQL と Entity Framework を使用することで、モデル オブジェクトとデータベースの同期を維持するために必要な手作業によるコード メンテナンスの量を減らすことができます。

于 2009-04-02T19:27:42.820 に答える