예제 #1
0
        private static void CreateDB()
        {
            if (TfSettings.Database.CreateDB)
            {
                var connectionString = TfSettings.Database.DefaultConnectionString;
                var dbName           = TfSettings.Database.DatabaseName;
                var param            = ConnectProvider.Param();
                var query            = new Query(
                    connectionString,
                    $"{Operations.SELECT} COUNT('datname') FROM pg_catalog.pg_database where datname = {param}dbName;",
                    new Dictionary <string, object>()
                {
                    { "dbName", dbName }
                });

                if (query.GetScalar() > 0)
                {
                    return;
                }

                var userId   = TfSettings.Database.UserId;
                var encoding = TfSettings.Database.Encoding;
                var nonQuery = new NonQuery(
                    connectionString,
                    $"{Operations.CREATE_DATABASE.GetString()} {dbName} WITH OWNER = {userId} ENCODING = '{encoding}';",
                    null);
                nonQuery.ExecuteNonQuery(Operations.CREATE_DATABASE);
            }
        }
예제 #2
0
 /// <summary>
 /// This is the ExecuteNonQuery command wrapper
 /// </summary>
 /// <param name="query">Query string</param>
 /// <param name="parameters">Parameters in dictionary form</param>
 /// <param name="isInsert">If true, then the return value will be the last inserted id</param>
 /// <returns>rows affected</returns>
 public Task <long> Query(string query, IDictionary <string, dynamic> parameters = null, bool isInsert = false)
 {
     return(Task.Factory.StartNew(() =>
     {
         NonQuery nonQuery = new NonQuery(settings.ConnectionString, settings.Debug);
         nonQuery.CommandText = query;
         nonQuery.Parameters = parameters;
         nonQuery.IsInsert = isInsert;
         return nonQuery.Run();
     }, CancellationToken.None, TaskCreationOptions.None, queryScheduler));
 }
예제 #3
0
 private int ExecuteNonQuery(string sql, Dictionary <string, object> parameters, Operations operations)
 {
     if (this.NonQuery == null)
     {
         var nonQuery = new NonQuery(sql, parameters)
         {
             TableName = this.TableName
         };
         return(nonQuery.ExecuteNonQuery(operations));
     }
     else
     {
         this.NonQuery.WriteSql(sql, parameters);
         return(this.NonQuery.ExecuteNonQuery(operations));
     }
 }
예제 #4
0
        public void NonQuery(NonQuery query)
        {
            QueryCheckException GetInnerException() => new QueryCheckException("Parameter type mismatch");

            var info = new QueryInfo(query.Command, query.ConnectionString, query.Line, query.FilePath);

            onQuery(info);
            try
            {
                using (var connection = new SqlConnection(query.ConnectionString.Match(_ => _, SqlHelper.ConnectionStringFunc)))
                {
                    if (query.Command.CommandType == CommandType.StoredProcedure)
                    {
                        var command = new SqlCommand(query.Command.CommandText, connection)
                        {
                            CommandType = CommandType.StoredProcedure
                        };
                        connection.Open();
                        SqlCommandBuilder.DeriveParameters(command);
                        var dictionary = command.Parameters.Cast <SqlParameter>().ToDictionary(_ => _.ParameterName);
                        foreach (SqlParameter parameter in query.Command.Parameters)
                        {
                            if (dictionary.TryGetValue(parameter.ParameterName, out var value))
                            {
                                if (parameter.SqlDbType != value.SqlDbType)
                                {
                                    if (parameter.SqlDbType == SqlDbType.NVarChar && value.SqlDbType == SqlDbType.VarChar)
                                    {
                                        //no-op
                                    }
                                    else
                                    {
                                        throw GetInnerException();
                                    }
                                }
                                if (value.Size == -1)
                                {
                                    if (parameter.Size != -1)
                                    {
                                        throw GetInnerException();
                                    }
                                }
                                else
                                {
                                    if (parameter.Size == -1)
                                    {
                                        //no-op
                                    }
                                    else
                                    {
                                        if (parameter.Size < value.Size)
                                        {
                                            throw GetInnerException();
                                        }
                                    }
                                }
                            }
                            else
                            {
                                throw GetInnerException();
                            }
                        }
                    }
                    else
                    {
                        query.Command.Connection = connection;
                        connection.Open();
                        using (query.Command.ExecuteReader(CommandBehavior.SchemaOnly))
                        {
                        }
                    }
                    setTask(Task.CompletedTask);
                }
            }
            catch (Exception e)
            {
                throw GetException(e, info);
            }
        }