コード例 #1
0
        public async Task <IList <Dictionary <string, object> > > ExecuteReaderAsync(ParameterizedSql sql)
        {
            using (var command = this.GenerateCommand(sql))
                using (var reader = await command.ExecuteReaderAsync())
                {
                    if (reader.HasRows == false)
                    {
                        return(default(IList <Dictionary <string, object> >));
                    }

                    var results = new List <Dictionary <string, object> >();
                    var columns = reader.GetColumns().ToList();

                    while (await reader.ReadAsync())
                    {
                        var item = new Dictionary <string, object>();

                        foreach (var(ordinal, columnName) in columns)
                        {
                            item.Add(columnName, reader.GetValue(ordinal));
                        }

                        results.Add(item);
                    }

                    return(results);
                }
        }
コード例 #2
0
 public Task <int> ExecuteNonQueryAsync(ParameterizedSql sql)
 {
     using (var command = this.GenerateCommand(sql))
     {
         return(command.ExecuteNonQueryAsync());
     }
 }
コード例 #3
0
        protected DbCommand GenerateCommand(ParameterizedSql parameterizedSql)
        {
            Guard.NotNull(parameterizedSql, nameof(parameterizedSql));

            var command = this.Connection.CreateCommand();

            command.CommandText = parameterizedSql;

            if (this.Transaction != null)
            {
                command.Transaction = this.Transaction;
            }

            foreach (var currentParameter in parameterizedSql.Parameters.EmptyIfNull())
            {
                var parameter = command.CreateParameter();

                parameter.ParameterName = currentParameter.ParameterName;
                parameter.Value         = currentParameter.Value;

                command.Parameters.Add(parameter);
            }

            return(command);
        }
コード例 #4
0
 public int ExecuteNonQuery(ParameterizedSql sql)
 {
     using (var command = this.GenerateCommand(sql))
     {
         return(command.ExecuteNonQuery());
     }
 }
コード例 #5
0
        public void CreateFromDbSet()
        {
            var psql = new ParameterizedSql <DefaultAccessEntity>(_db.DefaultAccessEntities, _logger);

            Assert.True(psql.IsSelect);
            Assert.False(psql.ReadOnly);
            Assert.Empty(psql.ParameterValues);
        }
コード例 #6
0
        public void CreateWithParam()
        {
            var param = "John Doe";
            var psql  = new ParameterizedSql <DefaultAccessEntity>(_db.DefaultAccessEntities.Where(x => x.Name == param), _logger);

            Assert.True(psql.IsSelect);
            Assert.False(psql.ReadOnly);
            Assert.NotEmpty(psql.ParameterValues);
        }
コード例 #7
0
        public IEnumerable <T> LoadObjects <T>(string sql, IDictionary <string, object> parameters) where T : new()
        {
            var command = new ParameterizedSql
            {
                Command    = sql,
                Parameters = parameters
            };

            return(Execute <T>(command, reader => this.Instantiate <T>(reader)));
        }
コード例 #8
0
        public void ConvertToDelete()
        {
            var param = "John Doe";
            var psql  = new ParameterizedSql <DefaultAccessEntity>(_db.DefaultAccessEntities.Where(x => x.Name == param), _logger);
            var del   = psql.ToDelete();

            Assert.True(psql.IsSelect);
            Assert.False(del.IsSelect);
            Assert.True(del.IsDelete);
        }
コード例 #9
0
        public void ConvertToUpdate()
        {
            var p1   = "John Doe";
            var p2   = "Jane Smith";
            var psql = new ParameterizedSql <DefaultAccessEntity>(_db.DefaultAccessEntities.Where(x => x.Name == p1), _logger);
            var upd  = psql.ToUpdate(x => new DefaultAccessEntity()
            {
                Name = p2
            });

            Assert.True(psql.IsSelect);
            Assert.False(upd.IsSelect);
            Assert.True(upd.IsUpdate);
        }
コード例 #10
0
        protected virtual DbCommand GenerateIDBCommand(ParameterizedSql sql)
        {
            var command = this.GenerateIDBCommand(sql.Sql);

            foreach (var currentParameter in sql.Parameters)
            {
                var parameter = command.CreateParameter();

                parameter.ParameterName = currentParameter.ParameterName;
                parameter.Value         = currentParameter.Value;

                command.Parameters.Add(parameter);
            }

            return(command);
        }
コード例 #11
0
        public ParameterizedSql BuildSqlQuery <T>(Expression <Func <T, bool> > expression)
        {
            var sqlScriptParts = new List <SqlScriptPart>();

            this.ProcessExpression(expression.Body, sqlScriptParts);

            var result = new ParameterizedSql
            {
                Sql        = this.ToRawSql(sqlScriptParts),
                Parameters = new List <SqlParameter>(sqlScriptParts
                                                     .OfType <SqlScriptParameter>()
                                                     .Select(f => new SqlParameter
                {
                    Value         = f.ParameterValue,
                    ParameterName = f.ParameterName
                }))
            };

            return(result);
        }
コード例 #12
0
ファイル: DataBaseSessionAsync.cs プロジェクト: haefele/sdORM
        public virtual async Task <IList <T> > QueryAsync <T>(ParameterizedSql sql) where T : new()
        {
            var mapping = this.EntityMappingProvider.GetMapping <T>();

            using (var command = this.GenerateIDBCommand(sql))
                using (var reader = await command.ExecuteReaderAsync())
                {
                    if (reader.HasRows == false)
                    {
                        return(default(IList <T>));
                    }

                    var results = new List <T>();

                    while (await reader.ReadAsync())
                    {
                        results.Add(reader.LoadWithEntityMapping(mapping));
                    }

                    return(results);
                }
        }
コード例 #13
0
 private IEnumerable <T> Execute <T>(ParameterizedSql command, Func <IDataReader, T> instantiate)
 {
     using (var connection = new SqlConnection(connectionString))
     {
         connection.Open();
         using (var cmd = connection.CreateCommand())
         {
             cmd.CommandText = command.Command;
             foreach (var pair in command.Parameters)
             {
                 cmd.Parameters.AddWithValue(pair.Key, pair.Value);
             }
             using (var reader = cmd.ExecuteReader())
             {
                 while (reader.Read())
                 {
                     yield return(instantiate(reader));
                 }
             }
         }
     }
 }
コード例 #14
0
        public IList <T> ExecuteReader <T>(ParameterizedSql sql) where T : new()
        {
            var mapping = this.EntityMappingProvider.GetMapping <T>();

            using (var command = this.GenerateCommand(sql))
                using (var reader = command.ExecuteReader())
                {
                    if (reader.HasRows == false)
                    {
                        return(default(IList <T>));
                    }

                    var results = new List <T>();

                    while (reader.Read())
                    {
                        results.Add(reader.LoadWithEntityMapping(mapping));
                    }

                    return(results);
                }
        }
コード例 #15
0
ファイル: DataBaseSession.cs プロジェクト: haefele/sdORM
        public virtual IList <T> Query <T>(ParameterizedSql parameterizedSql) where T : new()
        {
            Guard.NotNull(parameterizedSql, nameof(parameterizedSql));

            var mapping = this.EntityMappingProvider.GetMapping <T>();

            using (var command = this.GenerateIDBCommand(parameterizedSql))
                using (var reader = command.ExecuteReader())
                {
                    if (reader.HasRows == false)
                    {
                        return(default(IList <T>));
                    }

                    var results = new List <T>();

                    while (reader.Read())
                    {
                        results.Add(reader.LoadWithEntityMapping(mapping));
                    }

                    return(results);
                }
        }
コード例 #16
0
 public static string GetWithReplacedParameters(this ParameterizedSql self)
 {
     return(self.Parameters.Aggregate(self.Sql,
                                      (current, currentParameter) => current.Replace(currentParameter.ParameterName,
                                                                                     currentParameter.Value is string?$"\"{currentParameter.Value}\"" : currentParameter.Value.ToString())));
 }