Freigeben über


OleDbParameter-Klasse

Stellt einen Parameter für einen OleDbCommand sowie optional dessen Zuordnung zu einer DataSet-Spalte dar. Diese Klasse kann nicht geerbt werden.

Namespace: System.Data.OleDb
Assembly: System.Data (in system.data.dll)

Syntax

'Declaration
Public NotInheritable Class OleDbParameter
    Inherits DbParameter
    Implements ICloneable, IDbDataParameter, IDataParameter
'Usage
Dim instance As OleDbParameter
public sealed class OleDbParameter : DbParameter, ICloneable, IDbDataParameter, IDataParameter
public ref class OleDbParameter sealed : public DbParameter, ICloneable, IDbDataParameter, IDataParameter
public final class OleDbParameter extends DbParameter implements ICloneable, IDbDataParameter, 
    IDataParameter
public final class OleDbParameter extends DbParameter implements ICloneable, IDbDataParameter, 
    IDataParameter

Hinweise

Anstelle benannter Parameter verwendet der OLE DB-.NET Framework-Datenanbieter mit einem Fragezeichen (?) markierte Positionsparameter.

Wenn Sie eine Oracle-Datenbank mit dem Microsoft OLE DB-Anbieter für Oracle (MSDAORA) und dem OLE DB.NET Framework-Datenanbieter abfragen und Sie dabei die LIKE-Klausel zur Abfrage von Werten in Feldern mit fester Länge verwenden, werden möglicherweise nicht alle erwarteten Übereinstimmungen zurückgegeben. Der Grund hierfür ist, dass Oracle beim Abstimmen von Werten für Felder fester Länge in einer LIKE-Klausel die gesamte Länge der Zeichenfolge verwendet einschließlich aller angefügten nachstehenden Leerzeichen. Wenn eine Tabelle in einer Oracle-Datenbank z. B. ein Feld mit dem Namen "Field1" enthält, das als char(3) definiert ist, und Sie den Wert "a" in eine Zeile dieser Tabelle eingeben, kann der folgende Code die Zeile nicht zurückgeben.

Dim queryString As String = "SELECT * FROM Table1 WHERE Field1 LIKE ?"
Dim command As OleDbCommand = New OleDbCommand(queryString, connection)
command.Parameters.Add("@p1", OleDbType.Char, 3).Value = "a"
Dim reader As OleDbDataReader = command.ExecuteReader()
string queryString = "SELECT * FROM Table1 WHERE Field1 LIKE ?";
OleDbCommand command = new OleDbCommand(queryString, connection);
command.Parameters.Add("@p1", OleDbType.Char, 3).Value = "a";
OleDbDataReader reader = command.ExecuteReader();

Die Ursache hierfür ist, dass Oracle den Spaltenwert als "a " (an "a" sind Leerzeichen angefügt, um die feste Länge von 3 zu erreichen) speichert. Dieser Wert kann von Oracle nicht als Übereinstimmung mit dem Wert von "a" bei einem LIKE-Vergleich von Feldern fester Länge ausgewertet werden.

Zum Beheben dieses Problems, fügen Sie als Platzhalterzeichen ein Prozentzeichen ("%") an den Parameterwert an ("a%") oder verwenden stattdessen einen SQL-=-Vergleich.

Beispiel

Im folgenden Beispiel werden über die OleDbParameterCollection-Auflistung im OleDbDataAdapter mehrere Instanzen von OleDbParameter erstellt. Mithilfe dieser Parameter werden Daten aus der Datenquelle ausgewählt und im DataSet platziert. In diesem Beispiel wird davon ausgegangen, dass mithilfe des entsprechenden Schemas, der entsprechenden Befehle sowie der entsprechenden Verbindung bereits ein DataSet und ein OleDbDataAdapter erstellt wurden.

Public Function GetDataSetFromAdapter( _
    ByVal dataSet As DataSet, ByVal connectionString As String, _
    ByVal queryString As String) As DataSet

    Using connection As New OleDbConnection(connectionString)
        Dim adapter As New OleDbDataAdapter(queryString, connection)

        ' Set the parameters.
        adapter.SelectCommand.Parameters.Add( _
            "@CategoryName", OleDbType.VarChar, 80).Value = "toasters"
        adapter.SelectCommand.Parameters.Add( _
         "@SerialNum", OleDbType.Integer).Value = 239

        ' Open the connection and fill the DataSet.
        Try
            connection.Open()
            adapter.Fill(dataSet)
        Catch ex As Exception
            Console.WriteLine(ex.Message)
        End Try
        ' The connection is automatically closed when the
        ' code exits the Using block.
    End Using

    Return dataSet
End Function
public DataSet GetDataSetFromAdapter(
    DataSet dataSet, string connectionString, string queryString)
{
    using (OleDbConnection connection =
               new OleDbConnection(connectionString))
    {
        OleDbDataAdapter adapter =
            new OleDbDataAdapter(queryString, connection);

        // Set the parameters.
        adapter.SelectCommand.Parameters.Add(
            "@CategoryName", OleDbType.VarChar, 80).Value = "toasters";
        adapter.SelectCommand.Parameters.Add(
            "@SerialNum", OleDbType.Integer).Value = 239;

        // Open the connection and fill the DataSet.
        try
        {
            connection.Open();
            adapter.Fill(dataSet);
        }
        catch (Exception ex)
        {
            Console.WriteLine(ex.Message);
        }
        // The connection is automatically closed when the
        // code exits the using block.
    }
    return dataSet;
}
using System;
using System.Data;
using System.Data.OleDb;

class Class1
{
    static void Main()
    {
        //        string x = "Provider=SQLOLEDB;Data Source=(local);Integrated Security=SSPI;Initial Catalog=Northwind";
    }

    public DataSet GetDataSetFromAdapter(
        DataSet dataSet, string connectionString, string queryString)
    {
        using (OleDbConnection connection =
                   new OleDbConnection(connectionString))
        {
            OleDbDataAdapter adapter =
                new OleDbDataAdapter(queryString, connection);

            // Set the parameters.
            adapter.SelectCommand.Parameters.Add(
                "@CategoryName", OleDbType.VarChar, 80).Value = "toasters";
            adapter.SelectCommand.Parameters.Add(
                "@SerialNum", OleDbType.Integer).Value = 239;

            // Open the connection and fill the DataSet.
            try
            {
                connection.Open();
                adapter.Fill(dataSet);
            }
            catch (Exception ex)
            {
                Console.WriteLine(ex.Message);
            }
            // The connection is automatically closed when the
            // code exits the using block.
        }
        return dataSet;
    }

Vererbungshierarchie

System.Object
   System.MarshalByRefObject
     System.Data.Common.DbParameter
      System.Data.OleDb.OleDbParameter

Threadsicherheit

Alle öffentlichen statischen (Shared in Visual Basic) Member dieses Typs sind threadsicher. Bei Instanzmembern ist die Threadsicherheit nicht gewährleistet.

Plattformen

Windows 98, Windows 2000 SP4, Windows Millennium Edition, Windows Server 2003, Windows XP Media Center Edition, Windows XP Professional x64 Edition, Windows XP SP2, Windows XP Starter Edition

.NET Framework unterstützt nicht alle Versionen sämtlicher Plattformen. Eine Liste der unterstützten Versionen finden Sie unter Systemanforderungen.

Versionsinformationen

.NET Framework

Unterstützt in: 2.0, 1.1, 1.0

Siehe auch

Referenz

OleDbParameter-Member
System.Data.OleDb-Namespace

Weitere Ressourcen

Arbeiten mit Befehlen