インタフェースベースでADO.NET
MySQLとConnector/NetのおかげでADO.NETで手軽に遊べるようになったので、色々弄ってます。普段、Oracle使っているといってもPro*C/C++で動的SQLなのでODBCやらADO.NETやらは、あまり詳しくなかったり。(^^;
ここんとこ、日記で挙げていたコードはMySQLベッタリだったので、MySQL依存部分をなくしてみることに。まずは、接続クラス名や接続文字列を構成ファイルに追い出します。
<?xml version="1.0" encoding="utf-8" ?> <configuration> <appSettings> <add key="ConnectionClass" value="MySql.Data.MySqlClient.MySqlConnection, MySql.Data" /> <add key="ConnectionString" value="Data Source=localhost;Database=mydb;User Id=user;Password=pass;" /> </appSettings> </configuration>
で、インタフェースに対して操作を行う。
using System; using System.Data; using System.Configuration; class Program { static IDbConnection GetConnection() { // 接続クラス名 string cls = ConfigurationSettings.AppSettings["ConnectionClass"]; // 接続文字列 string str = ConfigurationSettings.AppSettings["ConnectionString"]; return Activator.CreateInstance(Type.GetType(cls), new object{str}) as IDbConnection; } static void Main(string args) { if (args.Length < 0) return; // 引数からSQLを取得 string sql = args[0]; IDbConnection conn = null; try { conn = GetConnection(); IDbCommand cmd = conn.CreateCommand(); cmd.CommandText = sql; conn.Open(); IDataReader r = cmd.ExecuteReader(); while (r.Read()) { Console.WriteLine(r[0]); } r.Close(); } catch (Exception e) { Console.WriteLine(e.Message); } finally { if (conn != null) { conn.Close(); conn = null; } } } }
SQL構文の違いとかあるので、まんま他のデータベースへ移行ってわけにはいかないけど。