2010-01-08 13 views
8

gedruckt Ich möchte einen Wert drucken, der von SQL Server zurückgegeben wird.Wie Wert von SQL-Abfrage im Meldungsfeld

If NOT Exists(SELECT * FROM ItemList WHERE ItemName='txtItemNama') 
    BEGIN 
    INSERT INTO ItemList (ItemName) VALUES('txtItemNamea') 
    END 
ELSE 
    BEGIN 
    Print 'Duplicate' 
    END 

Diese Abfrage wird entweder mir zurückkehren entweder Anzahl der betroffenen Zeilen oder Doppelte

Ich möchte dies in MessageBox.Show() in C# Duplizieren verwenden

string query1 = "If NOT Exists(SELECT * FROM ItemList WHERE ItemName='txtItemName') BEGIN INSERT INTO ItemList (ItemName) VALUES('txtItemName') END ELSE BEGIN Print 'Duplicate' END"; 
      SqlCommand cmd = new SqlCommand(query1, conn); 
      SqlDataReader dr; 
      conn.Open(); 
      dr=cmd.ExecuteReader(); 
      conn.Close(); 
MessageBox.Show(dr); 

Ich weiß nicht, wie man Verwenden Sie hierzu dr. Bitte helfen Sie mir, hier zu drucken.

MessageBox.Show (dr);

Was muss ich hier tun?

+2

Es wäre besser, wenn Sie select-Anweisung verwenden, anstatt Druck für diesen – Brij

+0

@Brij Can u mir ein Beispiel geben. Obwohl ich mehr daran interessiert bin, diesen Wert an Frontend zu erfassen, gibt es viele Methoden, um dasselbe zu tun, wie Cursor und gespeicherte Prozedur, abgeleitete Tabelle und vieles mehr. –

Antwort

1

Mit ADO.NET gibt es vier Möglichkeiten, Informationen aus einer SQL-Abfrage Rückkehr:

  • ein DataSet-Objekt Verwenden Sie die zurückgegebenen Zeilen zu sammeln und mit diesen Zeilen zusätzlich zu den Rückgabewerten und die Rückkehr zur Arbeit Parameter.
  • Verwenden Sie ein DataReader-Objekt, um die zurückgegebenen Zeilen zu sammeln, sich durch diese Zeilen zu bewegen und Rückgabewerte und Rückgabeparameter zu sammeln.
  • Verwenden Sie die ExecuteScalar-Methode, um den Wert aus der ersten Spalte der ersten Zeile des Ergebnisses mit den Rückgabewerten und den Rückgabeparametern zurückzugeben. Dies ist besonders nützlich bei Aggregatfunktionen.
  • Verwenden Sie die ExecuteNonQuery-Methode, um nur die Rückgabeparameter und die Rückgabewerte zurückzugeben. Alle zurückgegebenen Zeilen werden verworfen. Dies ist am nützlichsten für die Ausführung von Aktionsabfragen.

Dies sind alle Methoden, die von Ihrem Befehlsobjekt aufgerufen werden.

Es gibt viele verschiedene Möglichkeiten, eine Katze zu häuten, Sie können Ausgabeparameter verwenden, Sie können ExecuteScalar verwenden, Sie können Rückgabewerte verwenden oder Sie können Dummy-Recordsets verwenden.

Sie sollten in Ihrem C# zu so etwas wie die folgenden Lage sein, den Rückgabewert aus einer Abfrage zu erhalten

Der Code über den Erfassungen des Rückgabewertes, die Sie festlegen können, wie Sie benötigen, vielleicht mit einem 0 für existiert und eine 1 für nicht existiert.

If NOT Exists(SELECT * FROM ItemList WHERE ItemName='txtItemNama')  
    BEGIN  
    INSERT INTO ItemList (ItemName) VALUES('txtItemNamea') 
    Return 0;  
    END  
ELSE  
    BEGIN  
    Return 1;  
    END 

Es ist ein bisschen Vorbehalt mit den vorstehenden Ausführungen jedoch - ich in der Regel entweder ein ORM verwenden wie Linq-to-SQL oder NHibernate, oder ich verwende Stored Procedures. Ich finde Inline-SQL ziemlich umständlich. Also, während meine Antwort im Allgemeinen klingen sollte, werden Sie wahrscheinlich einige Details durcharbeiten müssen, damit es genau so funktioniert, wie Sie es brauchen.

+0

Auch ich benutze keinen Inline-Code, ich wollte nur mein Konzept löschen, um zu erfassen um 'print' Wert am Frontend zu erhalten, sonst verwende ich gespeicherte Prozedur –

7

ein paar Jahre zu spät, aber Sie sollten Druck/Infotext (wie ursprünglich gefragt) durch Anbringen eines Eventhandler an die InfoMessage event auf dem SqlConnection-Objekt in der Lage abzurufen -

Aber dies nur tun, wenn Sie können‘ t (aus irgendeinem Grund) Verwenden Sie die in diesem Thread genannten Alternativen.

static void Main(string[] args) 
{ 
    using (SqlConnection connection = new SqlConnection(@"someconnectionstring")) 
    { 
     connection.Open(); 
     using(SqlCommand command = new SqlCommand("test", connection)) 
     { 
      connection.InfoMessage += new SqlInfoMessageEventHandler(connection_InfoMessage); 
      using (SqlDataAdapter adapter = new SqlDataAdapter(command)) 
      { 
       DataTable dt = new DataTable(); 
       adapter.Fill(dt); // Do something with DataTable 
      } 
     } 
    } 
} 

static void connection_InfoMessage(object sender, SqlInfoMessageEventArgs e) 
{ 
    // e contains info message etc 
} 
+0

wenn ich habe in Abfrage wie bedingte wenn drucken, eingefügt sonst falsch dann drucken 'kann nicht drucken' und dieses Ereignis erhalten alle Nachrichten sonst, wenn wahr oder falsch – user2491383