Exemple #1
0
        public static async Task <List <Fortune> > LoadFortunesRows()
        {
            var fortunes = new List <Fortune>();

            using var pooledConnection = await PooledConnections.GetConnection(ConnectionStrings.OdbcConnection);

            await pooledConnection.OpenAsync();

            var pooledCommand = new PooledCommand("SELECT id, message FROM fortune", pooledConnection);

            using (pooledCommand)
            {
                using var dataReader = await pooledCommand.ExecuteReaderAsync(CommandBehavior.SingleResult);

                while (await dataReader.ReadAsync())
                {
                    fortunes.Add(new Fortune
                                 (
                                     id: dataReader.GetInt32(0),
                                     message: dataReader.GetString(1)
                                 ));
                }
            }

            fortunes.Add(new Fortune(id: 0, message: "Additional fortune added at request time."));
            fortunes.Sort();

            return(fortunes);
        }
Exemple #2
0
        private static (PooledCommand pooledCommand, IDbDataParameter dbDataParameter) CreateReadCommand(PooledConnection pooledConnection)
        {
            var pooledCommand   = new PooledCommand("SELECT id, randomnumber FROM world WHERE id =?", pooledConnection);
            var dbDataParameter = pooledCommand.CreateParameter("@Id", DbType.Int32, _random.Next(1, 10001));

            return(pooledCommand, dbDataParameter);
        }
        public static async Task <List <Fortune> > LoadFortunesRows()
        {
            var fortunes = new List <Fortune>();

            var pooledConnection = await PooledConnections.GetConnection(DataProvider.ConnectionString);

            pooledConnection.Open();

            var pooledCommand = new PooledCommand("SELECT * FROM fortune", pooledConnection);
            var dataReader    = await pooledCommand.ExecuteReaderAsync(CommandBehavior.SingleResult& CommandBehavior.SequentialAccess);

            while (dataReader.Read())
            {
                fortunes.Add(new Fortune
                             (
                                 id: dataReader.GetInt32(0),
#if MYSQL
                                 //MariaDB ODBC connector does not correctly support Japanese characters in combination with default ADO.NET;
                                 //as a solution we custom read this string
                                 message: ReadColumn(dataReader, 1)
#else
                                 message: dataReader.GetString(1)
#endif
                             ));
            }

            dataReader.Close();
            pooledCommand.Release();
            pooledConnection.Release();

            fortunes.Add(new Fortune(id: 0, message: "Additional fortune added at request time."));
            fortunes.Sort();

            return(fortunes);
        }
Exemple #4
0
        private static (PooledCommand pooledCommand, IDbDataParameter dbDataParameter) CreateReadCommand(PooledConnection pooledConnection)
        {
#if ADO
            var pooledCommand = new PooledCommand("SELECT * FROM world WHERE id=@Id", pooledConnection);
#else
            var pooledCommand = new PooledCommand("SELECT * FROM world WHERE id=?", pooledConnection);
#endif

            return(pooledCommand, pooledCommand.CreateParameter("Id", DbType.Int32, _random.Next(1, 10001)));
        }
        public static async Task <World[]> ReadMultipleRows(int count)
        {
            int    j      = 0;
            var    ids    = PlatformBenchmarks.BatchUpdateString.Ids;
            var    worlds = new World[count];
            string queryString;

            if (_queriesMultipleRows[count] != null)
            {
                queryString = _queriesMultipleRows[count];
            }
            else
            {
                var stringBuilder = PlatformBenchmarks.StringBuilderCache.Acquire();

                for (int i = 0; i < count; i++)
                {
                    stringBuilder.Append("SELECT * FROM world WHERE id=?;");
                }

                queryString = _queriesMultipleRows[count] = PlatformBenchmarks.StringBuilderCache.GetStringAndRelease(stringBuilder);
            }

            var pooledConnection = await PooledConnections.GetConnection(DataProvider.ConnectionString);

            pooledConnection.Open();

            var pooledCommand = new PooledCommand(queryString, pooledConnection);

            for (int i = 0; i < count; i++)
            {
                pooledCommand.CreateParameter(ids[i], DbType.Int32, _random.Next(1, 10001));
            }

            var dataReader = await pooledCommand.ExecuteReaderAsync(CommandBehavior.Default& CommandBehavior.SequentialAccess);

            do
            {
                dataReader.Read();

                worlds[j] = new World
                {
                    Id           = dataReader.GetInt32(0),
                    RandomNumber = dataReader.GetInt32(1)
                };

                j++;
            } while (await dataReader.NextResultAsync());

            dataReader.Close();
            pooledCommand.Release();
            pooledConnection.Release();

            return(worlds);
        }
Exemple #6
0
        private static async Task <World> ReadSingleRow(PooledCommand pooledCommand)
        {
            using var dataReader = await pooledCommand.ExecuteReaderAsync(CommandBehavior.SingleRow);

            await dataReader.ReadAsync();

            return(new World
            {
                Id = dataReader.GetInt32(0),
                RandomNumber = dataReader.GetInt32(1)
            });
        }
        public static async Task <World[]> LoadMultipleUpdatesRows(int count)
        {
            var worlds = new World[count];

            var pooledConnection = await PooledConnections.GetConnection(DataProvider.ConnectionString);

            pooledConnection.Open();

            var(queryCommand, dbDataParameter) = CreateReadCommand(pooledConnection);

            for (int i = 0; i < count; i++)
            {
                worlds[i] = await ReadSingleRow(queryCommand);

                dbDataParameter.Value = _random.Next(1, 10001);
            }

            queryCommand.Release();

            var updateCommand = new PooledCommand(PlatformBenchmarks.BatchUpdateString.Query(count), pooledConnection);

            var ids     = PlatformBenchmarks.BatchUpdateString.Ids;
            var randoms = PlatformBenchmarks.BatchUpdateString.Randoms;

#if !MYSQL
            var jds = PlatformBenchmarks.BatchUpdateString.Jds;
#endif

            for (int i = 0; i < count; i++)
            {
                var randomNumber = _random.Next(1, 10001);

                updateCommand.CreateParameter(ids[i], DbType.Int32, worlds[i].Id);
                updateCommand.CreateParameter(randoms[i], DbType.Int32, randomNumber);

                worlds[i].RandomNumber = randomNumber;
            }

#if !MYSQL
            for (int i = 0; i < count; i++)
            {
                updateCommand.CreateParameter(jds[i], DbType.Int32, worlds[i].Id);
            }
#endif

            await updateCommand.ExecuteNonQueryAsync();

            updateCommand.Release();
            pooledConnection.Release();

            return(worlds);
        }
Exemple #8
0
        private static async Task <World> ReadSingleRow(PooledCommand pooledCommand)
        {
            var dataReader = await pooledCommand.ExecuteReaderAsync(CommandBehavior.SingleRow& CommandBehavior.SequentialAccess);

            dataReader.Read();

            var world = new World
            {
                Id           = dataReader.GetInt32(0),
                RandomNumber = dataReader.GetInt32(1)
            };

            dataReader.Close();

            return(world);
        }