public static IDbCommand CreateCommand(this IDbProvider dbProvider, string sql, CommandType cmdType = CommandType.Text, Func <IDbCommand, IDbDataParameter[]> getParas = null) { var conn = dbProvider.CreateConnection(); if (conn.State != ConnectionState.Open) { conn.Open(); } var trans = conn.BeginTransaction(); var cmd = dbProvider.CreateCommand(conn); IDbDataParameter[] paras = null; if (getParas != null) { paras = getParas(cmd); } dbProvider.PrepareCommand(ref cmdType, ref sql, ref paras); cmd.CommandType = cmdType; cmd.CommandText = sql; if (paras != null && paras.Length > 0) { foreach (var p in paras) { dbProvider.AttachParameter(cmd, p); } } cmd.Transaction = trans; return(cmd); }