2016-07-06 7 views
0

angezeigt wurden Ich versuche, den Text in "Nachrichten" Teil auf eine Zeichenfolge-Variable in C# .net nach dem Ausführen der Abfrage aus ableiten mein Programm.Was ist der Weg, um die Nachrichten, die in SQLManagementStudio nach dem Ausführen einer Abfrage in C# (Programmierung)

Wie,

int messag = convert.ToInt32(command.ExecuteNonQuery()) 

, die die nicht zurückgibt. der betroffenen Zeilen, so wie ich den Text aus dem "Nachrichten" -Teil in eine String-Variable abrufen möchte, wenn er so ausgeführt wird.

Ist das wirklich möglich?

SQL query execution message

+0

Dies kann Ihnen helfen: http: //stackoverflow.com/questions/1724404/set-nocount-on-and-reading-messages-using-c-sharp-and-ado-net – TheGameiswar

Antwort

1

Sie Ereignishandler für anbringen können, wenn ein Fehler oder Info gemeldet wird, wie in diesem post erläutert.

namespace Test 
{ 
    using System; 
    using System.Data; 
    using System.Data.SqlClient; 

    public class Program 
    { 
     public static int Main(string[] args) 
     { 
      if (args.Length != 2) 
      { 
       Usage(); 
       return 1; 
      } 

      var conn = args[0]; 
      var sqlText = args[1]; 
      ShowSqlErrorsAndInfo(conn, sqlText); 

      return 0; 
     } 

     private static void Usage() 
     { 
      Console.WriteLine("Usage: sqlServerConnectionString sqlCommand"); 
      Console.WriteLine(""); 
      Console.WriteLine(" example: \"Data Source=.;Integrated Security=true\" \"DBCC CHECKDB\""); 
     } 

     public static void ShowSqlErrorsAndInfo(string connectionString, string query) 
     { 
      using (SqlConnection connection = new SqlConnection(connectionString)) 
      { 
       connection.StateChange += OnStateChange; 
       connection.InfoMessage += OnInfoMessage; 

       SqlCommand command = new SqlCommand(query, connection); 
       try 
       { 
        command.Connection.Open(); 
        Console.WriteLine("Command execution starting."); 
        SqlDataReader dr = command.ExecuteReader(); 
        if (dr.HasRows) 
        { 
         Console.WriteLine("Rows returned."); 
         while (dr.Read()) 
         { 
          for (int idx = 0; idx < dr.FieldCount; idx++) 
          { 
           Console.Write("{0} ", dr[idx].ToString()); 
          } 

          Console.WriteLine(); 
         } 
        } 

        Console.WriteLine("Command execution complete."); 
       } 
       catch (SqlException ex) 
       { 
        DisplaySqlErrors(ex); 
       } 
       finally 
       { 
        command.Connection.Close(); 
       } 
      } 
     } 

     private static void DisplaySqlErrors(SqlException exception) 
     { 
      foreach (SqlError err in exception.Errors) 
      { 
       Console.WriteLine("ERROR: {0}", err.Message); 
      } 
     } 

     private static void OnInfoMessage(object sender, SqlInfoMessageEventArgs e) 
     { 
      foreach (SqlError info in e.Errors) 
      { 
       Console.WriteLine("INFO: {0}", info.Message); 
      } 
     } 

     private static void OnStateChange(object sender, StateChangeEventArgs e) 
     { 
      Console.WriteLine("Connection state changed: {0} => {1}", e.OriginalState, e.CurrentState); 
     } 
    } 
} 
+0

bitte hilfreich hinzufügen Daten aus dem Link, so wird diese Antwort vollständig aussehen – TheGameiswar

Verwandte Themen