この記事では、C#からSQL Serverのテーブルデータを取得する方法についてご説明します。
【動画】C#からSQL Serverのテーブルデータを取得する実際の動き
本題に入る前に、まずは次の動画をご覧ください。
SqlConnectionインスタンスを生成し、SQL Serverのデータベースに接続するのに必要な接続文字列を参照してSQL Serverのデータベースに接続します。
SQL Serverのデータベースに接続したら、SQLのSELECT文を実行してテーブルデータを取得します。
取得したテーブルデータをデータテーブルに格納してコンソールに表示させています。
今回は取得したテーブルデータを表示する方法として、コンソールへの表示を行っています。
コードの流れ
SQL Serverのテーブルデータの例
今回は次のSQL Serverのテーブルデータを用意しました。
今回はinfoNoが4のPersonのデータ(三浦雄介)を取得してみたいと思います。
取得した結果を「出力」の画面に表示させた結果は下の通りです。
「出力」の画面に、Accessのテーブルから取得した、名前のデータ(三浦雄介)が表示されており、正常にSQL Serverのテーブルからデータが取得できたことが確認できます。
C#のコード(例)
App.configのコード
<?xml version="1.0" encoding="utf-8" ?> <configuration> <startup> <supportedRuntime version="v4.0" sku=".NETFramework,Version=v4.7.2" /> </startup> <appSettings> <!-- 接続文字列 --> <add key="DBConnString" value="Data Source=(LocalDB)\MSSQLLocalDB;Initial Catalog={0};Integrated Security=True" /> <!-- SQL Serverのデータベース名 --> <add key="DBName" value="CS_01" /> </appSettings> </configuration>
注目すべきコード
見て頂きたいのは8行目から11行目です。
8行目は、SQL Serverのデータベースに接続するのに必要な接続文字列を「DBConnString」というキーに設定しているコードです。
11行目は、SQL Serverのデータベース名を「DBPath」というキーに設定しているコードです。
「DBConnString」と「DBPath」のキーの値をフォーム側のコードが参照して使います。
ちなみに、今回接続しようとしているデータベース「CS_01」は下の画像にあるデータベースです。
フォームのコード
using System; using System.Windows.Forms; using System.Configuration; using System.Data; using System.Data.SqlClient; namespace wcfs_0006 { public partial class Form1 : Form { public Form1() { InitializeComponent(); } private void button1_Click(object sender, EventArgs e) { // App.configのappSettingsタグ内に記述した「DBConnString」のキーの値を取得して変数「connStrTemplate」に格納する string connStrTemplate = ConfigurationManager.AppSettings["DBConnString"]; // App.configのappSettingsタグ内に記述した「DBName」のキーの値を取得して変数「DBName」に格納する string DBName = ConfigurationManager.AppSettings["DBName"]; // connStrTemplateの{0}の部分を、「DBName」の値に置き換える string connectionString = string.Format(connStrTemplate, DBName); // SqlConnectionインスタンスを生成 using (SqlConnection connection = new SqlConnection(connectionString)) { // SQL Serverのデータベース「CS_01」に接続する connection.Open(); // SELECT文を用意する string sql = "SELECT person FROM tbl_test WHERE infoNo = 4"; // SqlCommandインスタンスを生成する SqlCommand command = new SqlCommand(sql, connection); // DataTableインスタンスを生成する DataTable dataTable = new DataTable(); // SqlDataAdapterインスタンスを生成する SqlDataAdapter adapter = new SqlDataAdapter(command); // データテーブルにデータを格納する adapter.Fill(dataTable); // 行の数だけ処理を繰り返すループ foreach (DataRow row in dataTable.Rows) { // 列の数だけ処理を繰り返すループ foreach (DataColumn column in dataTable.Columns) { // 現在の行と列の組み合わせから該当するデータテーブルの値をコンソールに出力する System.Console.WriteLine(row[column] + "\t"); } } // SQL Serverのデータベース「CS_01」への接続を閉じる connection.Close(); } } } }
注目すべきコード①
最初に見て頂きたいのは5行目です。
using System.Data.SqlClient;
「System.Data.SqlClient」はSqlConnectionクラスを使うのに必要な名前空間です。
SqlConnectionクラスからインスタンスを生成し、SqlConnectionインスタンスのOpenメソッドを実行することでSQL Serverのデータベースに接続することができます。
注目すべきコード②
次に見て頂きたいのは19行目から22行目です。
// App.configのappSettingsタグ内に記述した「DBConnString」のキーの値を取得して変数「connStrTemplate」に格納する string connStrTemplate = ConfigurationManager.AppSettings["DBConnString"]; // App.configのappSettingsタグ内に記述した「DBName」のキーの値を取得して変数「DBName」に格納する string DBName = ConfigurationManager.AppSettings["DBName"];
コードの説明
以上のコードは、App.configのappSettingsタグ内に記述した「DBConnString」「DBName」のキーの値を取得して変数に格納するコードです。
「DBConnString」のキーの値は変数「connStrTemplate」に、「DBName」のキーの値は変数「DBName」に格納します。
注目すべきコード③
次に見て頂きたいのは25行目です。
// connStrTemplateの{0}の部分を、「DBName」の値に置き換える string connectionString = string.Format(connStrTemplate, DBName);
コードの説明
以上のコードは、connStrTemplateの{0}の部分を、「DBName」の値に置き換える処理のコードです。
connStrTemplateの{0}の部分を、「DBName」の値に置き換える、とはどういうことかというと、{0}の部分をSQL Serverのデータベース名に置き換える、ということです。
今回は接続文字列と、SQL Serverのデータベース名を分けてそれぞれ「DBConnString」と「DBName」とキーを分けてあるので、フォームのコード側で接続文字列と、SQL Serverのデータベース名を一つの文字列に組み立てています。
参考までに、string.Format実行前と実行後の状態を以下にお見せします。
以上のように、{0}の部分が「CS_01」に置き換わっています。
“Data Source=(LocalDB)\\MSSQLLocalDB;Initial Catalog={0};Integrated Security=True”
“Data Source=(LocalDB)\\MSSQLLocalDB;Initial Catalog=CS_01;Integrated Security=True”
注目すべきコード④
次に見て頂きたいのは28行目から31行目です。
// SqlConnectionインスタンスを生成 using (SqlConnection connection = new SqlConnection(connectionString)) { // SQL Serverのデータベース「CS_01」に接続する connection.Open();
コードの説明
以上のコードは、SqlConnectionインスタンスを作成し、Accessのデータベースファイル接続している処理のコードです。
コードの詳細
28行目のコードでは、App.configから取得したSQL Serverのデータベースの接続情報(connectionString)を元にSqlConnectionインスタンスを作成しています。
31行目のコードでは、生成したSqlConnectionインスタンスのOpenメソッドを実行してSQL Serverのデータベースに接続しています。
注目すべきコード⑤
次に見て頂きたいのは34行目から61行目です。
// SELECT文を用意する string sql = "SELECT person FROM tbl_test WHERE infoNo = 4"; // SqlCommandインスタンスを生成する SqlCommand command = new SqlCommand(sql, connection); // DataTableインスタンスを生成する DataTable dataTable = new DataTable(); // SqlDataAdapterインスタンスを生成する SqlDataAdapter adapter = new SqlDataAdapter(command); // データテーブルにデータを格納する adapter.Fill(dataTable); // 行の数だけ処理を繰り返すループ foreach (DataRow row in dataTable.Rows) { // 列の数だけ処理を繰り返すループ foreach (DataColumn column in dataTable.Columns) { // 現在の行と列の組み合わせから該当するデータテーブルの値をコンソールに出力する System.Console.WriteLine(row[column] + "\t"); } } // SQL Serverのデータベース「CS_01」への接続を閉じる connection.Close();
コードの説明
以上のコードは、Accessのテーブルデータを取得し、取得したデータをコンソールに出力する処理のコードです。
コードの詳細
34行目のコードでは、SELECT文を用意しています。
SELECT文は、infoNoが4に該当するpersonのデータを取得します。
37行目のコードでは、SqlCommandインスタンスを生成します。
SELECT文を実行するために、SELECT文とSqlConnectionインスタンス(connection)を指定してSqlCommandクラスからインスタンスを生成します。
40行目のコードでは、DataTableインスタンスを生成します。
43行目のコードでは、SqlDataAdapterインスタンスを生成します。
46行目のコードでは、Fillメソッドを実行するとSELECT文が実行されて、取得したデータが「dataTable」に格納されます。
49行目のコードは行の数だけ処理を繰り返すループです。
取得したデータが10件ある場合は10回ループ内の処理を繰り返します。
52行目のコードは列の数だけ処理を繰り返すループです。
取得したデータが5列ある場合は5回ループ内の処理を繰り返します。
55行目のコードでは、現在の行と列の組み合わせから該当するデータテーブルの値をコンソールに出力します。
61行目のコードでは、Accessのデータベースファイルの接続を閉じています。
動作確認
「SQL Serverのテーブルデータの例」をご覧ください。
【注意】参照設定が必要です
一つ注意点があるのですが、先ほどのコードを動かすには参照設定が必要です。
「System.Configuration」の項目を追加しないと、「ConfigurationManager」が存在しないとのことでエラーになってしまいます。
本コードを実行する際は、「System.Configuration」の項目を追加しましょう。
最後に
この記事では、C#からSQL Serverのテーブルデータを取得する方法についてご説明しました。
C#からSQL Serverのテーブルデータを取得したいときは本記事を参考にしてみてくださいね。
プログラミングのスキルを習得するなら
プログラミングのスキルを習得したい、今のスキルをもっと高めたい、そう考えているなら「プログラミングスクール」がおすすめです。
プログラミングのスキルの基礎を身につけるなら「TechAcademy」で1週間の無料体験があるので、これで「プログラミングの基礎」を学ぶのにおすすめですよ。