상속: System.Data.Common.DbCommand, ICloneable
예제 #1
0
        internal static void CreateGameTable()
        {
            using (NuoDbConnection connection = new NuoDbConnection(connectionString))
            {
                connection.Open();
                try
                {
                    DbCommand dropCommand = new NuoDbCommand("drop table Game", connection);
                    dropCommand.ExecuteNonQuery();
                }
                catch (Exception)
                {
                    // table is allowed to be missing
                }
                DbCommand createCommand = new NuoDbCommand("create table Game" +
                                                            "(" +
                                                            "   Id       bigint generated always as identity not NULL primary key," +
                                                            "   Date     DATE" +
                                                            ")", connection);
                createCommand.ExecuteNonQuery();

                DbCommand insertCommand = new NuoDbCommand("Insert into Game (Date) Values (?)", connection);
                insertCommand.Prepare();

                insertCommand.Parameters[0].Value = "1970-01-01";

                insertCommand.ExecuteNonQuery();

            }
        }
예제 #2
0
        public NuoDbDataReader(NuoDbConnection connection, int handle, EncodedDataStream dataStream, NuoDbCommand statement, bool readColumnNames)
        {
            this.connection = connection;
            this.handle = handle;
            this.pendingRows = dataStream;
            this.statement = statement;

            if (this.handle != -1)
                this.connection.InternalConnection.RegisterResultSet(this.handle);

            this.numberColumns = this.pendingRows != null ? this.pendingRows.getInt() : 0;
            this.values = new Value[numberColumns];

            if (readColumnNames)
            {
                this.columnNames = new string[numberColumns];
                for (int n = 0; n < numberColumns; ++n)
                {
                    columnNames[n] = dataStream.getString();
                }
            }
            else
            {
                //RemPreparedStatement ps = (RemPreparedStatement)statement;
                //columnNames = ps.columnNames;
            }
        }
예제 #3
0
        public NuoDbDataReader(NuoDbConnection connection, int handle, EncodedDataStream dataStream, NuoDbCommand statement, bool readColumnNames)
        {
            this.connection  = connection;
            this.handle      = handle;
            this.pendingRows = dataStream;
            this.statement   = statement;

            if (this.handle != -1)
            {
                this.connection.InternalConnection.RegisterResultSet(this.handle);
            }

            this.numberColumns = this.pendingRows != null?this.pendingRows.getInt() : 0;

            this.values = new Value[numberColumns];

            if (readColumnNames)
            {
                this.columnNames = new string[numberColumns];
                for (int n = 0; n < numberColumns; ++n)
                {
                    columnNames[n] = dataStream.getString();
                }
            }
            else
            {
                //RemPreparedStatement ps = (RemPreparedStatement)statement;
                //columnNames = ps.columnNames;
            }
        }
예제 #4
0
 public NuoDbDataAdapter(NuoDbDataAdapter other)
     : base()
 {
     this.SelectCommand = other.SelectCommand is ICloneable ? (NuoDbCommand)other.SelectCommand.Clone() : null;
     this.InsertCommand = other.InsertCommand is ICloneable ? (NuoDbCommand)other.InsertCommand.Clone() : null;
     this.DeleteCommand = other.DeleteCommand is ICloneable ? (NuoDbCommand)other.DeleteCommand.Clone() : null;
     this.UpdateCommand = other.UpdateCommand is ICloneable ? (NuoDbCommand)other.UpdateCommand.Clone() : null;
 }
예제 #5
0
        public void TestAsynchronousReader2()
        {
            NuoDbConnection connection = new NuoDbConnection(connectionString);
            NuoDbCommand command = new NuoDbCommand("select * from hockey", connection);

            connection.Open();

            AsyncCallback callback = new AsyncCallback(HandleCallback);
            IAsyncResult result = command.BeginExecuteReader(callback, command);
        }
예제 #6
0
        public static void Init()
        {
            Utils.CreateHockeyTable();
            using (NuoDbConnection connection = new NuoDbConnection(TestFixture1.connectionString))
            {
                DbCommand command = new NuoDbCommand("select count(*) from hockey", connection);

                connection.Open();
                tableRows = (int)command.ExecuteScalar();
            }
        }
예제 #7
0
        public override void Close()
        {
            if (closed || handle == -1 || connection == null || (connection as IDbConnection).State == ConnectionState.Closed ||
                !connection.InternalConnection.IsResultSetRegistered(handle))
            {
                return;
            }

            connection.InternalConnection.CloseResultSet(handle);

            statement = null;
            closed    = true;
        }
예제 #8
0
        public void TestBulkLoadPerformance()
        {
            using (NuoDbConnection cnn = new NuoDbConnection(connectionString))
            {
                cnn.Open();
                Utils.DropTable(cnn, "temp");

                DbCommand createCommand = new NuoDbCommand("create table temp (col1 integer, col2 integer)", cnn);
                int result = createCommand.ExecuteNonQuery();

                DbCommand cmm = cnn.CreateCommand();
                cmm.CommandText = "insert into temp(col1, col2) values(?, ?)";
                cmm.Parameters.Add(new NuoDbParameter { DbType = DbType.Int32, ParameterName = "col1" });
                cmm.Parameters.Add(new NuoDbParameter { DbType = DbType.Int32, ParameterName = "col2" });
                cmm.Prepare();

                const int ROW_NUMBER = 40000;
                DateTime start = DateTime.Now;
                for (var i = 1; i <= ROW_NUMBER; i++)
                {
                    cmm.Parameters["col1"].Value = i;
                    cmm.Parameters["col2"].Value = 2 * i;
                    cmm.ExecuteNonQuery();
                }
                DateTime end = DateTime.Now;
                double insertTime = (end - start).TotalMilliseconds;

                Utils.DropTable(cnn, "temp2");
                createCommand = new NuoDbCommand("create table temp2 (col1 integer, col2 integer)", cnn);
                createCommand.ExecuteNonQuery();

                NuoDbBulkLoader loader = new NuoDbBulkLoader(connectionString);
                loader.DestinationTableName = "TEMP2";

                DbCommand command = new NuoDbCommand("select * from temp", cnn);
                DbDataReader reader = command.ExecuteReader();

                loader.BatchProcessed += new BatchProcessedEventHandler(loader_BatchProcessed);
                start = DateTime.Now;
                loader.WriteToServer(reader);
                end = DateTime.Now;

                double loadTime = (end - start).TotalMilliseconds;

                reader.Close();

                Console.WriteLine("{0} insert = {1}\n{0} bulk load = {2}\n", ROW_NUMBER, insertTime, loadTime);

                Assert.IsTrue(loadTime < insertTime, "BulkLoad takes more time than manual insertion");
            }
        }
예제 #9
0
        public void TestNoPrepareAnonymousParamOut()
        {
            using (NuoDbConnection connection = new NuoDbConnection(TestFixture1.connectionString))
            {
                connection.Open();
                new NuoDbCommand("drop procedure nunit_test if exists", connection).ExecuteNonQuery();
                new NuoDbCommand("create procedure nunit_test(out p1 string) as p1='hello'; end_procedure", connection).ExecuteNonQuery();

                NuoDbCommand cmd = new NuoDbCommand("nunit_test", connection);
                cmd.CommandType = CommandType.StoredProcedure;
                cmd.ExecuteNonQuery();
                Assert.AreEqual("hello", cmd.Parameters["p1"].Value);
            }
        }
예제 #10
0
        public void DB4329()
        {
            using (NuoDbConnection connection = new NuoDbConnection(TestFixture1.connectionString))
            {
                connection.Open();
                Utils.DropTable(connection, "ExpenseTest");
                DbCommand createCommand = new NuoDbCommand("Create table ExpenseTest" +
                                                           "(" +
                                                           "SourceExpenseId int," +
                                                           "ExpenseAmount numeric(15,2)" +
                                                           ")", connection);
                createCommand.ExecuteNonQuery();

                DbCommand insertCommand = new NuoDbCommand("Insert Into ExpenseTest(SourceExpenseId, ExpenseAmount) Values (?,?)", connection);
                insertCommand.Prepare();

                insertCommand.Parameters[0].Value = -1254524;
                insertCommand.Parameters[1].Value = -135.35;
                insertCommand.ExecuteNonQuery();

                insertCommand.Parameters[0].Value = 100100100;
                insertCommand.Parameters[1].Value = -1325465.35;
                insertCommand.ExecuteNonQuery();

                insertCommand.Parameters[0].Value = 100100101;
                insertCommand.Parameters[1].Value = 200000.35;
                insertCommand.ExecuteNonQuery();

                DbCommand selectCommand = new NuoDbCommand("select SourceExpenseId, ExpenseAmount from ExpenseTest", connection);
                using (DbDataReader reader = selectCommand.ExecuteReader())
                {
                    bool hasNext=reader.Read();
                    Assert.IsTrue(hasNext);
                    Assert.AreEqual(-1254524, reader[0]);
                    Assert.AreEqual(-135.35, reader[1]);
                    hasNext = reader.Read();
                    Assert.IsTrue(hasNext);
                    Assert.AreEqual(100100100, reader[0]);
                    Assert.AreEqual(-1325465.35, reader[1]);
                    hasNext = reader.Read();
                    Assert.IsTrue(hasNext);
                    Assert.AreEqual(100100101, reader[0]);
                    Assert.AreEqual(200000.35, reader[1]);
                }

            }
        }
예제 #11
0
        public void TestAsynchronousReader1()
        {
            using (NuoDbConnection connection = new NuoDbConnection(connectionString))
            {
                NuoDbCommand command = new NuoDbCommand("select * from hockey", connection);

                connection.Open();
                IAsyncResult result = command.BeginExecuteReader();

                using (DbDataReader reader = command.EndExecuteReader(result))
                {
                    while (reader.Read())
                    {
                        Console.WriteLine("\t{0}\t{1}\t{2}\t{3}", reader[0], reader[1], reader[2], reader["id"]);
                    }
                }
            }
        }
예제 #12
0
        public void TestNoPrepareAnonymousParamIn()
        {
            using (NuoDbConnection connection = new NuoDbConnection(TestFixture1.connectionString))
            {
                connection.Open();
                new NuoDbCommand("drop procedure nunit_test if exists", connection).ExecuteNonQuery();
                new NuoDbCommand("create procedure nunit_test(in p1 string) as throw p1; end_procedure", connection).ExecuteNonQuery();

                NuoDbCommand cmd = new NuoDbCommand("nunit_test", connection);
                cmd.CommandType = CommandType.StoredProcedure;
                cmd.Parameters.Add("hello");
                try
                {
                    cmd.ExecuteNonQuery();
                    Assert.Fail();
                }
                catch (Exception e)
                {
                    Assert.AreEqual("hello", e.Message);
                }
            }
        }
예제 #13
0
        public void TestBulkLoadOnStoredProcedureCommand()
        {
            using (NuoDbConnection connection = new NuoDbConnection(TestFixture1.connectionString))
            {
                connection.Open();
                new NuoDbCommand("drop table temp if exists", connection).ExecuteNonQuery();
                new NuoDbCommand("create table temp (col string)", connection).ExecuteNonQuery();
                new NuoDbCommand("drop procedure nunit_test if exists", connection).ExecuteNonQuery();
                new NuoDbCommand("create procedure nunit_test(input_data string) " +
                    " as " +
                    "   insert into temp values (input_data); " +
                    " end_procedure", connection).ExecuteNonQuery();

                DataTable metadata = new DataTable("dummy");
                metadata.Columns.Add("xyz", typeof(string));
                DataRow[] rows = new DataRow[10];
                for (int i = 0; i < rows.Length; i++)
                {
                    rows[i] = metadata.NewRow();
                    rows[i][0] = Convert.ToString(i);
                }

                NuoDbCommand loader = new NuoDbCommand(connection);
                loader.CommandType = CommandType.StoredProcedure;
                loader.CommandText = "nunit_test";
                loader.ExecuteBatch(rows);

                DbCommand command = new NuoDbCommand("select count(*) from temp", connection);
                object val = command.ExecuteScalar();

                Assert.AreEqual(10, val);

                command = new NuoDbCommand("select col from temp", connection);
                val = command.ExecuteScalar();

                Assert.AreEqual("0", val);
            }
        }
예제 #14
0
        public object Clone()
        {
            NuoDbCommand command = new NuoDbCommand();

            command.CommandText      = this.CommandText;
            command.Connection       = this.Connection;
            command.Transaction      = this.Transaction;
            command.CommandType      = this.CommandType;
            command.CommandTimeout   = this.CommandTimeout;
            command.UpdatedRowSource = this.UpdatedRowSource;

            if (this.ExpectedColumnTypes != null)
            {
                command.ExpectedColumnTypes = (Type[])this.ExpectedColumnTypes.Clone();
            }

            foreach (NuoDbParameter p in this.Parameters)
            {
                command.Parameters.Add(((ICloneable)p).Clone());
            }

            return(command);
        }
예제 #15
0
        public void TestHighAvailability()
        {
            using (NuoDbConnection connection = new NuoDbConnection(connectionString.Replace("Server=", "Server=localhost:8,")))
            {
                DbCommand command = new NuoDbCommand("select * from hockey", connection);

                connection.Open();
                DbDataReader reader = command.ExecuteReader();
                while (reader.Read())
                {
                    Console.WriteLine("\t{0}\t{1}\t{2}\t{3}", reader[0], reader[1], reader[2], reader["id"]);
                }
                reader.Close();
            }
        }
예제 #16
0
        private void WriteToServer(DataFeeder feeder)
        {
            if (this.tableName.Length == 0)
            {
                throw new ArgumentException("The name of the destination table hasn't been specified", "DestinationTableName");
            }

            StringBuilder builder = new StringBuilder();

            builder.Append("INSERT INTO ");
            if (this.tableName.Contains("."))
            {
                string[] parts = this.tableName.Split(new char[] { '.' });
                bool     first = true;
                foreach (string part in parts)
                {
                    if (first)
                    {
                        first = false;
                    }
                    else
                    {
                        builder.Append(".");
                    }
                    builder.Append("`");
                    builder.Append(part.Replace("`", "``"));
                    builder.Append("`");
                }
            }
            else
            {
                builder.Append("`");
                builder.Append(this.tableName.Replace("`", "``"));
                builder.Append("`");
            }
            builder.Append(" ");
            if (mappings.Count == 0)
            {
                // the target table has the same number and names of the columns as in the specified input rows
                builder.Append("VALUES (");
                for (int i = 0; i < feeder.FieldCount; i++)
                {
                    if (i != 0)
                    {
                        builder.Append(", ");
                    }
                    builder.Append("?");
                }
                builder.Append(")");
            }
            else
            {
                DataRowCollection targetColumns = null;
                builder.Append(" (");
                for (int i = 0; i < mappings.Count; i++)
                {
                    NuoDbBulkLoaderColumnMapping mapping = mappings[i];
                    if (i != 0)
                    {
                        builder.Append(", ");
                    }
                    builder.Append("`");
                    if (mapping.DestinationColumn == null)
                    {
                        // we are requested to map to a target column that is identified with its ordinal number, so
                        // fetch the schema of the target table to find out what is its name
                        if (targetColumns == null)
                        {
                            // split the destination table into its different parts
                            string[] parts = this.tableName.Split(new char[] { '.' });

                            DataTable targetSchema = this.connection.GetSchema("Columns", new string[] { null,                                   // catalog
                                                                                                         parts.Length == 2 ? parts[0] : null,    // schema
                                                                                                         parts.Length == 2 ? parts[1] : parts[0] // table
                                                                               });
                            targetColumns = targetSchema.Rows;
                        }

                        if (mapping.DestinationOrdinal < 0 || mapping.DestinationOrdinal > targetColumns.Count)
                        {
                            throw new IndexOutOfRangeException(String.Format("The specified ordinal of the target column ({0}) is outside the range of the column count ({1}) of table {2}",
                                                                             new object[] { mapping.DestinationOrdinal, targetColumns.Count, this.tableName }));
                        }

                        string columnName = (string)(targetColumns[mapping.DestinationOrdinal]["COLUMN_NAME"]);
                        builder.Append(columnName.Replace("`", "``"));
                    }
                    else
                    {
                        builder.Append(mapping.DestinationColumn.Replace("`", "``"));
                    }
                    builder.Append("`");
                }
                builder.Append(") VALUES (");
                for (int i = 0; i < mappings.Count; i++)
                {
                    if (i != 0)
                    {
                        builder.Append(", ");
                    }
                    builder.Append("?");
                }
                builder.Append(")");
            }
            string sqlString = builder.ToString();

#if DEBUG
            System.Diagnostics.Trace.WriteLine("NuoDbBulkLoader::WriteToServer: " + sqlString);
#endif

            if (this.connection.State != ConnectionState.Open)
            {
                this.connection.Open();
            }

            using (NuoDbCommand command = new NuoDbCommand(sqlString, this.connection))
            {
                if (mappings.Count > 0)
                {
                    // do the check for out-of-range values just once
                    foreach (NuoDbBulkLoaderColumnMapping mapping in mappings)
                    {
                        if (mapping.SourceColumn == null && mapping.SourceOrdinal < 0 || mapping.SourceOrdinal > feeder.FieldCount)
                        {
                            throw new IndexOutOfRangeException(String.Format("The specified ordinal of the source column ({0}) is outside the range of the column count ({1})",
                                                                             mapping.SourceOrdinal, feeder.FieldCount));
                        }
                    }
                    feeder = new FeederOrderer(feeder, mappings);
                }

                int batchCount = 0;
                int totalSize  = 0;
                while ((batchCount = command.ExecuteBatch(feeder, this.batchSize)) > 0)
                {
                    totalSize += batchCount;
#if DEBUG
                    System.Diagnostics.Trace.WriteLine("NuoDbBulkLoader::WriteToServer: sent a batch of " + batchCount + " rows");
#endif
                    if (handlers.Count != 0)
                    {
                        BatchProcessedEventHandler[] tmpArray = new BatchProcessedEventHandler[handlers.Count];
                        handlers.CopyTo(tmpArray);
                        BatchProcessedEventArgs args = new BatchProcessedEventArgs();
                        args.BatchSize = batchCount;
                        args.TotalSize = totalSize;
                        args.HasErrors = false;
                        foreach (BatchProcessedEventHandler h in tmpArray)
                        {
                            h.Invoke(this, args);
                        }
                    }
                }
            }
        }
예제 #17
0
        public override void Close()
        {
            if (closed || handle == -1 || connection == null || (connection as IDbConnection).State == ConnectionState.Closed ||
                !connection.InternalConnection.IsResultSetRegistered(handle))
            {
                return;
            }

            connection.InternalConnection.CloseResultSet(handle);

            statement = null;
            closed = true;
        }
예제 #18
0
        public void TestNoPrepareNamedParamIn()
        {
            using (NuoDbConnection connection = new NuoDbConnection(TestFixture1.connectionString))
            {
                connection.Open();
                new NuoDbCommand("drop procedure nunit_test if exists", connection).ExecuteNonQuery();
                new NuoDbCommand("create procedure nunit_test(in p1 string, in p2 string) as throw p1; end_procedure", connection).ExecuteNonQuery();

                NuoDbCommand cmd = new NuoDbCommand("nunit_test", connection);
                cmd.CommandType = CommandType.StoredProcedure;
                NuoDbParameter param1 = new NuoDbParameter();
                param1.ParameterName = "p2";
                param1.Direction = ParameterDirection.Input;
                param1.Value = "goodbye";
                cmd.Parameters.Add(param1);
                NuoDbParameter param2 = new NuoDbParameter();
                param2.ParameterName = "p1";
                param2.Direction = ParameterDirection.Input;
                param2.Value = "hello";
                cmd.Parameters.Add(param2);
                try
                {
                    cmd.ExecuteNonQuery();
                    Assert.Fail();
                }
                catch (Exception e)
                {
                    Assert.AreEqual("hello", e.Message);
                }
            }
        }
예제 #19
0
 public NuoDbDataReader(NuoDbConnection connection, int handle, EncodedDataStream dataStream, NuoDbCommand statement, bool readColumnNames)
 {
     this.connection = connection;
     this.statement  = statement;
     InitResultSet(handle, dataStream, readColumnNames);
 }
예제 #20
0
 internal static void DropTable(NuoDbConnection cnn, string tableName)
 {
     try
     {
         DbCommand dropCommand = new NuoDbCommand("drop table " + tableName, cnn);
         dropCommand.ExecuteNonQuery();
     }
     catch (Exception)
     {
         // table is allowed to be missing
     }
 }
예제 #21
0
        public void TestTimeZone()
        {
            // Use a time in the UTC time zone; otherwise, it would be treated as if it were in the local timezone even
            // if we are telling NuoDB that we are in a different timezone
            DateTime dstReferenceDate = DateTime.SpecifyKind(new DateTime(1999, 10, 1, 2, 30, 58), DateTimeKind.Utc);
            DateTime nonDstReferenceDate = DateTime.SpecifyKind(new DateTime(1999, 12, 1, 2, 30, 58), DateTimeKind.Utc);
            DateTime dtDate;
            string strDate;
            bool hasNext;
            // GMT-5, or GMT-4 if DST is active
            using (NuoDbConnection connection = new NuoDbConnection(connectionString + ";TimeZone=America/New_York"))
            {
                connection.Open();
                Utils.DropTable(connection, "timezone");

                DbCommand createCommand = new NuoDbCommand("create table timezone (asTimestamp timestamp, asDate date, asTime time, asString string)", connection);
                int result = createCommand.ExecuteNonQuery();

                DbCommand insertCommand = new NuoDbCommand("insert into timezone (asTimestamp, asDate, asTime, asString) values (?,?,?,?)", connection);
                insertCommand.Parameters.Add(dstReferenceDate);
                insertCommand.Parameters.Add(dstReferenceDate);
                insertCommand.Parameters.Add(dstReferenceDate);
                insertCommand.Parameters.Add(dstReferenceDate);
                insertCommand.ExecuteNonQuery();
                insertCommand.Parameters.Clear();
                insertCommand.Parameters.Add(nonDstReferenceDate);
                insertCommand.Parameters.Add(nonDstReferenceDate);
                insertCommand.Parameters.Add(nonDstReferenceDate);
                insertCommand.Parameters.Add(nonDstReferenceDate);
                insertCommand.ExecuteNonQuery();

                DbCommand command = new NuoDbCommand("select asTimestamp, asDate, asTime, asString from timezone", connection);
                DbDataReader reader = command.ExecuteReader();
                hasNext = reader.Read();
                Assert.IsTrue(hasNext);
                dtDate = reader.GetDateTime(0);
                Assert.AreEqual("1999-09-30 22:30:58", dtDate.ToString("yyyy-MM-dd HH:mm:ss"));
                strDate = reader.GetString(0);
                Assert.AreEqual("1999-09-30 22:30:58", strDate);
                dtDate = reader.GetDateTime(1);
                Assert.AreEqual("1999-09-30", dtDate.ToString("yyyy-MM-dd"));
                strDate = reader.GetString(1);
                Assert.AreEqual("1999-09-30", strDate);
                dtDate = reader.GetDateTime(2);
                Assert.AreEqual("22:30:58", dtDate.ToString("HH:mm:ss"));
                strDate = reader.GetString(2);
                Assert.AreEqual("22:30:58", strDate);
                dtDate = reader.GetDateTime(3);
                Assert.AreEqual("1999-09-30 22:30:58", dtDate.ToString("yyyy-MM-dd HH:mm:ss"));
                strDate = reader.GetString(3);
                Assert.AreEqual("1999-09-30 22:30:58", strDate);

                hasNext = reader.Read();
                Assert.IsTrue(hasNext);
                dtDate = reader.GetDateTime(0);
                Assert.AreEqual("1999-11-30 21:30:58", dtDate.ToString("yyyy-MM-dd HH:mm:ss"));
                strDate = reader.GetString(0);
                Assert.AreEqual("1999-11-30 21:30:58", strDate);
                dtDate = reader.GetDateTime(1);
                Assert.AreEqual("1999-11-30", dtDate.ToString("yyyy-MM-dd"));
                strDate = reader.GetString(1);
                Assert.AreEqual("1999-11-30", strDate);
                dtDate = reader.GetDateTime(2);
                Assert.AreEqual("21:30:58", dtDate.ToString("HH:mm:ss"));
                strDate = reader.GetString(2);
                Assert.AreEqual("21:30:58", strDate);
                dtDate = reader.GetDateTime(3);
                Assert.AreEqual("1999-11-30 21:30:58", dtDate.ToString("yyyy-MM-dd HH:mm:ss"));
                strDate = reader.GetString(3);
                Assert.AreEqual("1999-11-30 21:30:58", strDate);
            }
            // all the date-based columns should magically move one hour back when we change timezone
            // GMT-6, or GMT-5 if DST is active
            using (NuoDbConnection connection = new NuoDbConnection(connectionString + ";TimeZone=America/Chicago"))
            {
                connection.Open();
                DbCommand command = new NuoDbCommand("select asTimestamp, asDate, asTime, asString from timezone", connection);
                DbDataReader reader = command.ExecuteReader();
                hasNext = reader.Read();
                Assert.IsTrue(hasNext);
                dtDate = reader.GetDateTime(0);
                Assert.AreEqual("1999-09-30 21:30:58", dtDate.ToString("yyyy-MM-dd HH:mm:ss"));
                strDate = reader.GetString(0);
                Assert.AreEqual("1999-09-30 21:30:58", strDate);
                dtDate = reader.GetDateTime(1);
                Assert.AreEqual("1999-09-30", dtDate.ToString("yyyy-MM-dd"));
                strDate = reader.GetString(1);
                Assert.AreEqual("1999-09-30", strDate);
                dtDate = reader.GetDateTime(2);
                Assert.AreEqual("21:30:58", dtDate.ToString("HH:mm:ss"));
                strDate = reader.GetString(2);
                Assert.AreEqual("21:30:58", strDate);
                dtDate = reader.GetDateTime(3);
                Assert.AreEqual("1999-09-30 22:30:58", dtDate.ToString("yyyy-MM-dd HH:mm:ss"));
                strDate = reader.GetString(3);
                Assert.AreEqual("1999-09-30 22:30:58", strDate);

                hasNext = reader.Read();
                Assert.IsTrue(hasNext);
                dtDate = reader.GetDateTime(0);
                Assert.AreEqual("1999-11-30 20:30:58", dtDate.ToString("yyyy-MM-dd HH:mm:ss"));
                strDate = reader.GetString(0);
                Assert.AreEqual("1999-11-30 20:30:58", strDate);
                dtDate = reader.GetDateTime(1);
                Assert.AreEqual("1999-11-30", dtDate.ToString("yyyy-MM-dd"));
                strDate = reader.GetString(1);
                Assert.AreEqual("1999-11-30", strDate);
                dtDate = reader.GetDateTime(2);
                Assert.AreEqual("20:30:58", dtDate.ToString("HH:mm:ss"));
                strDate = reader.GetString(2);
                Assert.AreEqual("20:30:58", strDate);
                dtDate = reader.GetDateTime(3);
                Assert.AreEqual("1999-11-30 21:30:58", dtDate.ToString("yyyy-MM-dd HH:mm:ss"));
                strDate = reader.GetString(3);
                Assert.AreEqual("1999-11-30 21:30:58", strDate);
            }
        }
예제 #22
0
 public NuoDbDataAdapter(NuoDbCommand selectCommand)
     : base()
 {
     this.SelectCommand = selectCommand;
 }
예제 #23
0
        public void TestCommand1()
        {
            using (NuoDbConnection connection = new NuoDbConnection(connectionString))
            {
                DbCommand command = new NuoDbCommand("select * from hockey", connection);

                connection.Open();
                DbDataReader reader = command.ExecuteReader();
                while (reader.Read())
                {
                    Console.WriteLine("\t{0}\t{1}\t{2}\t{3}", reader[0], reader[1], reader[2], reader["id"]);
                }
                reader.Close();
            }
        }
예제 #24
0
        private static void VerifyBulkLoad(int expectedCount, string expectedFirstRow)
        {
            using (NuoDbConnection connection = new NuoDbConnection(connectionString))
            {
                connection.Open();

                DbCommand command = new NuoDbCommand("select count(*) from temp", connection);
                object val = command.ExecuteScalar();

                Assert.AreEqual(expectedCount, val);

                command = new NuoDbCommand("select col from temp", connection);
                val = command.ExecuteScalar();

                Assert.AreEqual(expectedFirstRow, val);
            }
        }
예제 #25
0
 public override void Close()
 {
     closeCurrentResultSet();
     statement = null;
     closed    = true;
 }
예제 #26
0
 internal static void DropTable(NuoDbConnection cnn, string tableName)
 {
     DbCommand dropCommand = new NuoDbCommand("drop table if exists " + tableName, cnn);
     dropCommand.ExecuteNonQuery();
 }
예제 #27
0
        internal static void CreateHockeyTable()
        {
            using (NuoDbConnection connection = new NuoDbConnection(TestFixture1.connectionString))
            {
                connection.Open();
                DropTable(connection, "hockey");
                DbCommand createCommand = new NuoDbCommand("create table Hockey" +
                                                            "(" +
                                                            "   Id       bigint not NULL generated always as identity primary key," +
                                                            "   Number   Integer," +
                                                            "   Name     String," +
                                                            "   Position String," +
                                                            "   Team     String" +
                                                            ")", connection);
                createCommand.ExecuteNonQuery();

                DbCommand insertCommand = new NuoDbCommand("Insert into Hockey (Number, Name, Position, Team) Values (?,?,?,?)", connection);
                insertCommand.Prepare();

                insertCommand.Parameters[0].Value = 37;
                insertCommand.Parameters[1].Value = "PATRICE BERGERON";
                insertCommand.Parameters[2].Value = "Forward";
                insertCommand.Parameters[3].Value = "Bruins";
                insertCommand.ExecuteNonQuery();
                insertCommand.Parameters[0].Value = 48;
                insertCommand.Parameters[1].Value = "CHRIS BOURQUE";
                insertCommand.Parameters[2].Value = "Forward";
                insertCommand.Parameters[3].Value = "Bruins";
                insertCommand.ExecuteNonQuery();
                insertCommand.Parameters[0].Value = 11;
                insertCommand.Parameters[1].Value = "GREGORY CAMPBELL";
                insertCommand.Parameters[2].Value = "Forward";
                insertCommand.Parameters[3].Value = "Bruins";
                insertCommand.ExecuteNonQuery();
                insertCommand.Parameters[0].Value = 18;
                insertCommand.Parameters[1].Value = "NATHAN HORTON";
                insertCommand.Parameters[2].Value = "Forward";
                insertCommand.Parameters[3].Value = "Bruins";
                insertCommand.ExecuteNonQuery();
                insertCommand.Parameters[0].Value = 23;
                insertCommand.Parameters[1].Value = "CHRIS KELLY";
                insertCommand.Parameters[2].Value = "Forward";
                insertCommand.Parameters[3].Value = "Bruins";
                insertCommand.ExecuteNonQuery();
                insertCommand.Parameters[0].Value = 46;
                insertCommand.Parameters[1].Value = "DAVID KREJCI";
                insertCommand.Parameters[2].Value = "Forward";
                insertCommand.Parameters[3].Value = "Bruins";
                insertCommand.ExecuteNonQuery();
                insertCommand.Parameters[0].Value = 17;
                insertCommand.Parameters[1].Value = "MILAN LUCIC";
                insertCommand.Parameters[2].Value = "Forward";
                insertCommand.Parameters[3].Value = "Bruins";
                insertCommand.ExecuteNonQuery();
                insertCommand.Parameters[0].Value = 64;
                insertCommand.Parameters[1].Value = "LANE MACDERMID";
                insertCommand.Parameters[2].Value = "Forward";
                insertCommand.Parameters[3].Value = "Bruins";
                insertCommand.ExecuteNonQuery();
                insertCommand.Parameters[0].Value = 63;
                insertCommand.Parameters[1].Value = "BRAD MARCHAND";
                insertCommand.Parameters[2].Value = "Forward";
                insertCommand.Parameters[3].Value = "Bruins";
                insertCommand.ExecuteNonQuery();
                insertCommand.Parameters[0].Value = 20;
                insertCommand.Parameters[1].Value = "DANIEL PAILLE";
                insertCommand.Parameters[2].Value = "Forward";
                insertCommand.Parameters[3].Value = "Bruins";
                insertCommand.ExecuteNonQuery();
                insertCommand.Parameters[0].Value = 49;
                insertCommand.Parameters[1].Value = "RICH PEVERLEY";
                insertCommand.Parameters[2].Value = "Forward";
                insertCommand.Parameters[3].Value = "Bruins";
                insertCommand.ExecuteNonQuery();
                insertCommand.Parameters[0].Value = 91;
                insertCommand.Parameters[1].Value = "MARC SAVARD";
                insertCommand.Parameters[2].Value = "Forward";
                insertCommand.Parameters[3].Value = "Bruins";
                insertCommand.ExecuteNonQuery();
                insertCommand.Parameters[0].Value = 19;
                insertCommand.Parameters[1].Value = "TYLER SEGUIN";
                insertCommand.Parameters[2].Value = "Forward";
                insertCommand.Parameters[3].Value = "Bruins";
                insertCommand.ExecuteNonQuery();
                insertCommand.Parameters[0].Value = 22;
                insertCommand.Parameters[1].Value = "SHAWN THORNTON";
                insertCommand.Parameters[2].Value = "Forward";
                insertCommand.Parameters[3].Value = "Bruins";
                insertCommand.ExecuteNonQuery();
                insertCommand.Parameters[0].Value = 55;
                insertCommand.Parameters[1].Value = "JOHNNY BOYCHUK";
                insertCommand.Parameters[2].Value = "Defense";
                insertCommand.Parameters[3].Value = "Bruins";
                insertCommand.ExecuteNonQuery();
                insertCommand.Parameters[0].Value = 33;
                insertCommand.Parameters[1].Value = "ZDENO CHARA";
                insertCommand.Parameters[2].Value = "Defense";
                insertCommand.Parameters[3].Value = "Bruins";
                insertCommand.ExecuteNonQuery();
                insertCommand.Parameters[0].Value = 21;
                insertCommand.Parameters[1].Value = "ANDREW FERENCE";
                insertCommand.Parameters[2].Value = "Defense";
                insertCommand.Parameters[3].Value = "Bruins";
                insertCommand.ExecuteNonQuery();
                insertCommand.Parameters[0].Value = 27;
                insertCommand.Parameters[1].Value = "DOUGIE HAMILTON";
                insertCommand.Parameters[2].Value = "Defense";
                insertCommand.Parameters[3].Value = "Bruins";
                insertCommand.ExecuteNonQuery();
                insertCommand.Parameters[0].Value = 45;
                insertCommand.Parameters[1].Value = "AARON JOHNSON";
                insertCommand.Parameters[2].Value = "Defense";
                insertCommand.Parameters[3].Value = "Bruins";
                insertCommand.ExecuteNonQuery();
                insertCommand.Parameters[0].Value = 54;
                insertCommand.Parameters[1].Value = "ADAM MCQUAID";
                insertCommand.Parameters[2].Value = "Defense";
                insertCommand.Parameters[3].Value = "Bruins";
                insertCommand.ExecuteNonQuery();
                insertCommand.Parameters[0].Value = 44;
                insertCommand.Parameters[1].Value = "DENNIS SEIDENBERG";
                insertCommand.Parameters[2].Value = "Defense";
                insertCommand.Parameters[3].Value = "Bruins";
                insertCommand.ExecuteNonQuery();
                insertCommand.Parameters[0].Value = 35;
                insertCommand.Parameters[1].Value = "ANTON KHUDOBIN";
                insertCommand.Parameters[2].Value = "Goalie";
                insertCommand.Parameters[3].Value = "Bruins";
                insertCommand.ExecuteNonQuery();
                insertCommand.Parameters[0].Value = 40;
                insertCommand.Parameters[1].Value = "TUUKKA RASK";
                insertCommand.Parameters[2].Value = "Goalie";
                insertCommand.Parameters[3].Value = "Bruins";
                insertCommand.ExecuteNonQuery();
                insertCommand.Parameters[0].Value = 1;
                insertCommand.Parameters[1].Value = "MAX SUMMIT";
                insertCommand.Parameters[2].Value = "Fan";
                insertCommand.Parameters[3].Value = "Bruins";
                insertCommand.ExecuteNonQuery();

            }
        }
예제 #28
0
        public void TestAsynchronousUpdate1()
        {
            using (NuoDbConnection connection = new NuoDbConnection(connectionString))
            {
                connection.Open();
                Utils.DropTable(connection, "temp");

                NuoDbCommand createCommand = new NuoDbCommand("create table temp (col string)", connection);
                IAsyncResult result = createCommand.BeginExecuteNonQuery();

                int count = createCommand.EndExecuteNonQuery(result);
            }
        }
예제 #29
0
        internal static int GetTableRows()
        {
            using (NuoDbConnection connection = new NuoDbConnection(connectionString))
            {
                DbCommand command = new NuoDbCommand("select count(*) from hockey", connection);

                connection.Open();
                return (int)command.ExecuteScalar();
            }
        }
예제 #30
0
        public void TestScalability()
        {
            using (NuoDbConnection cnn = new NuoDbConnection(connectionString))
            {
                cnn.Open();
                Utils.DropTable(cnn, "temp");

                DbCommand createCommand = new NuoDbCommand("create table temp (col1 integer, col2 integer)", cnn);
                int result = createCommand.ExecuteNonQuery();

                DbCommand cmm = cnn.CreateCommand();
                cmm.CommandText = "insert into temp(col1, col2) values(?, ?)";
                cmm.Parameters.Add(new NuoDbParameter { DbType = DbType.Int32, ParameterName = "col1" });
                cmm.Parameters.Add(new NuoDbParameter { DbType = DbType.Int32, ParameterName = "col2" });
                cmm.Prepare();

                int[] count = new int[] { 1000, 5000, 10000, 20000, 40000 };
                double[] times = new double[count.Length];
                for (var k = 0; k < count.Length; k++)
                {
                    DateTime start = DateTime.Now;
                    for (var i = 1; i <= count[k]; i++)
                    {
                        cmm.Parameters["col1"].Value = i;
                        cmm.Parameters["col2"].Value = 2 * i;
                        cmm.ExecuteNonQuery();
                    }
                    DateTime end = DateTime.Now;
                    times[k] = (end - start).TotalMilliseconds;
                    if (k == 0)
                        Console.WriteLine("{0} runs = {1} msec", count[k], times[k]);
                    else
                    {
                        double countRatio = (count[k] / count[0]);
                        double timeRatio = (times[k] / times[0]);
                        Console.WriteLine("{0} runs = {1} msec => {2} {3}", count[k], times[k], countRatio, timeRatio);
                        Assert.IsTrue(timeRatio < (countRatio * 1.50), "Scalability at {2} rows is not linear! (time for {0} rows = {1}; time for {2} rows = {3} => ratio = {4} is greater than {5}",
                            new object[] { count[0], times[0], count[k], times[k], timeRatio, countRatio });

                    }
                }
            }
        }
예제 #31
0
        public void TestReaderNoStoredProcedureWithParam()
        {
            using (NuoDbConnection connection = new NuoDbConnection(TestFixture1.connectionString))
            {
                connection.Open();
                new NuoDbCommand("drop procedure nunit_test if exists", connection).ExecuteNonQuery();
                new NuoDbCommand("create procedure nunit_test(in p1 integer) returns table(id integer, value string) as var i = 0; while(i<p1) insert into table values (i, 'xx'); i = i+1; end_while; end_procedure", connection).ExecuteNonQuery();

                NuoDbCommand cmd = new NuoDbCommand("call nunit_test(?)", connection);
                cmd.Parameters.Add(10);
                int n = 0;
                using (DbDataReader reader = cmd.ExecuteReader())
                {
                    while (reader.Read())
                    {
                        Assert.AreEqual(n++, reader[0]);
                        Assert.AreEqual("xx", reader[1]);
                    }
                    Assert.AreEqual(10, n);
                }
            }
        }
예제 #32
0
        private static void CreateTargetForBulkLoad()
        {
            using (NuoDbConnection connection = new NuoDbConnection(connectionString))
            {
                connection.Open();
                Utils.DropTable(connection, "temp");

                DbCommand createCommand = new NuoDbCommand("create table temp (col string)", connection);
                int result = createCommand.ExecuteNonQuery();
            }
        }
예제 #33
0
        private void WriteToServer(Feeder feeder)
        {
            if (this.tableName.Length == 0)
            {
                throw new ArgumentException("The name of the destination table hasn't been specified", "DestinationTableName");
            }

            StringBuilder builder = new StringBuilder();

            builder.Append("INSERT INTO `");
            builder.Append(this.tableName.Replace("`", "``"));
            builder.Append("` ");
            if (mappings.Count == 0)
            {
                // the target table has the same number and names of the columns as in the specified input rows
                builder.Append("VALUES (");
                for (int i = 0; i < feeder.FieldCount; i++)
                {
                    if (i != 0)
                    {
                        builder.Append(", ");
                    }
                    builder.Append("?");
                }
                builder.Append(")");
            }
            else
            {
                DataRowCollection targetColumns = null;
                builder.Append(" (");
                for (int i = 0; i < mappings.Count; i++)
                {
                    NuoDbBulkLoaderColumnMapping mapping = mappings[i];
                    if (i != 0)
                    {
                        builder.Append(", ");
                    }
                    builder.Append("`");
                    if (mapping.DestinationColumn == null)
                    {
                        // we are requested to map to a target column that is identified with its ordinal number, so
                        // fetch the schema of the target table to find out what is its name
                        if (targetColumns == null)
                        {
                            // split the destination table into its different parts
                            string[] parts = this.tableName.Split(new char[] { '.' });

                            DataTable targetSchema = this.connection.GetSchema("Columns", new string[] { null,                                   // catalog
                                                                                                         parts.Length == 2 ? parts[0] : null,    // schema
                                                                                                         parts.Length == 2 ? parts[1] : parts[0] // table
                                                                               });
                            targetColumns = targetSchema.Rows;
                        }

                        if (mapping.DestinationOrdinal < 0 || mapping.DestinationOrdinal > targetColumns.Count)
                        {
                            throw new IndexOutOfRangeException(String.Format("The specified ordinal of the target column ({0}) is outside the range of the column count ({1}) of table {2}",
                                                                             new object[] { mapping.DestinationOrdinal, targetColumns.Count, this.tableName }));
                        }

                        string columnName = (string)(targetColumns[mapping.DestinationOrdinal]["COLUMN_NAME"]);
                        builder.Append(columnName.Replace("`", "``"));
                    }
                    else
                    {
                        builder.Append(mapping.DestinationColumn.Replace("`", "``"));
                    }
                    builder.Append("`");
                }
                builder.Append(") VALUES (");
                for (int i = 0; i < mappings.Count; i++)
                {
                    if (i != 0)
                    {
                        builder.Append(", ");
                    }
                    builder.Append("?");
                }
                builder.Append(")");
            }
            string sqlString = builder.ToString();

#if DEBUG
            System.Diagnostics.Trace.WriteLine("NuoDbBulkLoader::WriteToServer: " + sqlString);
#endif

            if (this.connection.State != ConnectionState.Open)
            {
                this.connection.Open();
            }

            using (NuoDbCommand command = new NuoDbCommand(sqlString, this.connection))
            {
                command.Prepare();
                int totalSize = 0;

                // do the check for out-of-range values just once
                foreach (NuoDbBulkLoaderColumnMapping mapping in mappings)
                {
                    if (mapping.SourceColumn == null && mapping.SourceOrdinal < 0 || mapping.SourceOrdinal > feeder.FieldCount)
                    {
                        throw new IndexOutOfRangeException(String.Format("The specified ordinal of the source column ({0}) is outside the range of the column count ({1})",
                                                                         new object[] { mapping.SourceOrdinal, feeder.FieldCount }));
                    }
                }

                while (true)
                {
                    EncodedDataStream dataStream = new RemEncodedStream(connection.InternalConnection.protocolVersion);
                    dataStream.startMessage(Protocol.ExecuteBatchPreparedStatement);
                    dataStream.encodeInt(command.handle);
                    int batchCount = 0;

                    for (; batchCount < this.batchSize && feeder.MoveNext(); batchCount++)
                    {
                        dataStream.encodeInt(command.Parameters.Count);
                        if (mappings.Count == 0)
                        {
                            for (int i = 0; i < feeder.FieldCount; i++)
                            {
                                dataStream.encodeDotNetObject(feeder[i]);
                            }
                        }
                        else
                        {
                            foreach (NuoDbBulkLoaderColumnMapping mapping in mappings)
                            {
                                if (mapping.SourceColumn == null)
                                {
                                    dataStream.encodeDotNetObject(feeder[mapping.SourceOrdinal]);
                                }
                                else
                                {
                                    dataStream.encodeDotNetObject(feeder[mapping.SourceColumn]);
                                }
                            }
                        }
                    }

                    // the iterator hasn't found any more data to import, let's break out
                    if (batchCount == 0)
                    {
                        break;
                    }

                    dataStream.encodeInt(-1);
                    dataStream.encodeInt(batchCount);
                    totalSize += batchCount;
#if DEBUG
                    System.Diagnostics.Trace.WriteLine("NuoDbBulkLoader::WriteToServer: sending a batch of " + batchCount + " rows");
#endif
                    this.connection.InternalConnection.sendAndReceive(dataStream);

                    bool   hasErrors    = false;
                    string errorMessage = string.Empty;

                    for (int i = 0; i < batchCount; i++)
                    {
                        int result = dataStream.getInt();
                        if (result == EXECUTE_FAILED)
                        {
                            if (this.connection.InternalConnection.protocolVersion >= Protocol.PROTOCOL_VERSION6)
                            {
                                int    sqlCode = dataStream.getInt();
                                string message = dataStream.getString();

                                errorMessage = AppendError(errorMessage, message, i);
                            }
                            hasErrors = true;
                        }
                    }

                    if (this.connection.InternalConnection.protocolVersion >= Protocol.PROTOCOL_VERSION3)
                    {
                        long txnId          = dataStream.getLong();
                        int  nodeId         = dataStream.getInt();
                        long commitSequence = dataStream.getLong();
                        this.connection.InternalConnection.setLastTransaction(txnId, nodeId, commitSequence);
                    }

                    if (handlers.Count != 0)
                    {
                        BatchProcessedEventHandler[] tmpArray = new BatchProcessedEventHandler[handlers.Count];
                        handlers.CopyTo(tmpArray);
                        BatchProcessedEventArgs args = new BatchProcessedEventArgs();
                        args.BatchSize = batchCount;
                        args.TotalSize = totalSize;
                        args.HasErrors = hasErrors;
                        foreach (BatchProcessedEventHandler h in tmpArray)
                        {
                            h.Invoke(this, args);
                        }
                    }

                    if (hasErrors)
                    {
                        throw new NuoDbSqlException(errorMessage, NuoDbSqlCode.FindError("BATCH_UPDATE_ERROR"));
                    }
                }
            }
        }
예제 #34
0
        public void TestBulkLoad_DataReaderWithMappingOrdinal2Ordinal()
        {
            CreateTargetForBulkLoad();

            NuoDbBulkLoader loader = new NuoDbBulkLoader(connectionString);
            loader.BatchSize = 2;
            loader.DestinationTableName = "TEMP";
            loader.ColumnMappings.Add(1, 0);

            using (NuoDbConnection connection = new NuoDbConnection(connectionString))
            {
                DbCommand command = new NuoDbCommand("select number, position as xyz2 from hockey order by number", connection);

                connection.Open();
                DbDataReader reader = command.ExecuteReader();
                loader.WriteToServer(reader);
                reader.Close();

                command = new NuoDbCommand("select count(*) from hockey", connection);
                object val = command.ExecuteScalar();

                VerifyBulkLoad((int)val, "Fan");
            }
        }
예제 #35
0
        public void TestPrepareParamIn()
        {
            using (NuoDbConnection connection = new NuoDbConnection(TestFixture1.connectionString))
            {
                connection.Open();
                new NuoDbCommand("drop procedure nunit_test if exists", connection).ExecuteNonQuery();
                new NuoDbCommand("create procedure nunit_test(in p1 string) as throw p1; end_procedure", connection).ExecuteNonQuery();

                NuoDbCommand cmd = new NuoDbCommand("nunit_test", connection);
                cmd.CommandType = CommandType.StoredProcedure;
                cmd.Prepare();
                Assert.IsTrue(cmd.Parameters.Contains("p1"));
                Assert.AreEqual(ParameterDirection.Input, cmd.Parameters["p1"].Direction);
                cmd.Parameters["p1"].Value = "hello";
                try
                {
                    cmd.ExecuteNonQuery();
                    Assert.Fail();
                }
                catch (Exception e)
                {
                    Assert.AreEqual("hello", e.Message);
                }
            }
        }
예제 #36
0
        public object Clone()
        {
            NuoDbCommand command = new NuoDbCommand();

            command.CommandText = this.CommandText;
            command.Connection = this.Connection;
            command.Transaction = this.Transaction;
            command.CommandType = this.CommandType;
            command.CommandTimeout = this.CommandTimeout;
            command.UpdatedRowSource = this.UpdatedRowSource;

            if (this.ExpectedColumnTypes != null)
                command.ExpectedColumnTypes = (Type[])this.ExpectedColumnTypes.Clone();

            foreach (NuoDbParameter p in this.Parameters)
            {
                command.Parameters.Add(((ICloneable)p).Clone());
            }

            return command;
        }
예제 #37
0
        public void TestPrepareParamInOut()
        {
            using (NuoDbConnection connection = new NuoDbConnection(TestFixture1.connectionString))
            {
                connection.Open();
                new NuoDbCommand("drop procedure nunit_test if exists", connection).ExecuteNonQuery();
                new NuoDbCommand("create procedure nunit_test(inout p1 string) as if(p1='goodbye') p1='hello'; end_if; end_procedure", connection).ExecuteNonQuery();

                NuoDbCommand cmd = new NuoDbCommand("nunit_test", connection);
                cmd.CommandType = CommandType.StoredProcedure;
                cmd.Prepare();
                Assert.IsTrue(cmd.Parameters.Contains("p1"));
                Assert.AreEqual(ParameterDirection.InputOutput, cmd.Parameters["p1"].Direction);
                cmd.Parameters["p1"].Value = "goodbye";
                cmd.ExecuteNonQuery();
                Assert.AreEqual("hello", cmd.Parameters["p1"].Value);
            }
        }
예제 #38
0
        public void TestDataType(string sqlType, object value, object expected)
        {
            using (NuoDbConnection connection = new NuoDbConnection(connectionString))
            {
                connection.Open();
                //DbTransaction transaction = connection.BeginTransaction();

                Utils.DropTable(connection, "temp");

                DbCommand createCommand = new NuoDbCommand("create table temp (col " + sqlType + ")", connection);
                int result = createCommand.ExecuteNonQuery();

                DbCommand insertCommand = new NuoDbCommand("insert into temp (col) values (?)", connection);
                insertCommand.Parameters.Add(value);
                int inserted = insertCommand.ExecuteNonQuery();

                DbCommand command = new NuoDbCommand("select col from temp", connection);
                object val = command.ExecuteScalar();
                // compare dates using the string representation
                if (val.GetType() == expected.GetType())
                    Assert.AreEqual(expected, val);
                else if (val is DateTime)
                    Assert.AreEqual(DateTime.Parse(expected.ToString()), val);
                else if (val is TimeSpan)
                    Assert.AreEqual(TimeSpan.Parse(expected.ToString()), val);
                else if (expected is ICollection)
                    CollectionAssert.AreEqual((ICollection)expected, (ICollection)val);
                else
                    Assert.AreEqual(expected, val);

                //transaction.Rollback();
            }
        }
예제 #39
0
        public void TestNoPrepareNamedParamOut()
        {
            using (NuoDbConnection connection = new NuoDbConnection(TestFixture1.connectionString))
            {
                connection.Open();
                new NuoDbCommand("drop procedure nunit_test if exists", connection).ExecuteNonQuery();
                new NuoDbCommand("create procedure nunit_test(out p1 string, out p2 string) as p1='hello'; end_procedure", connection).ExecuteNonQuery();

                NuoDbCommand cmd = new NuoDbCommand("nunit_test", connection);
                cmd.CommandType = CommandType.StoredProcedure;
                NuoDbParameter param1 = new NuoDbParameter();
                param1.ParameterName = "p2";
                param1.Direction = ParameterDirection.Output;
                cmd.Parameters.Add(param1);
                NuoDbParameter param2 = new NuoDbParameter();
                param2.ParameterName = "p1";
                param2.Direction = ParameterDirection.Output;
                cmd.Parameters.Add(param2);
                cmd.ExecuteNonQuery();
                Assert.AreEqual("hello", cmd.Parameters["p1"].Value);
            }
        }