Example #1
0
        /// <summary>
        /// 执行SQL语句或存储过程,返回影响行数
        /// </summary>
        /// <param name="sql">参数化的SQL语句或存储过程</param>
        /// <param name="param">参数</param>
        /// <param name="timeout">超时时间,单位为秒</param>
        /// <param name="transaction">事务</param>
        /// <param name="commandType">命令类型</param>
        /// <returns>影响行数</returns>
        public int Execute(string sql, Parameters param, int?timeout = null, CommandType?commandType = null)
        {
            if (string.IsNullOrWhiteSpace(sql))
            {
                throw new ArgumentException("sql should not be null", "sql");
            }

            using (var watch = new ElapsedWatch("Execute"))
                using (var conn = GetConnection())
                {
                    conn.Open();
                    return(conn.Execute(sql, param?.Result, conn.Transaction, GetTimeout(timeout), commandType));
                }
        }
Example #2
0
        /// <summary>
        /// 查询并返回实体集合
        /// </summary>
        /// <typeparam name="T">实体类型</typeparam>
        /// <param name="sql">参数化的SQL语句或存储过程</param>
        /// <param name="param">参数</param>
        /// <param name="timeout">超时时间,单位为秒</param>
        /// <param name="commandType">命令类型</param>
        /// <param name="buffered">是否缓存</param>
        /// <returns>实体集合</returns>
        public T[] Query <T>(string sql, Func <Parameters, Parameters> param = null, int?timeout = null, CommandType?commandType = null, bool buffered = true)
        {
            if (string.IsNullOrWhiteSpace(sql))
            {
                throw new ArgumentException("sql should not be null", "sql");
            }

            using (var watch = new ElapsedWatch("Query"))
                using (var conn = GetConnection())
                {
                    conn.Open();
                    return(conn.Query <T>(sql, param.ToDapperParameters(), conn.Transaction, buffered, GetTimeout(timeout), commandType).ToArray());
                }
        }
Example #3
0
        /// <summary>
        /// 执行SQL语句或存储过程,select单个值返回
        /// </summary>
        /// <param name="sql">参数化的SQL语句或存储过程</param>
        /// <param name="param">参数</param>
        /// <param name="timeout">超时时间,单位为秒</param>
        /// <param name="transaction">事务</param>
        /// <param name="commandType">命令类型</param>
        /// <returns>select单个值返回</returns>
        public T ExecuteScalar <T>(string sql, Parameters param, int?timeout = null, CommandType?commandType = null)
        {
            if (string.IsNullOrWhiteSpace(sql))
            {
                throw new ArgumentException("sql should not be null", "sql");
            }

            using (var watch = new ElapsedWatch("ExecuteScalar"))
                using (var conn = GetConnection())
                {
                    conn.Open();
                    var o = conn.ExecuteScalar(sql, param?.Result, conn.Transaction, GetTimeout(timeout), commandType);
                    return(o == null || o == DBNull.Value ? default(T) : (T)o);
                }
        }
Example #4
0
        /// <summary>
        /// 返回bool结果
        /// </summary>
        /// <param name="sql">参数化的SQL语句或存储过程</param>
        /// <param name="param">参数</param>
        /// <param name="timeout">超时时间,单位为秒</param>
        /// <param name="transaction">事务</param>
        /// <param name="commandType">命令类型</param>
        /// <param name="buffered">是否缓存</param>
        /// <returns>结果</returns>
        public bool Bool(string sql, Func <Parameters, Parameters> param = null, int?timeout = null, CommandType?commandType = null)
        {
            if (string.IsNullOrWhiteSpace(sql))
            {
                throw new ArgumentException("sql should not be null", "sql");
            }

            using (var watch = new ElapsedWatch("ExecuteScalar"))
                using (var conn = GetConnection())
                {
                    conn.Open();
                    var o = conn.ExecuteScalar(sql, param.ToDapperParameters(), conn.Transaction, GetTimeout(timeout), commandType);
                    return(Convert.ToBoolean(o));
                }
        }
Example #5
0
        /// <summary>
        /// 根据列名分割出若干个实体,经convert转换后输出.
        /// e.g. 列名: "A1,A2,A3,B1,B2,B3,C1,C2"中"A1,A2,A3"对应T1, "B1,B2,B3"对应T2,"C1,C2"对应T3 => splitOn = "B1,C1"
        /// </summary>
        /// <param name="convert">根据各类型转换出所需结果</param>
        /// <param name="splitOn">用以分割的字段名集合,以英文逗号分隔</param>
        /// <param name="sql">参数化的SQL语句或存储过程</param>
        /// <param name="param">参数</param>
        /// <param name="timeout">超时时间,单位为秒</param>
        /// <param name="transaction">事务</param>
        /// <param name="commandType">命令类型</param>
        /// <param name="buffered">是否缓存</param>
        /// <returns>经convert转换后的结果集</returns>
        public TResult[] Query <T1, T2, T3, TResult>(Func <T1, T2, T3, TResult> convert, string splitOn, string sql, Func <Parameters, Parameters> param = null, int?timeout = null, CommandType?commandType = null, bool buffered = true)
        {
            if (convert == null)
            {
                throw new ArgumentNullException("convert");
            }

            if (string.IsNullOrWhiteSpace(splitOn))
            {
                throw new ArgumentException("splitOn");
            }

            if (string.IsNullOrWhiteSpace(sql))
            {
                throw new ArgumentException("sql should not be null", "sql");
            }

            using (var watch = new ElapsedWatch("Query[T1, T2, T3]"))
                using (var conn = GetConnection())
                {
                    conn.Open();
                    return(conn.Query <T1, T2, T3, TResult>(sql, convert, param.ToDapperParameters(), conn.Transaction, buffered, splitOn, GetTimeout(timeout), commandType).ToArray());
                }
        }
Example #6
0
        /// <summary>
        /// 多结果集查询并根据转换器返回结果
        /// </summary>
        /// <typeparam name="T">结果类型</typeparam>
        /// <param name="convert">转换器, 可从其参数中获取每一结果集</param>
        /// <param name="sql">参数化的SQL语句或存储过程</param>
        /// <param name="param">参数</param>
        /// <param name="timeout">超时时间,单位为秒</param>
        /// <param name="commandType">命令类型</param>
        /// <returns>结果</returns>
        public T QueryMultiple <T>(Func <ResultsReader, T> convert, string sql, Parameters param, int?timeout = null, CommandType?commandType = null)
        {
            if (convert == null)
            {
                throw new ArgumentNullException("convert");
            }

            if (string.IsNullOrWhiteSpace(sql))
            {
                throw new ArgumentException("sql should not be null", "sql");
            }

            using (var watch = new ElapsedWatch("QueryMultiple"))
                using (var conn = GetConnection())
                {
                    conn.Open();
                    watch.Next("query...");
                    using (var m = conn.QueryMultiple(sql, param?.Result, conn.Transaction, GetTimeout(timeout), commandType))
                    {
                        watch.Next("convert");
                        return(convert(new ResultsReader(m)));
                    }
                }
        }