C#にてSQL Server を使用する方法を説明します。
using で System.Data.SqlClient を追加します。
他のDBに接続する場合もほぼ同様となります。(System.Data.Odbc、System.Data.OleDb)など
またオープンソース等も同等の関数が用意されている場合があります。
Postgre (Npgsql)、SQLite(System.Data.SQLite)、MySql(MySql.Data.MySqlClient)などライセンスには注意してください。
SQL Serverに接続
単にSQL Server に接続するだけのサンプルです。(例はD:\DB\TestDB.mdfのデータベースに接続しています)
using System; using System.Data; using System.Data.SqlClient; namespace DBTest { class sample { public void Connect01() { SqlConnectionStringBuilder builder = new SqlConnectionStringBuilder(); builder.DataSource = @".\SQLEXPRESS"; builder.AttachDBFilename = @"D:\DB\TestDB.mdf"; builder.IntegratedSecurity = true; builder.UserInstance = true; builder.MultipleActiveResultSets = true; String ConnectString = builder.ToString(); SqlConnection sqlConnect = new SqlConnection(); sqlConnect.ConnectionString = ConnectString; // 接続します。 sqlConnect.Open(); // 接続を解除します。 sqlConnect.Close(); sqlConnect.Dispose(); } } }
レコードを追加する(INSERT)
データベースにINSERTする方法です。以下の例はSqlCommandのParametersにて追加をしています。
using System; using System.Data; using System.Data.SqlClient; namespace DBTest { class sample { public void Connect02() { string ConnectString = @"Data Source=.\SQLEXPRESS;AttachDbFilename=D:\DB\TestDB.mdf;Integrated Security=True;MultipleActiveResultSets=True;User Instance=True"; using (SqlConnection sqlConnect = new SqlConnection(ConnectString)) { sqlConnect.Open(); string sqlStr = "INSERT INTO Table_1 (Item1,Item2) VALUES (@Item1,@Item2)"; using (SqlCommand command = new SqlCommand(sqlStr, sqlConnect)) { String val = "AAAAA"; SqlParameter p1 = new SqlParameter("@Item1", val); command.Parameters.Add(p1); //SqlParameterの省略追加 command.Parameters.Add("@Item2", SqlDbType.Char).Value = "XXXX2"; command.ExecuteNonQuery(); } sqlConnect.Close(); //usingは省略可能 } } } }
※エスケープ処理には注意が必要です。Parametersが行ってますが、オープンソース等も同じとはかぎりません。
DataTableにレコードを読み込む
DataTableにSELECT文で指定したレコードデータを読み込む例です。
using System; using System.Data; using System.Data.SqlClient; namespace DBTest { class sample { public void Connect03() { DataTable tbl = new DataTable(); string ConnectString = @"Data Source=.\SQLEXPRESS;AttachDbFilename=D:\DB\TestDB.mdf;Integrated Security=True;MultipleActiveResultSets=True;User Instance=True"; using (SqlConnection sqlConnect = new SqlConnection(ConnectString)) { sqlConnect.Open(); using (SqlCommand command = sqlConnect.CreateCommand()) { command.CommandText = @"SELECT * FROM Table_1"; SqlDataReader reader = command.ExecuteReader(); tbl.Load(reader); reader.Close(); } sqlConnect.Close(); //省略可 } } } }
※注意としては、データ量が大きすぎるとデータをDataTableに読み込みきれずプログラムが落ちます。
レコード数を取得する
SELECT のCOUNTにて レコード数を取得する例です。
using System; using System.Data; using System.Data.SqlClient; namespace DBTest { class sample { public void Connect04() { string ConnectString = @"Data Source=.\SQLEXPRESS;AttachDbFilename=D:\DB\TestDB.mdf;Integrated Security=True;MultipleActiveResultSets=True;User Instance=True"; int Count; using (SqlConnection sqlConnect = new SqlConnection(ConnectString)) { sqlConnect.Open(); using (SqlCommand command = new SqlCommand("SELECT COUNT(*) FROM Table_1", sqlConnect)) { Count = (int)command.ExecuteScalar(); } sqlConnect.Close(); //省略可 } } } }
スキーマ情報の取得
レコードフィールドの属性の取得方法の例です。
using System; using System.Data; using System.Data.SqlClient; namespace DBTest { class sample { public void Connect05() { string ConnectString = @"Data Source=.\SQLEXPRESS;AttachDbFilename=D:\DB\TestDB.mdf;Integrated Security=True;MultipleActiveResultSets=True;User Instance=True"; DataTable AllTable; DataTable schemaTable; using (SqlConnection sqlConnect = new SqlConnection(ConnectString)) { sqlConnect.Open(); //全てのテーブルを取得します。 AllTable = sqlConnect.GetSchema("Tables"); using (SqlCommand command = sqlConnect.CreateCommand()) { command.CommandText = "SELECT * FROM Table_1"; SqlDataReader dtReader = command.ExecuteReader(); //テーブル内の列情報を取得します。 schemaTable = dtReader.GetSchemaTable(); dtReader.Close(); } sqlConnect.Close(); //省略可 } } } }
トランザクション
データベースにトランザクションを行う例です。
using System; using System.Data; using System.Data.SqlClient; namespace DBTest { class sample { public void Connect06() { SqlConnectionStringBuilder builder = new SqlConnectionStringBuilder(); builder.DataSource = @".\SQLEXPRESS"; builder.AttachDBFilename = @"D:\DB\TestDB.mdf"; builder.IntegratedSecurity = true; builder.UserInstance = true; builder.MultipleActiveResultSets = true; String ConnectString = builder.ToString(); using (SqlConnection sqlConnect = new SqlConnection(ConnectString)) { sqlConnect.Open(); using (SqlCommand command = sqlConnect.CreateCommand()) { //トランザクション処理を開始する using (SqlTransaction tran = sqlConnect.BeginTransaction()) { //コマンドをトランザクション処理に組み入れる command.Transaction = tran; try { command.CommandText = "UPDATE Table_1 SET Item2 = 'A0001'"; command.ExecuteNonQuery(); //コミット処理 tran.Commit(); } catch (Exception ex) { //ロールバック処理 tran.Rollback(); } } } sqlConnect.Close(); //省略可 } } } }