Freigeben über


DbConnection, DbCommand und DbException

Nachdem Sie eine DbProviderFactory und eine DbConnectionerstellt haben, können Sie dann mit Befehlen und Datenlesern arbeiten, um Daten aus der Datenquelle abzurufen.

Beispiel zum Abrufen von Daten

In diesem Beispiel wird ein DbConnection Objekt als Argument verwendet. Ein DbCommand wird erstellt, um Daten aus der Tabelle "Categories" auszuwählen, indem CommandText mit einer SQL SELECT-Anweisung festgelegt wird. Der Code geht davon aus, dass die Tabelle "Kategorien" in der Datenquelle vorhanden ist. Die Verbindung wird geöffnet, und die Daten werden mit einem DbDataReader abgerufen.

// Takes a DbConnection and creates a DbCommand to retrieve data
// from the Categories table by executing a DbDataReader.
static void DbCommandSelect(DbConnection connection)
{
    const string queryString =
        "SELECT CategoryID, CategoryName FROM Categories";

    // Check for valid DbConnection.
    if (connection != null)
    {
        using (connection)
        {
            try
            {
                // Create the command.
                DbCommand command = connection.CreateCommand();
                command.CommandText = queryString;
                command.CommandType = CommandType.Text;

                // Open the connection.
                connection.Open();

                // Retrieve the data.
                DbDataReader reader = command.ExecuteReader();
                while (reader.Read())
                {
                    Console.WriteLine($"{reader[0]}. {reader[1]}");
                }
            }
            catch (Exception ex)
            {
                Console.WriteLine($"Exception.Message: {ex.Message}");
            }
        }
    }
    else
    {
        Console.WriteLine("Failed: DbConnection is null.");
    }
}
' Takes a DbConnection and creates a DbCommand to retrieve data
' from the Categories table by executing a DbDataReader. 
Private Shared Sub DbCommandSelect(ByVal connection As DbConnection)

    Dim queryString As String = _
       "SELECT CategoryID, CategoryName FROM Categories"

    ' Check for valid DbConnection.
    If Not connection Is Nothing Then
        Using connection
            Try
                ' Create the command.
                Dim command As DbCommand = connection.CreateCommand()
                command.CommandText = queryString
                command.CommandType = CommandType.Text

                ' Open the connection.
                connection.Open()

                ' Retrieve the data.
                Dim reader As DbDataReader = command.ExecuteReader()
                Do While reader.Read()
                    Console.WriteLine("{0}. {1}", reader(0), reader(1))
                Loop

            Catch ex As Exception
                Console.WriteLine("Exception.Message: {0}", ex.Message)
            End Try
        End Using
    Else
        Console.WriteLine("Failed: DbConnection is Nothing.")
    End If
End Sub

Ausführen eines Befehlsbeispiels

In diesem Beispiel wird ein DbConnection Objekt als Argument verwendet. Wenn das DbConnection gültig ist, wird die Verbindung geöffnet und ein DbCommand erstellt und ausgeführt. Der CommandText wird auf eine SQL INSERT-Anweisung gesetzt, die in der Categories-Tabelle der Northwind-Datenbank eine Einfügung vornimmt. Der Code geht davon aus, dass die Northwind-Datenbank in der Datenquelle vorhanden ist und dass die in der INSERT-Anweisung verwendete SQL-Syntax für den angegebenen Anbieter gültig ist. Fehler, die bei der Datenquelle auftreten, werden vom DbException Codeblock behandelt, und alle anderen Ausnahmen werden im Exception Block behandelt.

// Takes a DbConnection, creates and executes a DbCommand.
// Assumes SQL INSERT syntax is supported by provider.
static void ExecuteDbCommand(DbConnection connection)
{
    // Check for valid DbConnection object.
    if (connection != null)
    {
        using (connection)
        {
            try
            {
                // Open the connection.
                connection.Open();

                // Create and execute the DbCommand.
                DbCommand command = connection.CreateCommand();
                command.CommandText =
                    "INSERT INTO Categories (CategoryName) VALUES ('Low Carb')";
                var rows = command.ExecuteNonQuery();

                // Display number of rows inserted.
                Console.WriteLine($"Inserted {rows} rows.");
            }
            // Handle data errors.
            catch (DbException exDb)
            {
                Console.WriteLine($"DbException.GetType: {exDb.GetType()}");
                Console.WriteLine($"DbException.Source: {exDb.Source}");
                Console.WriteLine($"DbException.ErrorCode: {exDb.ErrorCode}");
                Console.WriteLine($"DbException.Message: {exDb.Message}");
            }
            // Handle all other exceptions.
            catch (Exception ex)
            {
                Console.WriteLine($"Exception.Message: {ex.Message}");
            }
        }
    }
    else
    {
        Console.WriteLine("Failed: DbConnection is null.");
    }
}
' Takes a DbConnection and executes an INSERT statement.
' Assumes SQL INSERT syntax is supported by provider.
Private Shared Sub ExecuteDbCommand(ByVal connection As DbConnection)

    ' Check for valid DbConnection object.
    If Not connection Is Nothing Then
        Using connection
            Try
                ' Open the connection.
                connection.Open()

                ' Create and execute the DbCommand.
                Dim command As DbCommand = connection.CreateCommand()
                command.CommandText = _
                  "INSERT INTO Categories (CategoryName) VALUES ('Low Carb')"
                Dim rows As Integer = command.ExecuteNonQuery()

                ' Display number of rows inserted.
                Console.WriteLine("Inserted {0} rows.", rows)

                ' Handle data errors.
            Catch exDb As DbException
                Console.WriteLine("DbException.GetType: {0}", exDb.GetType())
                Console.WriteLine("DbException.Source: {0}", exDb.Source)
                Console.WriteLine("DbException.ErrorCode: {0}", exDb.ErrorCode)
                Console.WriteLine("DbException.Message: {0}", exDb.Message)

                ' Handle all other exceptions.
            Catch ex As Exception
                Console.WriteLine("Exception.Message: {0}", ex.Message)
            End Try
        End Using
    Else
        Console.WriteLine("Failed: DbConnection is Nothing.")
    End If
End Sub

Behandeln von Datenfehlern mit DbException

Die DbException Klasse ist die Basisklasse für alle Ausnahmen, die im Auftrag einer Datenquelle ausgelöst werden. Sie können es in Ihrem Ausnahmebehandlungscode verwenden, um Ausnahmen zu behandeln, die von verschiedenen Anbietern ausgelöst werden, ohne auf eine bestimmte Ausnahmeklasse verweisen zu müssen. Das folgende Codefragment veranschaulicht, wie man DbException verwenden kann, um Fehlerinformationen anzuzeigen, die von der Datenquelle durch die Eigenschaften GetType, Source, ErrorCode und Message zurückgegeben werden. Die Ausgabe zeigt den Typ des Fehlers an, die Quelle, die den Anbieternamen, einen Fehlercode und die dem Fehler zugeordnete Meldung angibt.

Try  
    ' Do work here.  
Catch ex As DbException  
    ' Display information about the exception.  
    Console.WriteLine("GetType: {0}", ex.GetType())  
    Console.WriteLine("Source: {0}", ex.Source)  
    Console.WriteLine("ErrorCode: {0}", ex.ErrorCode)  
    Console.WriteLine("Message: {0}", ex.Message)  
Finally  
    ' Perform cleanup here.  
End Try  
try  
{  
    // Do work here.  
}  
catch (DbException ex)  
{  
    // Display information about the exception.  
    Console.WriteLine("GetType: {0}", ex.GetType());  
    Console.WriteLine("Source: {0}", ex.Source);  
    Console.WriteLine("ErrorCode: {0}", ex.ErrorCode);  
    Console.WriteLine("Message: {0}", ex.Message);  
}  
finally  
{  
    // Perform cleanup here.  
}  

Siehe auch