C# 【データベース操作編】



目次


データベースへの接続

データベースに接続する処理について解説します。

プログラムソース

using System;
using System.Data.OleDb;

class MyCls {
   static void Main() {

   OleDbConnection Cn = new OleDbConnection();
   string strCn;

   strCn = @"Provider=SQLOLEDB;"
      + @"Data Source=localhost\SQLExpress;"
      + @"Initial Catalog=Database;User ID=sa;Password=sa;";

   Cn.ConnectionString = strCn;
   Cn.Open();

   Console.WriteLine("接続完了");
   Console.ReadKey();

   Cn.Close();
   Cn.Dispose();

   }
}

解説

OleDb.OleDbConnection

データベース接続に使用するクラス

OleDbConnection.ConnectionString = 接続文字列

接続文字列を設定します。

OleDbConnection.Open

データベースに接続します。

OleDbConnection.Close

データベースとの接続を切断します。


データの取得

データを取得する処理について解説します。

プログラムソース

using System; using System.Data; using System.Data.OleDb;
class MyCls {
   static void Main() {
   OleDbConnection Cn = new OleDbConnection();
   OleDbCommand Cmd = new OleDbCommand();
   OleDbDataAdapter Da = new OleDbDataAdapter();
   DataSet Ds = new DataSet();

   Cn.ConnectionString = @"Provider=SQLOLEDB;"
      + @"Data Source=localhost\SQLExpress;"
      + @"Initial Catalog=Database;User ID=sa;Password=sa;";
   Cn.Open();

   Cmd.Connection = Cn;
   Cmd.CommandText = @"SELECT * FROM 社員マスタ";
   Da.SelectCommand = Cmd;
   Da.Fill(Ds);

   foreach(DataRow dr in Ds.Tables[0].Rows) {
      Console.WriteLine(dr["社員コード"] + " " + dr["社員名"]);
   }
   Console.ReadKey();

   Cn.Close();
   Ds.Dispose(); Da.Dispose(); Cmd.Dispose(); Cn.Dispose();
   }
}

解説

OleDb.OleDbCommand

実行するSQL文を設定するクラス

OleDb.OleDbDataAdapter

データ取得に使用するクラス

DataSet

取得したデータを格納するクラス

OleDbDataAdapter.Fill(データセット)

データセットにデータを格納します。


SQLの実行

SQLを実行する処理について解説します。

プログラムソース

using System;
using System.Data.OleDb;
class MyCls {
   static void Main() {
   OleDbConnection Cn = new OleDbConnection();
   OleDbCommand Cmd = new OleDbCommand();
   string strSQL;

   Cn.ConnectionString = @"Provider=SQLOLEDB;"
      + @"Data Source=localhost\SQLExpress;"
      + @"Initial Catalog=Database;User ID=sa;Password=sa;";
   Cn.Open();

   strSQL = @"UPDATE 社員マスタ "
           + @"SET 部門コード = 3 "
           + @"WHERE 社員コード = 4";
   Cmd.Connection = Cn;
   Cmd.CommandText = strSQL;
   Cmd.ExecuteNonQuery();

   Console.WriteLine("更新完了");
   Console.ReadKey();

   Cn.Close();
   Cmd.Dispose(); Cn.Dispose();
   }
}

解説

OleDbCommand.ExecuteNonQuery

指定されたSQL文を実行します。


トランザクション処理

トランザクション処理について解説します。

プログラムソース

using System; using System.Data.OleDb;
class MyCls {
   static void Main() {
   OleDbConnection Cn = new OleDbConnection();
   OleDbCommand Cmd = new OleDbCommand();
   OleDbTransaction Trn = null; string strSQL;
   try {
      Cn.ConnectionString = @"Provider=SQLOLEDB;"
      + @"Data Source=localhost\SQLExpress;"
      + @"Initial Catalog=Database;User ID=sa;Password=sa;";
      Cn.Open();
      Trn = Cn.BeginTransaction();
      Cmd.Connection = Cn;
      Cmd.Transaction = Trn;
      strSQL=@"INSERT 社員マスタ VALUES(1,'社員A',1)";
      Cmd.CommandText = strSQL; Cmd.ExecuteNonQuery();
      strSQL=@"INSERT 所有資格マスタ VALUES(1,1,'簿記3級')";
      Cmd.CommandText = strSQL; Cmd.ExecuteNonQuery();
      Trn.Commit(); Console.WriteLine("成功");
   } catch(Exception) {
      Trn.Rollback(); Console.WriteLine("失敗");
   } finally {
      Cn.Close(); Cmd.Dispose(); Cn.Dispose(); Console.ReadKey();
   }
} }

解説

OleDbConnection.BeginTransaction

トランザクション処理を開始します。

OleDbTransaction.Commit

更新内容を確定する場合は、コミットします。

OleDbTransaction.Rollback

更新内容を破棄する場合は、ロールバックします。


データベース別の接続文字列

データベース別の接続文字列については、ご覧のとおりです。

プログラムソース

Oracle
strCn = @"Provider=OraOLEDB.Oracle;"
      + @"Data Source=ホスト名:1521/XEPDB1;"
      + @"User Id=MYUSER;Password=MYUSER;";
MySQL
strCn = @"DRIVER={MySQL ODBC 8.0 ANSI Driver};"
      + @"SERVER=localhost;PORT=3306;"
      + @"DATABASE=myschema;UID=root;PASSWORD=manager;";

※OdbcConnection使用時

Access
strCn = @"Provider=Microsoft.ACE.OLEDB.12.0;"
      + @"Data Source=C:\Users\home\Desktop\Database.accdb";