0

SQL Server 上のデータベースへのアクセスを多用するビジネス Winforms アプリケーションがあります。

すべてのデータベース ロジックは、ビューとストアド プロシージャの形式で既にデータベースに含まれています。

ただし、特別な必要性が生じたため、ストアド プロシージャではなく、winforms アプリケーション自体に 10 ~ 20 個のクエリを埋め込む必要があります。小さなクエリの場合、実行するために SqlDataAdapter に渡される文字列にすべて割り当てられた各行を "+" 記号を使用して連結するだけです。しかし、数十行の大きなクエリの場合、これは実用的ではありません。

コードのどこかに「qryPrivateMonthlyReport.sql」のような名前のクエリを作成するファイルを保存する方法があるのだろうか (リソースである可能性がありますか?)、さらに読み取って SqlDataAdapter で実行するために使用します。

前もって感謝します、

4

3 に答える 3

2

それらをリソースとして追加します。これにより、ファイルのテキストを単純なProperties.Resources.MyFileResourceNameHere. これは、Visual Studio プロジェクトに大きなクエリを埋め込むために見つけた最もクリーンなソリューションです。

また、それらを埋め込む場合は、「+」演算子を使用するのではなく、リテラル文字列 @"multi-line query here"; を使用します。これは、行間に「+」を必要としません。

編集:以下のコメントのいくつかは、SQLを別のリソースファイルに保持することに関連する余分な間接性について言及しており、私は同意します. 私の経験則は次のとおりです。

  • 1 ライナーの場合は、通常の文字列定数として保持します。

  • 複数行のステートメントの場合は、リテラル文字列定数 (つまり@"") を使用して、改行やインデントを維持し、多くの" +.

  • ファイルが大きすぎて SQL 構文の強調表示 (SQL Management Studio や Visual Studio など) が必要な場合は、それをリソース ファイルにして、.NET コードから独立してファイルを編集およびテストできるようにします。

于 2013-06-11T20:55:31.237 に答える
1

それらをコードと共に格納する必要がある場合は、(必要な柔軟性のレベルに応じて) 定数文字列リテラルとしてデータ アクセス クラスに配置できます。

例えば

        private const string GetAQuery =  @"select * from a
                                          where b = c";

デバッグするときは、少し奇妙なインデントを受け入れる必要があります。Sako73 が述べたように、それらをリソースに追加できますが、これにより、特定の状況で価値があるかどうかを判断しなければならないレベルの間接性が追加されます。

于 2013-06-11T21:07:15.587 に答える