2

私は何年もの間、DAO 経由で MS Access データベースを使用してきましたが、新しい手法を採用する必要があると感じています。

私のメイン アプリケーションはエンド ユーザー PC (サーバーなし) で実行され、オンザフライで作成および更新される共有データベースを使用します。アプリケーションを最初に実行すると、データベースが存在しないことが検出され、新しい空のデータベースが作成されます。

アプリケーションを実行しているすべてのローカル ユーザーは、この共有データベースでレコードを追加または更新できます。テンプレート、地域情報などを含む他の共有データベースがいくつかありますが、これらはアプリケーションによって直接更新されません。

アプリケーションの更新は随時リリースされ、新しい更新ごとにメイン データベースのバージョンがチェックされ、必要に応じてデータベースを最新の仕様にするコードが実行されます。これには、テーブルや列の作成または削除が含まれる場合があります。テンプレート データベースの新しいコピーも更新の一部として含まれています。

私たちのユーザーは、コンピューターに精通している必要はなく、アプリケーションによって提供される機能を超えて、あらゆる種類のデータベース管理ソフトウェアを実行する必要はありません。

DAO/Access ではすべてうまく機能しますが、SQL Express でそれを行う方法を見つけるのに苦労しています。データベースはユーザー固有の場所に散らばっているように見え、データベースの作成と更新は、プログラム コードだけで行うのはせいぜい厄介に思えます。

有望なように見える「Xcopy展開」の参照に出くわしましたが、共有されていないもののように疑わしいように聞こえる「ユーザーインスタンス」への参照があるようです。やったことがある方からのアドバイスよろしくお願いします。

4

3 に答える 3

1

私の進捗状況を更新するだけです。ここでの提案とコード プロジェクトに関するこの記事に触発されて: http://www.codeproject.com/Articles/63147/Handling-database-connections-more-easily、私は ADO.NET メソッドのラッパーを作成しました。私がよく知っているDAOのものに似ています。

DAO データベースと同じように使用できるクラスがあります。ExecuteReader、ExecuteNonQuery などの ADO メソッドを、SQL パラメーターを受け入れることができるオーバーロードでラップします。これにより、DAO レコードセットをリーダーに、OpenRecordset を ExecuteReader に、Execute を ExecuteNonQuery に直接置き換えることができます。

各メソッドは、親クラス インスタンスから接続を取得して解放します。これらは、トランザクションの状態に応じて、必要に応じて基礎となる接続を開いたり閉じたりします。そのため、トランザクションの一部であるメソッド呼び出しに対しては接続が開いたままになりますが、単一の呼び出しに対してはすぐに閉じられます。

ロバの作業の多くは単純な「検索と置換」で実行できるため、これにより私のプログラムの移行が大幅に簡素化されました。残りの問題は、比較的簡単に見つけて整理できます。

アドバイスをくれた Gord と Maxwell にもう一度感謝します。

于 2013-06-12T23:57:19.030 に答える
0

この回答は長すぎてすぐにはわかりません...しかし、マイクロソフトのページにアクセスしてください。 -a-sql-server-database-by-using-the-upsizing-wizard-HA010275537.aspx

これがお役に立てば幸いです!!

于 2013-05-30T13:33:40.350 に答える