データベースの接続先を指定する
前回までは、データベースの接続先をプログラム内にハードコーディングしていました。しかしこれでは、接続先のデータベースが変更になるたびにプログラムを修正する必要がでてきてしまいます。そこで、アプリケーションの設定ファイルを作成し、データベースの接続先を変更できるようにしておきましょう。
アプリケーションの設定ファイル(configファイル)の作成は、次のような手順になります。
- ソリューションエクスプローラのPropertiesフォルダを開き、Settings.settingsをダブルクリックします。
- プロパティ名を設定します。
- プロパティ値を設定します。
- 値の設定を行うと、プロジェクトの構成ファイルとしてapp.configファイルが作成されます。
サンプルでは、プロパティ名称を「ConnectionString」に設定し、値には接続文字列を設定しています。
プログラムをコンパイルすると、実行フォルダに「実行ファイル名称.config」ファイルが作成されます(※サンプルの場合は「WindowsFormsApplication1.exe.config」ファイル)。後は、プログラム内で設定値の値を接続文字列として利用するだけです。
// コネクションの生成 SqlConnection connection = new SqlConnection(); // 接続文字列として設定ファイルの値を設定する。 connection.ConnectionString = Properties.Settings.Default.ConnectionString;
このようにすることで、アプリケーションを実行するときにconfigファイルの設定値を取得するようになります。接続先を変更するときはconfigファイルの中身を変更するだけでよく、再度コンパイルしなおす必要がありません(※サンプルアプリケーションを実行する際は、実際の環境に合わせて接続文字列を変更してください)。
C1Reportコントロールを使った帳票の出力条件を設定する
次は帳票出力に関する部分です。これまで、C1Reportコントロールを利用して作成した帳票は、レポート定義ファイルに設定されていたRecordSourceに合わせてデータが出力されていました。今回は、さらなる機能拡張として出力するデータ条件を設定してみましょう。
すぐに思いつくのは、検索条件を設定する画面を用意し、入力された条件に合わせてデータ取得するSQLを変更する、というような流れの方法です。ソースコードはこんな感じになるでしょうか。
// 条件設定画面の表示 // 条件内容に基いてSQL文を作成 // RecordSourceプロパティにSQL文を設定 this.c1Report1.DataSource.RecordSource = "SQL文"; // ドキュメントをプレビュー表示する。 this.c1PrintPreviewControl1.Document = this.c1Report1.Document;
しかしこのやり方だと、日付の範囲指定など簡単な条件を指定させる場合などでも、検索条件の入力画面を作成する必要があります。
そこで、ここでは同様の機能をプログラムなしで実現するために、C1Reportコントロールに用意されているパラメータクエリー機能を利用します。そのためにはC1Reportデザイナ上で、SQL構文を設定する際にパラメータを合わせて設定しておく必要があります。
前回までの場合、下記のSQL構文が設定されていました。
これに日付の範囲指定を行えるようにしましょう。まず、取得するデータの条件としてWHERE句に日付の範囲指定のSQLを書き加えます。この中に検索条件値にあたるものとして「パラメータ」を記述します。
WHERE Sales.Date Between [パラメータ1] And [パラメータ2]
そして、[パラメータ1][パラメータ2]の「パラメータ名称」「データ型」「デフォルト値」を指定します。指定するには、SQL構文よりも前でPARAMETERS句を宣言します。
PARAMETERS [Beginning Date] DateTime 1/1/2008,[Ending Date] DateTime 1/1/2010; SELECT ・・・・ FROM ・・・・ WHERE Sales.Date Between [Beginning Date] And [Ending Date] ・・・・
以上で準備は終了です。では前回までと同じように実行してみましょう。
プレビュー画面が表示される前に、「レポートパラメータの入力」ダイアログが表示されました。パラメータを入力後、OKボタンをクリックすると、条件に合うデータのみが表示されたかと思います。
このように簡単な条件指定の場合、C1ReportコントロールのRecordSourceプロパティに直接パラメータを設定することにより、プログラムなしでの絞り込みを行うことができるようになります。また、「レポートパラメータの入力」ダイアログはパラメータの数やデータ型に合わせて動的に生成されます。
なお、接続先のデータベースについては、「データベースの接続先を指定する」の項と同様に、ConnectionStringプロパティに設定ファイルの値を設定することで変更が可能です。
// ConnectionStringプロパティに設定値を設定する this.c1Report1.DataSource.ConnectionString = "設定ファイルの設定値";