예제 #1
0
        public GxMySQLConnectorCursorDataReader(IGxConnectionManager connManager, GxDataRecord dr, IGxConnection connection, GxParameterCollection parameters,
                                                string stmt, int fetchSize, bool forFirst, int handle, bool cached, SlidingTime expiration, bool hasNested, bool dynStmt)
        {
            this.parameters = parameters;
            this.stmt       = stmt;
            this.fetchSize  = fetchSize;
            this.cache      = connection.ConnectionCache;
            this.cached     = cached;
            this.handle     = handle;
            this.isForFirst = forFirst;
            _connManager    = connManager;
            this.m_dr       = dr;
            this.readBytes  = 0;
            this.dynStmt    = dynStmt;
            con             = _connManager.IncOpenHandles(handle, m_dr.DataSource);
            con.CurrentStmt = stmt;
            con.MonitorEnter();
            GXLogging.Debug(log, "Open GxMySQLCursorDataReader handle:'" + handle);
            MySQLCommand cmd = (MySQLCommand)dr.GetCommand(con, stmt, parameters);

            reader = cmd.ExecuteReader();
            cache.SetAvailableCommand(stmt, false, dynStmt);
            open  = true;
            block = new GxArrayList(fetchSize);
            pos   = -1;
            if (cached)
            {
                key             = SqlUtil.GetKeyStmtValues(parameters, stmt, isForFirst);
                this.expiration = expiration;
            }
        }
예제 #2
0
        /// <inheritdoc />
        public async Task <ResultSet <T> > SelectAsync <T>(string query, Dictionary <string, dynamic> bindings = null) where T : Model <T>, new()
        {
            using var connection = new Connection(ConnectionString);
            await connection.OpenAsync();

            using var command = new Command(query, connection);
            BindParameters(command, bindings);

            using var reader = await command.ExecuteReaderAsync();

            ResultSet <T> resultSet = new ResultSet <T>();

            if (Manager.DebugMode)
            {
                Manager.Logger(query);
            }

            while (await reader.ReadAsync())
            {
                ResultRow <T> resultRow = new ResultRow <T>();

                for (int column = 0; column < reader.FieldCount; column++)
                {
                    resultRow.Columns.Add(reader.GetName(column), reader.GetValue(column));
                }

                resultSet.Rows.Add(resultRow);
            }

            return(resultSet);
        }
예제 #3
0
 private static void BindParameters(Command command, Dictionary <string, dynamic> parameters = null)
 {
     if (parameters != null)
     {
         foreach (var parameter in parameters)
         {
             command.Parameters.AddWithValue(parameter.Key, parameter.Value);
         }
     }
 }
예제 #4
0
        public override IDbCommand GetCommand(IGxConnection con, string stmt, GxParameterCollection parameters, bool isCursor, bool forFirst, bool isRpc)
        {
            if (isRpc)
            {
                stmt = convertToMySqlCall(stmt, parameters);
            }
            MySQLCommand mysqlcmd = (MySQLCommand)base.GetCommand(con, stmt, parameters.Distinct());

            if (isCursor && !isRpc)
            {
                mysqlcmd.Prepare();
            }
            return(mysqlcmd);
        }
예제 #5
0
        /// <inheritdoc />
        public async Task DeleteAsync(string query, Dictionary <string, dynamic> bindings = null)
        {
            using var connection = new Connection(ConnectionString);
            await connection.OpenAsync();

            using var command = new Command(query, connection);
            BindParameters(command, bindings);
            await command.ExecuteNonQueryAsync();

            if (Manager.DebugMode)
            {
                Manager.Logger(query);
            }
        }
예제 #6
0
        /// <inheritdoc />
        public void Update(string query, Dictionary <string, dynamic> bindings = null)
        {
            using var connection = new Connection(ConnectionString);
            connection.Open();

            using var command = new Command(query, connection);
            BindParameters(command, bindings);
            command.ExecuteNonQuery();

            if (Manager.DebugMode)
            {
                Manager.Logger(query);
            }
        }
예제 #7
0
        /// <inheritdoc />
        public async Task <int> InsertAsync(string query, Dictionary <string, dynamic> bindings = null)
        {
            using var connection = new Connection(ConnectionString);
            await connection.OpenAsync();

            using var command = new Command(query, connection);
            BindParameters(command, bindings);
            await command.ExecuteNonQueryAsync();

            if (Manager.DebugMode)
            {
                Manager.Logger(query);
            }

            return(Convert.ToInt32(command.LastInsertedId));
        }