Est-il possible d'accéder aux "messages de sous-produits" SQL Server via ADO.NET? En raison du manque de mots, par "messages de sous-produits", j'entends la sortie qui apparaît dans l'onglet Messages de Microsoft SQL Server Management Studio. Ce que j'ai particulièrement l'esprit est de lire la sortie de SET STATISTICS TIME ON. Il semble que SqlDataReader n'offre rien dans ce domaine.Accès aux messages SQL Server via ADO.NET
Répondre
Oui, il y a un événement sur le appelé SqlInfoMessage
, que vous pouvez brancher en classe SqlConnection
:
SqlConnection _con =
new SqlConnection("server=.;database=Northwind;integrated Security=SSPI;");
_con.InfoMessage += new SqlInfoMessageEventHandler(InfoMessageHandler);
Le gestionnaire d'événements ressemblera à ceci:
static void InfoMessageHandler(object sender, SqlInfoMessageEventArgs e)
{
string myMsg = e.Message;
}
Le e.Message
est le message imprimé à la fenêtre de message dans SQL Server Management Studio.
Merci pour la réponse ci-dessus. J'ai juste fait une petite expérience et trouvé un petit problème inattendu (un bug?) Lors de la lecture des messages (dans ce cas produit par SET STATISTICS TIME ON) à partir d'un résultat multi-recordset. Comme indiqué ci-dessous, il faut appeler NextResult même après le dernier resultset afin d'obtenir le dernier message. Cela n'est pas nécessaire dans le cas d'un résultat de jeu d'enregistrements unique.
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);
}
}
}
Ce serait une excellente réponse à une question distincte, p. "Comment obtenir le dernier message d'information après l'exécution d'une requête renvoyant plusieurs jeux de résultats?" ou quelque chose de similaire. –
Comme un commentaire sur le code pour quiconque ne sait pas, les boucles while vides peuvent aussi être écrites comme: 'while (rdr.Read());' –
- 1. Accès CSV via ADO.NET en 64 bits?
- 2. SQL Server - SQL Cursor vs ADO.NET
- 3. Accès aux vignettes via la boucle for.
- 4. Accès aux services Web de rapport SQL
- 5. Accès aux ensembles de résultats depuis Procédures stockées Transact-SQL SQL Server
- 6. Comment catégoriser l'accès aux données SQL Server pour les papiers?
- 7. Accéder aux messages muraux Facebook
- 8. Accès aux signets des cartes iphone via le SDK
- 9. Accès aux capacités BlueTooth de l'iPhone via SDK?
- 10. Accès au rôle "public" dans SQL Server
- 11. Accès à la base de données SQL Server Express 2005 via SSMS 64 bits 2008
- 12. meilleur moyen d'accéder aux données via internet. Services de données ADO.Net?
- 13. chaîne de connexion de ADO.Net de SQL Server
- 14. Gestion d'état via Sql Server 2005
- 15. Accès aux partages réseau
- 16. Accès aux listes d'images
- 17. Accès aux objets Json
- 18. accès aux paramètres POST
- 19. retour plusieurs jeux de résultats de ms accès à ADO.NET
- 20. NHibernate: accès aux propriétés de configuration (dialecte Sql) à l'exécution
- 21. Accès de type tableau aux variables dans T-SQL
- 22. Twitter: Messages locaux via API
- 23. Accès aux commandes ASP dans un datalist
- 24. SQL Server non configuré pour l'accès aux données
- 25. SQL Server 2K - Tâches de l'agent - Erreurs et messages
- 26. sql server envoyer des messages de sortie par e-mail
- 27. Connexion à SQL Server avec CL-SQL via unixODBC/FreeTDS
- 28. Obtenir le schéma SQL Server via une requête SQL?
- 29. Accès aux messages d'erreur personnalisés pour le validateur InArray lors de l'utilisation de Zend_Form_Element_Select
- 30. Accès aux données avec des procédures stockées
+1 pour cette page. Il a été sous mon nez dans ADO ('OnInfoMessage') pendant plus d'une décennie; Je n'ai jamais vraiment apprécié ce que c'était. –