Ejemplo n.º 1
0
        public void ExecuteReader_WithoutSelects_RetainsServerOrder()
        {
            var results = new List <string>();

            var messageEventHandler = new AseInfoMessageEventHandler((sender, eventArgs) =>
            {
                foreach (AseError error in eventArgs.Errors)
                {
                    results.Add(error.Message);
                }
            });

            using (var connection = new AseConnection(ConnectionStrings.Pooled))
            {
                connection.Open();

                try
                {
                    connection.InfoMessage += messageEventHandler;

                    using (var command = connection.CreateCommand())
                    {
                        command.CommandText = "[dbo].[sp_test_message_order]";
                        command.CommandType = CommandType.StoredProcedure;
                        command.Parameters.Add("@runSelect", 'N');
                        command.Parameters.Add(new AseParameter("@status", AseDbType.VarChar)
                        {
                            Direction = ParameterDirection.Output
                        });
                        // ReSharper disable once UnusedVariable
                        using (var reader = command.ExecuteReader())
                        {
                            // Do not attempt to read results for this test
                            // server output should still be sent
                        }
                        Assert.AreEqual("OK", command.Parameters["@status"].Value.ToString());
                    }
                }
                finally
                {
                    connection.InfoMessage -= messageEventHandler;
                }
            }

            CollectionAssert.AreEqual(_expectedResultsWithoutSelect, results.ToArray());
        }
        public void OpenConnection_OutputsInfoMessages()
        {
            // since we care about stuff that happens when the connection is (physically) opened
            // we can't use a connection coming from the pool because it might have already been opened.
            using (var connection = new AseConnection(ConnectionStrings.NonPooled))
            {
                var infoMessages = new List <AseError>();
                AseInfoMessageEventHandler handlerFunc = (sender, args) =>
                {
                    foreach (AseError message in args.Errors)
                    {
                        infoMessages.Add(message);
                    }
                };

                connection.InfoMessage += handlerFunc;

                connection.Open();

                connection.InfoMessage -= handlerFunc;

                Assert.IsNotEmpty(infoMessages);
            }
        }
Ejemplo n.º 3
0
        public void ExecuteReader_WithMessagesEmbeddedInResultsAndUsingDataTable_RetainsServerOrder(char withSelect, string[] expectedResults)
        {
            var results = new List <string>();
            var output  = new List <string>();

            var messageEventHandler = new AseInfoMessageEventHandler((sender, eventArgs) =>
            {
                foreach (AseError error in eventArgs.Errors)
                {
                    output.Add(error.Message);
                }
            });

            using (var connection = new AseConnection(ConnectionStrings.Pooled))
            {
                connection.Open();

                try
                {
                    connection.InfoMessage += messageEventHandler;

                    using (var command = connection.CreateCommand())
                    {
                        command.CommandText = "[dbo].[sp_test_message_order]";
                        command.CommandType = CommandType.StoredProcedure;
                        command.Parameters.Add("@runSelect", withSelect);
                        command.Parameters.Add(new AseParameter("@status", AseDbType.VarChar)
                        {
                            Direction = ParameterDirection.Output
                        });

                        using (var reader = command.ExecuteReader())
                        {
                            MergeOuput();

                            int resultCount = 0;
                            if (withSelect == 'Y')
                            {
                                // Cursor 0 exists and has rows
                                Assert.False(reader.IsClosed);
                                Assert.True(reader.HasRows);
                            }
                            else
                            {
                                Assert.True(reader.IsClosed);
                                Assert.False(reader.HasRows);
                            }
                            while (!reader.IsClosed)
                            {
                                MergeOuput();

                                var dataTable = new DataTable();
                                dataTable.Load(reader);
                                if (dataTable.Rows.Count > 0)
                                {
                                    results.Add(dataTable.Rows[0].ItemArray[0].ToString());
                                }

                                // Only add the next output after the previous results
                                // have been inserted
                                MergeOuput();

                                resultCount++;
                                switch (resultCount)
                                {
                                // Cursor 1 exists and has no rows
                                case 1:
                                    Assert.False(reader.IsClosed);
                                    Assert.False(reader.HasRows);
                                    break;

                                // Cursor 2 exists and has rows
                                case 2:
                                    Assert.False(reader.IsClosed);
                                    Assert.True(reader.HasRows);
                                    break;

                                // Cursor 3 does not exist and so has no rows
                                case 3:
                                    Assert.True(reader.IsClosed);
                                    Assert.False(reader.HasRows);
                                    break;
                                }
                            }

                            MergeOuput();
                        }
                        Assert.AreEqual("OK", command.Parameters["@status"].Value.ToString());
                    }
                }
                finally
                {
                    connection.InfoMessage -= messageEventHandler;
                }
            }

            CollectionAssert.AreEqual(expectedResults, results.ToArray());

            void MergeOuput()
            {
                results.AddRange(output);
                output.Clear();
            }
        }