SQLの窓 イラストAC フリー素材

2019年08月14日

C# : Microsoft Access の接続で、他の RDBMS( ここでは MySQL ) にエクスポートを行う

OleDb で接続し、select 〜 into 構文の出力先を [ODBC; ... ] を使用した接続文字列の記述で SQL 上で直接参照してエクスポートを実現します。この際、キーは設定されないので2回目以降の insert 〜 select 構文で追加エクスポートが可能です

using System;
using System.Data.OleDb;

namespace Export_MySQL
{
	class Program
	{
		static void Main(string[] args)
		{
			OleDbConnection accdb;
			bool bError = false;
			string mysql_connection_string = "[ODBC;Driver={MySQL ODBC 5.3 Unicode Driver};server=localhost;database=lightbox;uid=root;pwd=]";

			using (accdb = new OleDbConnection())
			using (OleDbCommand command = new OleDbCommand())
			{
				string file_path = @"C:\Users\sworc\Documents\hanbaic-set\hanbaic.accdb";
				accdb.ConnectionString = $"Provider=Microsoft.ACE.OLEDB.12.0;Data Source={file_path};";
				try
				{
					accdb.Open();
					Console.WriteLine($"{file_path} で接続されました");
				}
				catch (Exception ex)
				{
					Console.WriteLine("接続エラーです:" + ex.Message);
					bError = true;
				}

				if (bError)
				{
					return;
				}

				// テーブルを新規作成してエクスポート
				string query = 
$@"select * into {mysql_connection_string}.社員マスタ_accdb
	from 社員マスタ";

				Console.WriteLine(query);

				try
				{
					// コマンドオブジェクトに接続をセット
					command.Connection = accdb;
					command.CommandText = query;
					command.ExecuteNonQuery();

					Console.WriteLine("エクスポートされました");
				}
				catch (Exception ex)
				{
					Console.WriteLine("SQL 実行エラーです:" + ex.Message);
					
					bError = true;
				}

				if (bError)
				{
					// 既存テーブルにエクスポート
					query = 
$@"insert into {mysql_connection_string}.社員マスタ_accdb
	select * from 社員マスタ";

					Console.WriteLine(query);

					try
					{
						// コマンドオブジェクトに接続をセット
						command.Connection = accdb;
						command.CommandText = query;
						command.ExecuteNonQuery();

						Console.WriteLine("エクスポートされました");
					}
					catch (Exception ex)
					{
						Console.WriteLine(query);
						Console.WriteLine("SQL 実行エラーです:" + ex.Message);
					}
				}
			}

			Console.ReadLine();
		}
	}
}


関連する記事

System.Data.OleDb で select into 構文を使って簡単に Microsoft Access のデータを他の データベースにエクスポートする

データーベース間 テーブルアクセス




【C#の最新記事】
posted by at 2019-08-14 01:35 | C# | このブログの読者になる | 更新情報をチェックする