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