/// <summary> /// パラメータを使用して新しいデータベースコマンドを発行します。 /// </summary> /// <param name="db">使用するデータベース</param> /// <param name="command">使用するSQL文。String.Formatのようなフォーマットで指定します。</param> /// <param name="parameters">使用するパラメータ</param> /// <returns>発行されたデータベースコマンドを返します。</returns> public static System.Data.IDbCommand Create( this System.Data.IDbConnection db, string command, params object[] parameters) { // コマンドを作成 var com = db.CreateCommand(); com.CommandText = command; // パラメータを置き換える List <object> coms = new List <object>(); for (int i = 0; i < parameters.Length; i++) { coms.Add("@com" + i); } com.CommandText = command = string.Format(command, coms.ToArray()); // 対応するパラメータクラスを検索する Type paramType = null; Assembly asm = db.GetType().Assembly; foreach (Type t in asm.GetTypes()) { //アセンブリ内のすべての型について、 //プラグインとして有効か調べる if (t.IsClass && t.IsPublic && !t.IsAbstract && t.GetInterface(typeof(IDbDataParameter).FullName) != null) { paramType = t; break; } } if (paramType == null) { throw new Exception("This DBConnection is not support."); } for (int i = 0; i < coms.Count; i++) { IDbDataParameter param = asm.CreateInstance(paramType.FullName) as IDbDataParameter; param.ParameterName = "@com" + i; param.Value = parameters[i]; com.Parameters.Add(param); } return(com); }