1

私は、任意のSQL Serverデータベースに接続できるアプリケーションを作成しているため、スタンドアロンと見なすことができます。つまり、アプリケーションが最初に行うことは、接続文字列を要求することです。このアプリケーションはデータベースでクエリやその他のタスクを実行するため、SQLステートメントが必要です。

したがって、事前定義されたデータベースを使用してアプリケーションを具体的に特定するつもりはないので、C#アプリケーションからSQLステートメントを実行するにはどうすればよいですか?アプリケーションは任意のデータベースに接続できるため、ストアドプロシージャは問題外だと思います。

アプリケーション自体にSQLステートメントを簡単にハードコーディングすることはできますが、このような場合のベストプラクティスのアプローチは何でしょうか。アプリケーションにSQLステートメントを埋め込んで、基本的に同じアプリケーションにビジネスロジックとデータ層を含めることは問題ありませんか?私はこれに関して論理的または技術的な問題はありません。それが有効なアプローチであるかどうか、または経験豊富な開発者に眉をひそめられるかどうかだけを考えていますか?

Entity Frameworkについて聞いたことがありますが、正直に言うと、それが何をするのか、それが有効かどうかはわかりません。これまで、すべてのデータ駆動型アプリケーションはストアドプロシージャを利用してきましたが、実行時に指定されたデータベースで使用できるアプリケーションを作成するのはこれが初めてです。

ありがとう!

4

3 に答える 3

0

はい、SQLクエリをアプリケーションに埋め込むことは許容されます。それらをコードにハードコーディングする代わりに、リソースファイルを使用できます。接続文字列プロバイダー名を使用すると、接続先のデータベースに適したSQLダイアレクトを選択できます。

同様のアプローチを使用するイベントストアSQL永続性ファクトリResolveDialectメソッドを参照してください。これを使用して、ストアドプロシージャの作成と呼び出しに必要な構文を決定しますが、アプリケーションは(おそらく)データベースのメタデータ/構造を返すSQLを呼び出す必要があります。彼らが呼び出すSQLは異なりますが、このパターンはアプリケーションに最適であり、さまざまなデータベースをサポートできます。

達成しようとしていることによっては、データベース内のテーブル、列などのメタデータを表す内部モデルを作成する必要がある場合もあります。

[編集]

申し訳ありませんが、SQLサーバーのみであるというコメントを見ました。したがって、SQLダイアレクトは、SQLクエリの構造を決定するためにクライアントによってさらに使用される可能性があります(たとえば、コードコンプリートの場合)。

于 2012-09-08T10:38:14.740 に答える
0

クエリビルダー(しゃれは意図されていません)を構築しているので、データベースカタログをクエリする必要があります。これ、同じ種類のDBMSの下にあるすべてのデータベースで同じです。これにより、任意のデータベース内のテーブルやその他のオブジェクトのリストを取得できるため、それらをユーザーに提示できます。

純粋なADO.NETとORMのどちらを使用するかは、直交する質問です。

于 2012-09-08T10:46:32.193 に答える
-2

.Netで開発している場合は、Microsoftエンタープライズライブラリの使用を検討する必要があります

スケーラブルなアプリケーションの構築に関する包括的な詳細を提供します。

編集:

さまざまなデータベースエンジンを処理するためにも、さまざまなドライバーを処理することを検討する必要があります。すべてのデータベースで同じクエリを実行することはできない場合があります。これらのデータベースは通常、異なるフレーバーのSQLに従うためです。たとえば、mssqlはTSqlを使用しますが、OracleはPL-Sqlを使用します。

別の解決策は、Ansisql標準に従うことです。

于 2012-09-08T10:11:27.307 に答える