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); } }
/// <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)); }
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)); } }
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); } }