2016-04-15 12 views
1

Ich habe eine gespeicherte Prozedur, die 0 oder 1 abhängig von bestimmten Ergebnissen zurückgibt. Ich führe diese Prozedur oft manuell aus, um eine Beschreibung des Erfolges/Fehlers zu erhalten, die in SSMS leicht zu sehen ist, aber immer noch als 0/1 im Code lesbar ist, wähle ich die 0 oder 1 als einen anderen Spaltennamen, d.h. SELECT 0 AS ThisReason oder SELECT 0 AS ThatReason.Zugriff auf Spaltenname mit ExecuteScalar in C#?

Es gibt fast sicher einen besseren Weg, damit umzugehen, aber es hat mich neugierig gemacht - ist es möglich, den Namen der Spalte zu lesen, die Sie bei der Verwendung von ExecuteScalar in C# ausgewählt haben?

Antwort

5

Nicht mit ExecuteScalar aber mit ExecuteReader und SqlDataReader.GetName:

using (var con = new SqlConnection("connection-string")) 
using (var cmd = new SqlCommand("storedprocedurename", con)) 
{ 
    cmd.CommandType = CommandType.StoredProcedure; 
    // parameters here... 
    con.Open(); 
    using (var rd = cmd.ExecuteReader()) 
    { 
     if (rd.Read()) 
     { 
      string column = rd.GetName(0); // first column 
      int value = rd.GetInt16(0); // or rd.GetInt32(0) 
     } 
    } 
} 
4

Was möchten Sie tun, um zwei Bits an Informationen als Ergebnis einer Abfrage zu erhalten. Um ExecuteScalar zu verwenden, müssen Sie diese zwei Bits zuerst in eins "verpacken". Zum Beispiel könnten Sie eine Zeichenfolge zurückgeben, die mit "+" oder "-" beginnt und den Erfolg/Misserfolg anzeigt, und der Rest der Zeichenfolge könnte ein "Grund" sein.

Es gibt keine andere Möglichkeit, dies mit ExecuteScalar zu tun.