¿Es posible acceder a los "mensajes de subproducto" de SQL Server a través de ADO.NET? Debido a la falta de palabras, me refiero a "mensajes de subproductos" que aparecen en la pestaña Mensajes en Microsoft SQL Server Management Studio. Lo que particularmente me importa es leer la salida de SET STATISTICS TIME ON. Parece que SqlDataReader no ofrece nada en este asunto.Acceso a mensajes de SQL Server a través de ADO.NET
Respuesta
Sí, hay un evento en la clase SqlConnection
llamada SqlInfoMessage
, que se puede enganchar en:
SqlConnection _con =
new SqlConnection("server=.;database=Northwind;integrated Security=SSPI;");
_con.InfoMessage += new SqlInfoMessageEventHandler(InfoMessageHandler);
El controlador de eventos se verá así:
static void InfoMessageHandler(object sender, SqlInfoMessageEventArgs e)
{
string myMsg = e.Message;
}
El e.Message
es el mensaje impreso a la ventana de mensaje en SQL Server Management Studio.
Gracias por la respuesta anterior. Acabo de hacer un pequeño experimento y encontré un pequeño error inesperado (¿un error?) Al leer mensajes (en este caso producidos por SET STATISTICS TIME ON) de un resultado de varios registros. Como se indica a continuación, se debe llamar a NextResult incluso después del último conjunto de resultados para obtener el último mensaje. Esto no es necesario en el caso de un solo resultado del conjunto de registros.
using System;
using System.Data.SqlClient;
namespace TimingTest
{
class Program
{
static void Main(string[] args)
{
SqlConnection conn = new SqlConnection("some_conn_str");
conn.Open();
conn.InfoMessage += new SqlInfoMessageEventHandler(Message);
SqlCommand cmd = new SqlCommand("some_sp", conn);
cmd.CommandType = System.Data.CommandType.StoredProcedure;
SqlDataReader rdr = cmd.ExecuteReader();
while (rdr.Read()) { };
rdr.NextResult();
while (rdr.Read()) { };
// this is needed to print the second message
rdr.NextResult();
rdr.Close();
conn.Close();
}
static void Message(object sender, SqlInfoMessageEventArgs e)
{
Console.Out.WriteLine(e.Message);
}
}
}
Esto sería genial como respuesta a una pregunta separada, p. Ej. "¿Cómo obtengo el último mensaje de información después de ejecutar una consulta que devuelve múltiples conjuntos de resultados?" o algo similar. –
Como comentario sobre el código para cualquiera que no lo sepa, los bucles while vacíos también se pueden escribir como: 'while (rdr.Read());' –
- 1. Backup SQL Server a través de C#
- 2. C++ Acceso a SQL Server desde Linux
- 3. Conectar a SQL Server a través de PDO usando el controlador de SQL Server
- 4. Cambiando de usar SQL Server Express a SQL Server Compact
- 5. Cómo conectarse a SQL Server a través del servidor proxy
- 6. SQL Server no está configurado para el acceso a datos
- 7. Cómo configuro SQL Server para permitir el acceso a través de IIS
- 8. iterar a través de filas en SQL Server 2008
- 9. Sql Server texto libre a través de Entity Framework
- 10. Intercambiar mensajes HL7 a través de Internet
- 11. SQL Server 2008 a SQL Server 2005
- 12. ¿Cómo acceder a datos de Oracle utilizando Linq a través de ADO.net?
- 13. Almacenamiento de mensajes Log4Net en SQL Server
- 14. Deshabilitar completamente el acceso remoto a SQL Server
- 15. No se puede conectar a SQL Server - acceso fallido
- 16. ¿Cómo ejecuto mi archivo de script .sql a través de ADO.NET?
- 17. Determine la versión de SQL Server de ADO.NET
- 18. Acceder a SQL Server en Azure VM a través de SQL Server Management Studio en mi máquina local
- 19. Acceso a conjuntos de resultados desde Procedimientos almacenados Transact-SQL SQL Server
- 20. SPID de un SqlConnection (SQL-Server) en ADO.NET
- 21. degradación de SQL Server 2008 a SQL Server 2005
- 22. Acceso puerto serie a través de php
- 23. Acceso a BlueTooth Abilities de iPhone a través de SDK?
- 24. Acceso remoto a Team Foundation Server 2010
- 25. ¿No puedo obtener acceso a mi base de datos creada a través de Visual Studio?
- 26. SQL Server dando inicio de sesión (usuarios) acceso de db_owner a la base de datos
- 27. Ruby conectado a SQL Server
- 28. Obtener el esquema de SQL Server a través de una consulta SQL?
- 29. acceso de rol "público" en SQL Server
- 30. Envío de SMS/mensajes de texto a través de PHP
+1 para esto. Ha estado en mis narices en ADO ('OnInfoMessage') por más de una década; Simplemente nunca me gustó lo que era. –