Freigeben über


ExecuteReader-, ExecuteScalar- oder ExecuteNonQuery-Vorgänge in SQL mithilfe des WCF-Dienstmodells

Der SQL-Adapter macht generische SQL Server Vorgänge wie ExecuteNonQuery, ExecuteReader und ExecuteScalar verfügbar. Sie können diese Vorgänge verwenden, um jede SQL-Anweisung für eine SQL Server-Datenbank auszuführen. Diese Vorgänge unterscheiden sich abhängig von der Art der Antwort, die Sie für die SQL-Anweisung erhalten. Weitere Informationen dazu, wie der Adapter diese Vorgänge unterstützt, finden Sie unter Unterstützung für ExecuteNonQuery, ExecuteReader und ExecuteScalar Operations.

In diesem Thema wird veranschaulicht, wie Sie einen ExecuteReader-Vorgang mithilfe des SQL-Adapters mithilfe des WCF-Dienstmodells ausführen. Sie können dieselben Prozeduren befolgen, die in diesem Thema beschrieben sind, um ExecuteNonQuery - und ExecuteScalar-Vorgänge auszuführen.

Informationen zu den in diesem Thema verwendeten Beispielen

Das Beispiel in diesem Thema verwendet den ExecuteReader-Vorgang , um die gespeicherte Prozedur ADD_EMP_DETAILS auszuführen. Diese gespeicherte Prozedur fügt der Tabelle Employee einen Datensatz hinzu und gibt die Mitarbeiter-ID für den Datensatz zurück. Die ADD_EMP_DETAILS gespeicherten Prozedur wird erstellt, indem das SQL-Skript ausgeführt wird, das mit den Beispielen bereitgestellt wird. Weitere Informationen zu Beispielen finden Sie unter Adapterbeispiele. Ein Beispiel , Execute_Reader, das auf diesem Thema basiert, wird auch mit den SQL-Adapterbeispielen bereitgestellt.

Die WCF-Clientklasse

Der Name des WCF-Clients, der für das Aufrufen generischer Vorgänge (ExecuteNonQuery, ExecuteReader oder ExecuteScalar) mithilfe des SQL-Adapters generiert wurde, ist in der folgenden Tabelle aufgeführt.

Operations WCF-Clientname
ExecuteNonQuery, ExecuteReader oder ExecuteScalar GenericTableOpClient

Methodensignatur zum Aufrufen generischer Vorgänge

Die folgende Tabelle zeigt die Signatur für die Methode, die verfügbar gemacht wird, um die generischen Vorgänge aufzurufen.

Vorgang Methodensignatur
ExecuteNonQuery int ExecuteNonQuery(string Query)
ExecuteReader System.Data.DataSet[] ExecuteReader(string Query)
ExecuteScalar string ExecuteScalar(string Query)

Als Beispiel wird die Signatur für die generischen Vorgangsmethoden im folgenden Codeausschnitt gezeigt.

public partial class GenericTableOpClient : System.ServiceModel.ClientBase<GenericTableOp>, GenericTableOp {  
  public int ExecuteNonQuery(string Query);  
  public System.Data.DataSet[] ExecuteReader(string Query);  
  public string ExecuteScalar(string Query);  
}  

In diesem Codeausschnitt

  • GenericTableOpClient ist der Name der Klasse. In diesem Beispiel verwenden Sie diese Klasse, um einen Client zum Aufrufen des generischen Vorgangs ExecuteReader zu erstellen.

  • public System.Data.DataSet[] ExecuteReader(string Query) ist die Methode, die Sie in diesem Beispiel aufrufen, um die gespeicherte Prozedur ADD_EMP_DETAILS aufzurufen.

Erstellen eines WCF-Clients zum Aufrufen eines ExecuteReader-Vorgangs

Der generische Aktionssatz, der zum Ausführen eines Vorgangs auf SQL Server mithilfe eines WCF-Clients erforderlich ist, umfasst eine Reihe von Aufgaben, die unter Übersicht über das WCF-Kanalmodell mit dem SQL-Adapter beschrieben sind. In diesem Abschnitt wird insbesondere beschrieben, wie Sie einen WCF-Client erstellen, der einen ExecuteReader-Vorgang aufruft, um die gespeicherte Prozedur ADD_EMP_DETAILS auszuführen. Diese gespeicherte Prozedur wird durch Ausführen des SQL-Skripts erstellt, das mit jedem Beispiel bereitgestellt wird.

So erstellen Sie einen WCF-Client zum Aufrufen des ExecuteReader-Vorgangs

  1. Erstellen Sie ein Visual C#-Projekt in Visual Studio. Erstellen Sie für dieses Thema eine Konsolenanwendung.

  2. Generieren Sie die WCF-Clientklasse für den generischen ExecuteReader-Vorgang . Dieser Vorgang ist unter dem Stammknoten verfügbar, wenn Sie mithilfe des Add Adapter Service Reference Plug-Ins eine Verbindung mit der SQL Server-Datenbank herstellen. Weitere Informationen zum Generieren einer WCF-Clientklasse finden Sie unter Generieren eines WCF-Clients oder WCF-Dienstvertrags für SQL Server Artefakte.

    Wichtig

    Stellen Sie vor dem Generieren der WCF-Clientklasse sicher, dass Sie die EnableBizTalkCompatibilityMode-Bindungseigenschaft auf false festlegen.

  3. Fügen Sie im Projektmappen-Explorer verweis auf und Microsoft.ServiceModel.ChannelshinzuMicrosoft.Adapters.Sql.

  4. Öffnen Sie die Datei Program.cs, und erstellen Sie einen Client, wie im folgenden Codeausschnitt beschrieben.

    
            GenericTableOpClient client = new GenericTableOpClient("SqlAdapterBinding_GenericTableOp");  
    client.ClientCredentials.UserName.UserName = "<Enter username here>";  
    client.ClientCredentials.UserName.Password = "<Enter password here>";  
    

    In diesem Codeausschnitt ist der WCF-Client, GenericTableOpClient der in SqlAdapterBindingClient.cs definiert ist. Diese Datei wird vom Add Adapter Service Reference Plug-In generiert. SqlAdapterBinding_GenericTableOp ist der Name der Clientendpunktkonfiguration und wird im app.config definiert. Diese Datei wird auch vom Add Adapter Service Reference Plug-In generiert und enthält die Bindungseigenschaften und andere Konfigurationseinstellungen.

    Hinweis

    In diesem Codeausschnitt verwenden Sie die Bindungs- und Endpunktadresse aus der Konfigurationsdatei. Sie können diese Werte auch explizit im Code angeben. Weitere Informationen zu den verschiedenen Möglichkeiten zum Angeben der Clientbindung finden Sie unter Konfigurieren einer Clientbindung für den SQL-Adapter.

  5. Öffnen Sie den Client wie im folgenden Codeausschnitt beschrieben:

    try  
    {  
       Console.WriteLine("Opening Client...");  
       client.Open();  
    }  
    catch (Exception ex)  
    {  
       Console.WriteLine("Exception: " + ex.Message);  
       throw;  
    }  
    
  6. Rufen Sie den ExecuteReader-Vorgang für die ADD_EMP_DETAILS gespeicherten Prozedur auf. Bevor Sie den ExecuteReader-Vorgang aufrufen, müssen Sie dem Code den System.Data Namespace hinzufügen.

    string query = "EXEC ADD_EMP_DETAILS 'Tom Smith', 'Manager', 500000";  
    DataSet[] dsArray = client.ExecuteReader(query);  
    
    Console.WriteLine("Invoking the ADD_EMP_DETAILS stored procedure using ExecuteReader");  
    Console.WriteLine("*****************************************************");  
    foreach (DataSet dataSet in dsArray)  
    {  
       foreach (DataTable tab in dsArray[0].Tables)  
       {  
           foreach (DataRow row in tab.Rows)  
           {  
              for (int i = 0; i < tab.Columns.Count; i++)  
              {  
                 Console.WriteLine("The ID for the newly added employee is : " + row[i]);  
              }  
           }  
        }  
    }  
    Console.WriteLine("*****************************************************");  
    
    
  7. Schließen Sie den Client wie im folgenden Codeausschnitt beschrieben:

    client.Close();  
    Console.WriteLine("Press any key to exit...");  
    Console.ReadLine();  
    
  8. Erstellen Sie das Projekt, und führen Sie es dann aus. Die Mitarbeiter-ID des neu eingefügten Mitarbeiters wird in der Konsole angezeigt.