예제 #1
0
        public async Task <T> ExecuteScalarAsync <T>(Sql Sql)
        {
            string sql = Sql.SQL;

            object[] args = Sql.Arguments;

            try
            {
                this.OpenSharedConnectionInternal();
                using (DbCommand cmd = this.CreateCommand(this._sharedConnection, sql, args))
                {
                    object val = await this.ExecuteScalarHelperAsync(cmd).ConfigureAwait(false);

                    if (val == null || val == DBNull.Value)
                    {
                        return(await TaskAsyncHelper.FromResult(default(T)).ConfigureAwait(false));
                    }

                    Type t = typeof(T);
                    Type u = Nullable.GetUnderlyingType(t);

                    return((T)Convert.ChangeType(val, u ?? t));
                }
            }
            catch (Exception x)
            {
                this.OnExceptionInternal(x);
                throw;
            }
            finally
            {
                this.CloseSharedConnectionInternal();
            }
        }
예제 #2
0
 public virtual Task <int> DeleteAsync(string tableName, string primaryKeyName, object poco, object primaryKeyValue)
 {
     return(this.DeleteImp(tableName, primaryKeyName, poco, primaryKeyValue, this.ExecuteAsync, TaskAsyncHelper.FromResult(0)));
 }
예제 #3
0
 public virtual Task <int> UpdateAsync(string tableName, string primaryKeyName, object poco, object primaryKeyValue, IEnumerable <string> columns)
 {
     return(this.UpdateImp(tableName, primaryKeyName, poco, primaryKeyValue, columns,
                           async(sql, args, next) => next(await this.ExecuteAsync(sql, args).ConfigureAwait(false)), TaskAsyncHelper.FromResult(0)));
 }