Exemple #1
0
    /// <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);
    }