SQLステートメントのリソース化
長いSQLステートメントをC#のソースコード内に直接記述すると扱いづらいため、 テキストファイルに記述してプログラムのリソースに登録する
- ソースコードに直接記述した場合
string stmt = new StringBuilder() .AppendLine( "select * from table1" ) .AppendLine( "left outer join table2" ) .AppendLine( "on table1.id = table2.id" ) .AppendLine( "where table1.id = 1;" ) .ToString();
- テキストファイルに記述した場合
select * from table1 left outer join table2 on table1.id = table2.id where table1.id = 1;
ファイルのリソース登録
- SQLステートメントを記述したファイルはこれを呼出すクラスのソースファイルと同じディレクトリに作成する(VisualStudioのソリューションエクスプローラーのContextMenu>追加>新しい項目>テキストファイル)
- 作成したファイルの プロパティ>ビルドアクション を “埋込リソース” に設定する
- ファイルに記述するSQLステートメントは sqlite がそのまま認識できるように utf-8 で記述する
- 拡張子を”.stmt”等に統一しておくとSQLステートメントであることが分かり易くて良い
リソース登録したファイルの内容を取得する
-
リソースのファイルパスを取得する
<呼出すクラスのNamespace>.<ファイル名>ファイル名>
string filePath = new StringBuilder() .Append( MethodBase.GetCurrentMethod().DeclaringType.Namespace ) .Append( "." ) .Append( "<ファイル名>" ) .ToString();
-
リソースからファイルの内容を読み込む
Stream stream = Assembly.GetExecutingAssembly().GetManifestResourceStream( filePath ); StreamReader reader = new StreamReader( stream ); string stmt = reader.ReadToEnd();
-
SQLステートメントは呼出すクラスの private static readonly string (定数)に定義しておくようにすると扱いやすい