Konfigurieren von Parametern und ParameterdatentypenConfiguring parameters and parameter data types

Befehlsobjekte verwenden Parameter, um Werte an SQL-Anweisungen oder gespeicherte Prozeduren zu übergeben, und ermöglichen so Typüberprüfungen und Validierungen.Command objects use parameters to pass values to SQL statements or stored procedures, providing type checking and validation. Im Unterschied zu Befehlstext wird die Parametereingabe als Literalwert und nicht als ausführbarer Code behandelt.Unlike command text, parameter input is treated as a literal value, not as executable code. Dies hilft beim Schutz vor SQL Injection-Angriffen, bei denen ein Angreifer einen SQL-Befehl, der die Sicherheit auf dem Server gefährdet, in eine SQL-Anweisung einschleust.This helps guard against "SQL injection" attacks, in which an attacker inserts a command that compromises security on the server into an SQL statement.

Parametrisierte Befehle können außerdem die Leistung bei der Abfrageausführung verbessern, da sie den Datenbankserver dabei unterstützen, den eingehenden Befehl mit dem richtigen zwischengespeicherten Abfrageplan abzugleichen.Parameterized commands can also improve query execution performance, because they help the database server accurately match the incoming command with a proper cached query plan. Weitere Informationen finden Sie unter Ausführung planen Zwischenspeichern und Wiederverwenden von und Parameter und Wiederverwendung von Ausführungsplänen.For more information, see Execution Plan Caching and Reuse and Parameters and Execution Plan Reuse. Parametrisierte Befehle sind aber nicht nur aus Sicherheits- und Leistungsgründen vorteilhaft, sondern sie stellen auch eine bequeme Methode zum Organisieren von Werten dar, die an eine Datenquelle übergeben werden.In addition to the security and performance benefits, parameterized commands provide a convenient method for organizing values passed to a data source.

Ein DbParameter -Objekt kann mithilfe des zugehörigen Konstruktors erstellt werden, oder es wird durch Aufrufen der DbParameterCollection -Methode der Add -Auflistung zur DbParameterCollection hinzugefügt.A DbParameter object can be created by using its constructor, or by adding it to the DbParameterCollection by calling the Add method of the DbParameterCollection collection. Die Add -Methode verwendet als Eingabe je nach Datenanbieter Konstruktorargumente oder ein vorhandenes Parameterobjekt.The Add method will take as input either constructor arguments or an existing parameter object, depending on the data provider.

Angeben der "ParameterDirection"-EigenschaftSupplying the ParameterDirection property

Beim Hinzufügen von Parametern müssen Sie für alle Parameter, die keine Eingabeparameter sind, die ParameterDirection -Eigenschaft bereitstellen.When adding parameters, you must supply a ParameterDirection property for parameters other than input parameters. Die folgende Tabelle zeigt die ParameterDirection -Werte, die Sie mit der ParameterDirection -Enumeration verwenden können.The following table shows the ParameterDirection values that you can use with the ParameterDirection enumeration.

MembernameMember name BeschreibungDescription
Input Der Parameter ist ein Eingabeparameter.The parameter is an input parameter. Dies ist die Standardeinstellung.This is the default.
InputOutput Der Parameter kann sowohl für die Eingabe als auch für die Ausgabe verwendet werden.The parameter can perform both input and output.
Output Der Parameter ist ein Ausgabeparameter.The parameter is an output parameter.
ReturnValue Der Parameter steht für einen Eingabewert aus einem Vorgang, wie z. B. einer gespeicherten Prozedur, einer integrierten Funktion oder einer benutzerdefinierten Funktion.The parameter represents a return value from an operation such as a stored procedure, built-in function, or user-defined function.

Arbeiten mit ParameterplatzhalternWorking with parameter placeholders

Die Syntax für Parameterplatzhalter ist abhängig von der jeweiligen Datenquelle.The syntax for parameter placeholders depends on the data source. Die .NET Framework-Datenanbieter handhaben die Benennung und das Angeben von Parametern und Parameterplatzhaltern unterschiedlich.The .NET Framework data providers handle naming and specifying parameters and parameter placeholders differently. Diese Syntax wird an eine bestimmte Datenquelle angepasst, wie in der folgenden Tabelle beschrieben.This syntax is customized to a specific data source, as described in the following table.

DatenanbieterData provider Syntax für ParameterbenennungParameter naming syntax
System.Data.SqlClient Verwendet benannte Parameter im Format @Parametername.Uses named parameters in the format @parametername.
System.Data.OleDb Verwendet Positionsparametermarker, die durch ein Fragezeichen (?) gekennzeichnet sind.Uses positional parameter markers indicated by a question mark (?).
System.Data.Odbc Verwendet Positionsparametermarker, die durch ein Fragezeichen (?) gekennzeichnet sind.Uses positional parameter markers indicated by a question mark (?).
System.Data.OracleClient Verwendet benannte Parameter im Format :Parametername (oder Parametername).Uses named parameters in the format :parmname (or parmname).

Angeben von ParameterdatentypenSpecifying parameter data types

Der Datentyp eines Parameters ist jeweils datenanbieterspezifisch.The data type of a parameter is specific to the .NET Framework data provider. Gibt den Typ konvertiert den Wert der Parameter in den .NET Framework-Anbieter-Datentyp vor dem Übergeben des Werts an die Datenquelle.Specifying the type converts the value of the Parameter to the .NET Framework data provider type before passing the value to the data source. Der Typ eines Parameter kann auch in generischer Form angegeben werden, indem die DbType -Eigenschaft des Parameter -Objekts auf einen bestimmten DbTypefestgelegt wird.You may also specify the type of a Parameter in a generic manner by setting the DbType property of the Parameter object to a particular DbType.

Der .NET Framework-Anbieter-Datentyp, der eine Parameter vom .NET Framework-Typ des Objekts abgeleitet wird die Value von der Parameter -Objekt, oder die DbType von der Parameter Objekt.The .NET Framework data provider type of a Parameter object is inferred from the .NET Framework type of the Value of the Parameter object, or from the DbType of the Parameter object. Die folgende Tabelle zeigt den abgeleiteten Parameter -Typ basierend auf dem als Parameter -Wert übergebenen Objekt oder dem angegebenen DbType.The following table shows the inferred Parameter type based on the object passed as the Parameter value or the specified DbType.

.NET Framework-Typ.NET Framework type DbTypeDbType SqlDbTypeSqlDbType OleDbTypeOleDbType OdbcTypeOdbcType OracleTypeOracleType
Boolean BooleschBoolean BitBit BooleschBoolean BitBit ByteByte
Byte ByteByte TinyIntTinyInt UnsignedTinyIntUnsignedTinyInt TinyIntTinyInt ByteByte
byte[]byte[] BinärBinary VarBinary.VarBinary. Diese implizite Konvertierung schlägt fehl, wenn das Bytearray größer als die maximale Größe eines varbinary ist, 8000 Byte. Legen Sie für Bytearrays mit mehr als 8000 Bytes explizit den SqlDbType.This implicit conversion will fail if the byte array is larger than the maximum size of a VarBinary, which is 8000 bytes.For byte arrays larger than 8000 bytes, explicitly set the SqlDbType. VarBinaryVarBinary BinärBinary RawRaw
Char Das Ableiten von SqlDbType aus char wird nicht unterstützt.Inferring a SqlDbType from char is not supported. CharChar CharChar ByteByte
DateTime DateTimeDateTime DateTimeDateTime DBTimeStampDBTimeStamp DateTimeDateTime DateTimeDateTime
DateTimeOffset DateTimeOffsetDateTimeOffset "DateTimeOffset" in SQL Server 2008.DateTimeOffset in SQL Server 2008. Das Ableiten von SqlDbType aus DateTimeOffset wird erst ab SQL Server 2008 unterstützt.Inferring a SqlDbType from DateTimeOffset is not supported in versions of SQL Server earlier than SQL Server 2008. DateTimeDateTime
Decimal DecimalDecimal DecimalDecimal DecimalDecimal NumericNumeric AnzahlNumber
Double DoubleDouble FloatFloat DoubleDouble DoubleDouble DoubleDouble
Single SingleSingle RealReal SingleSingle RealReal FloatFloat
Guid GUIDGuid UniqueIdentifierUniqueIdentifier GuidGuid UniqueIdentifierUniqueIdentifier RawRaw
Int16 Int16Int16 SmallIntSmallInt SmallIntSmallInt SmallIntSmallInt Int16Int16
Int32 Int32Int32 IntInt IntInt IntInt Int32Int32
Int64 Int64Int64 BigIntBigInt BigIntBigInt BigIntBigInt NummerNumber
Object ObjectObject VarianteVariant VarianteVariant Das Ableiten von OdbcType aus Object wird nicht unterstützt.Inferring an OdbcType from Object is not supported. BlobBlob
String ZeichenfolgeString NVarChar.NVarChar. Diese implizite Konvertierung kann nicht ausgeführt werden, wenn die Zeichenfolge die maximale NVarChar-Länge (4000 Zeichen) überschreitet.This implicit conversion will fail if the string is larger than the maximum size of an NVarChar, which is 4000 characters. Legen Sie für Zeichenfolgen mit mehr als 4000 Zeichen explizit SqlDbTypefest.For strings larger than 4000 characters, explicitly set the SqlDbType. VarWCharVarWChar NVarCharNVarChar NVarCharNVarChar
TimeSpan zeitTime "Time" in SQL Server 2008.Time in SQL Server 2008. Das Ableiten von SqlDbType aus TimeSpan wird erst ab SQL Server 2008 unterstützt.Inferring a SqlDbType from TimeSpan is not supported in versions of SQL Server earlier than SQL Server 2008. DBTimeDBTime zeitTime DateTimeDateTime
UInt16 UInt16UInt16 Das Ableiten von SqlDbType aus UInt16 wird nicht unterstützt.Inferring a SqlDbType from UInt16 is not supported. UnsignedSmallIntUnsignedSmallInt IntInt UInt16UInt16
UInt32 UInt32UInt32 Das Ableiten von SqlDbType aus UInt32 wird nicht unterstützt.Inferring a SqlDbType from UInt32 is not supported. UnsignedIntUnsignedInt BigIntBigInt UInt32UInt32
UInt64 UInt64UInt64 Das Ableiten von SqlDbType aus UInt64 wird nicht unterstützt.Inferring a SqlDbType from UInt64 is not supported. UnsignedBigIntUnsignedBigInt NumericNumeric AnzahlNumber
AnsiStringAnsiString VarCharVarChar VarCharVarChar VarCharVarChar VarCharVarChar
AnsiStringFixedLengthAnsiStringFixedLength CharChar CharChar CharChar CharChar
WährungCurrency MoneyMoney WährungCurrency Das Ableiten von OdbcType aus Currency wird nicht unterstützt.Inferring an OdbcType from Currency is not supported. AnzahlNumber
DatumDate "Date" in SQL Server 2008.Date in SQL Server 2008. Das Ableiten von SqlDbType aus Date wird erst ab SQL Server 2008 unterstützt.Inferring a SqlDbType from Date is not supported in versions of SQL Server earlier than SQL Server 2008. DBDateDBDate DatumDate DateTimeDateTime
SByteSByte Das Ableiten von SqlDbType aus SByte wird nicht unterstützt.Inferring a SqlDbType from SByte is not supported. TinyIntTinyInt Das Ableiten von OdbcType aus SByte wird nicht unterstützt.Inferring an OdbcType from SByte is not supported. SByteSByte
StringFixedLengthStringFixedLength NCharNChar WCharWChar NCharNChar NCharNChar
zeitTime "Time" in SQL Server 2008.Time in SQL Server 2008. Das Ableiten von SqlDbType aus Time wird erst ab SQL Server 2008 unterstützt.Inferring a SqlDbType from Time is not supported in versions of SQL Server earlier than SQL Server 2008. DBTimeDBTime zeitTime DateTimeDateTime
VarNumericVarNumeric Das Ableiten von SqlDbType aus VarNumeric wird nicht unterstützt.Inferring a SqlDbType from VarNumeric is not supported. VarNumericVarNumeric Das Ableiten von OdbcType aus VarNumeric wird nicht unterstützt.Inferring an OdbcType from VarNumeric is not supported. AnzahlNumber
Benutzerdefinierter Typ (ein Objekt mit SqlUserDefinedAggregateAttribute)user-defined type (an object with SqlUserDefinedAggregateAttribute Object oder String, je nach Anbieter (SqlClient gibt immer ein Objekt zurück, ODBC immer eine Zeichenfolge, und der verwaltete OLE DB-Datenanbieter ist in der Lage, beide zu erkennen).Object or String, depending the provider (SqlClient always returns an Object, Odbc always returns a String, and the OleDb managed data provider can see either SqlDbType.Udt, wenn SqlUserDefinedTypeAttribute vorhanden ist; andernfalls VariantSqlDbType.Udt if SqlUserDefinedTypeAttribute is present, otherwise Variant OleDbType.VarWChar (wenn der Wert NULL ist); andernfalls OleDbType.Variant.OleDbType.VarWChar (if value is null) otherwise OleDbType.Variant. OdbcType.NVarCharOdbcType.NVarChar wird nicht unterstütztnot supported

Hinweis

Beim Konvertieren von "decimal" in einen anderen Typ erhalten Sie nur eine annähernde Entsprechung, da der Wert auf die nächste Ganzzahl abgerundet wird.Conversions from decimal to other types are narrowing conversions that round the decimal value to the nearest integer value toward zero. Wenn das Ergebnis der Konvertierung im Zieltyp nicht darstellbar ist, wird eine OverflowException ausgelöst.If the result of the conversion is not representable in the destination type, an OverflowException is thrown.

Hinweis

Wenn Sie einen NULL-Parameterwert an den Server senden, müssen Sie DBNull und nicht null (in Visual Basic Nothing)+++ angeben.When you send a null parameter value to the server, you must specify DBNull, not null (Nothing in Visual Basic). Der NULL-Wert im System ist ein leeres Objekt, das über keinen Wert verfügt.The null value in the system is an empty object that has no value. DBNull wird zur Darstellung von NULL-Werten verwendet.DBNull is used to represent null values. Weitere Informationen zu NULL-Werten bei Datenbanken finden Sie unter Handling Null Values.For more information about database nulls, see Handling Null Values.

Ableiten von ParameterinformationenDeriving parameter information

Parameter können auch mit der DbCommandBuilder -Klasse aus einer gespeicherten Prozedur abgeleitet werden.Parameters can also be derived from a stored procedure using the DbCommandBuilder class. Sowohl die SqlCommandBuilder -Klasse als auch die OleDbCommandBuilder -Klasse stellen die statische Methode DeriveParametersbereit, die automatisch die Parameterauflistung eines Befehlsobjekts füllt, das Parameterinformationen aus einer gespeicherten Prozedur verwendet.Both the SqlCommandBuilder and OleDbCommandBuilder classes provide a static method, DeriveParameters, which automatically populates the parameters collection of a command object that uses parameter information from a stored procedure. Beachten Sie, dass DeriveParameters alle vorhandenen Parameterinformationen für den Befehl überschreibt.Note that DeriveParameters overwrites any existing parameter information for the command.

Hinweis

Das Ableiten von Parameterinformationen geht mit einem Leistungsverlust einher, weil zum Abrufen der Informationen ein zusätzlicher Roundtrip durch die Datenquelle erforderlich ist.Deriving parameter information incurs a performance penalty because it requires an additional round trip to the data source to retrieve the information. Wenn die Parameterinformationen zur Entwurfszeit bekannt sind, können Sie die Leistung der Anwendung verbessern, indem Sie die Parameter explizit festlegen.If parameter information is known at design time, you can improve the performance of your application by setting the parameters explicitly.

Weitere Informationen finden Sie unter Generieren von Befehlen mit CommandBuilder-Objekten.For more information, see Generating Commands with CommandBuilders.

Verwenden von Parametern mit SqlCommand und eine gespeicherte ProzedurUsing parameters with a SqlCommand and a stored procedure

Gespeicherte Prozeduren bieten zahlreiche Vorteile in datengesteuerten Anwendungen.Stored procedures offer many advantages in data-driven applications. Mit gespeicherten Prozeduren können Datenbankoperationen in einem einzelnen Befehl zusammengefasst, für die beste Leistung optimiert und mit zusätzlicher Sicherheit ausgestattet werden.By using stored procedures, database operations can be encapsulated in a single command, optimized for best performance, and enhanced with additional security. Während eine gespeicherte Prozedur aufgerufen werden kann, übergeben Sie den Namen der gespeicherten Prozedur gefolgt von Parameterargumenten als SQL-Anweisung, mit der Parameters -Auflistung des ADO.NET- DbCommand -Objekt ermöglicht es Ihnen genauere Definition der gespeicherten Prozedur Parameter, und um den Zugriff auf Ausgabeparameter und Rückgabewerte.Although a stored procedure can be called by passing the stored procedure name followed by parameter arguments as an SQL statement, by using the Parameters collection of the ADO.NET DbCommand object enables you to more explicitly define stored procedure parameters, and to access output parameters and return values.

Hinweis

Parametrisierte Anweisungen werden auf dem Server mit sp_executesql, ausgeführt, sodass die Wiederverwendung von Abfrageplänen möglich ist.Parameterized statements are executed on the server by using sp_executesql, which allows for query plan reuse. Lokale Cursor oder Variablen im sp_executesql -Batch sind für den Batch, der sp_executesqlaufruft, nicht sichtbar.Local cursors or variables in the sp_executesql batch are not visible to the batch that calls sp_executesql. Änderungen am Datenbankkontext sind nur bis zum Ende der sp_executesql -Anweisung gültig.Changes in database context last only to the end of the sp_executesql statement. Weitere Informationen finden Sie unter Sp_executesql (Transact-SQL).For more information, see sp_executesql (Transact-SQL).

Wenn Sie Parameter mit einem SqlCommand verwenden, um eine gespeicherte SQL Server-Prozedur auszuführen, müssen die der Parameters -Auflistung hinzugefügten Parameternamen mit den Namen der Parametermarkierungen in der gespeicherten Prozedur übereinstimmen.When using parameters with a SqlCommand to execute a SQL Server stored procedure, the names of the parameters added to the Parameters collection must match the names of the parameter markers in the stored procedure. Der .NET Framework-Datenanbieter für SQL Server unterstützt keine Fragezeichenplatzhalter (?) für die Übergabe von Parametern an eine SQL-Anweisung oder gespeicherte Prozedur.The .NET Framework Data Provider for SQL Server does not support the question mark (?) placeholder for passing parameters to an SQL statement or a stored procedure. Er behandelt die Parameter in der gespeicherten Prozedur als benannte Parameter und sucht nach den entsprechenden Parametermarkierungen.It treats parameters in the stored procedure as named parameters and searches for matching parameter markers. Nehmen wir z. B. an, die gespeicherte Prozedur CustOrderHist ist mit einem Parameter mit dem Namen @CustomerIDdefiniert.For example, the CustOrderHist stored procedure is defined by using a parameter named @CustomerID. Wenn Ihr Code die gespeicherte Prozedur ausführt, muss er ebenfalls einen Parameter mit dem Namen @CustomerIDverwenden.When your code executes the stored procedure, it must also use a parameter named @CustomerID.

CREATE PROCEDURE dbo.CustOrderHist @CustomerID varchar(5)

BeispielExample

Dieses Beispiel zeigt, wie Sie eine gespeicherte SQL Server-Prozedur in der Northwind -Beispieldatenbank aufrufen können.This example demonstrates how to call a SQL Server stored procedure in the Northwind sample database. Der Name der gespeicherten Prozedur ist dbo.SalesByCategory , und die Prozedur besitzt einen Eingabeparameter mit dem Namen @CategoryName und dem Datentyp nvarchar(15).The name of the stored procedure is dbo.SalesByCategory and it has an input parameter named @CategoryName with a data type of nvarchar(15). Der Code erstellt eine neue SqlConnection innerhalb eines verwendeten Blocks, sodass die Verbindung nach dem Ende der Prozedur verworfen wird.The code creates a new SqlConnection inside a using block so that the connection is disposed when the procedure ends. Es werden die Objekte SqlCommand und SqlParameter erstellt, und deren Eigenschaften werden festgelegt.The SqlCommand and SqlParameter objects are created, and their properties set. Ein SqlDataReader führt den SqlCommand aus und gibt den Resultset aus der gespeicherten Prozedur zurück, wobei die Ausgabe im Konsolenfenster angezeigt wird.A SqlDataReader executes the SqlCommand and returns the result set from the stored procedure, displaying the output in the console window.

Hinweis

Statt die Objekte SqlCommand und SqlParameter zu erstellen und dann die Eigenschaften in separaten Anweisungen festzulegen, können Sie auch mit einem der überladenen Konstruktoren mehrere Eigenschaften in einer einzigen Anweisung festlegen.Instead of creating SqlCommand and SqlParameter objects and then setting properties in separate statements, you can instead elect to use one of the overloaded constructors to set multiple properties in a single statement.

static void GetSalesByCategory(string connectionString,
    string categoryName)
{
    using (SqlConnection connection = new SqlConnection(connectionString))
    {
        // Create the command and set its properties.
        SqlCommand command = new SqlCommand();
        command.Connection = connection;
        command.CommandText = "SalesByCategory";
        command.CommandType = CommandType.StoredProcedure;

        // Add the input parameter and set its properties.
        SqlParameter parameter = new SqlParameter();
        parameter.ParameterName = "@CategoryName";
        parameter.SqlDbType = SqlDbType.NVarChar;
        parameter.Direction = ParameterDirection.Input;
        parameter.Value = categoryName;

        // Add the parameter to the Parameters collection. 
        command.Parameters.Add(parameter);

        // Open the connection and execute the reader.
        connection.Open();
        using (SqlDataReader reader = command.ExecuteReader())
        {
            if (reader.HasRows)
            {
                while (reader.Read())
                {
                    Console.WriteLine("{0}: {1:C}", reader[0], reader[1]);
                }
            }
            else
            {
                Console.WriteLine("No rows found.");
            }
            reader.Close();
        }
    }
}
Shared Sub GetSalesByCategory(ByVal connectionString As String, _
    ByVal categoryName As String)

    Using connection As New SqlConnection(connectionString)

        ' Create the command and set its properties.
        Dim command As SqlCommand = New SqlCommand()
        command.Connection = connection
        command.CommandText = "SalesByCategory"
        command.CommandType = CommandType.StoredProcedure

        ' Add the input parameter and set its properties.
        Dim parameter As New SqlParameter()
        parameter.ParameterName = "@CategoryName"
        parameter.SqlDbType = SqlDbType.NVarChar
        parameter.Direction = ParameterDirection.Input
        parameter.Value = categoryName

        ' Add the parameter to the Parameters collection.
        command.Parameters.Add(parameter)

        ' Open the connection and execute the reader.
        connection.Open()
        Using reader As SqlDataReader = command.ExecuteReader()

            If reader.HasRows Then
                Do While reader.Read()
                    Console.WriteLine("{0}: {1:C}", _
                      reader(0), reader(1))
                Loop
            Else
                Console.WriteLine("No rows returned.")
            End If
        End Using
    End Using
End Sub

Verwenden von Parametern mit einem "OleDbCommand" oder OdbcCommandUsing parameters with an OleDbCommand or OdbcCommand

Wenn Sie Parameter mit einem OleDbCommand oder einem OdbcCommandverwenden, muss die Reihenfolge der der Parameters -Auflistung hinzugefügten Parameter mit der Reihenfolge der in der gespeicherten Prozedur definierten Parameter übereinstimmen.When using parameters with an OleDbCommand or OdbcCommand, the order of the parameters added to the Parameters collection must match the order of the parameters defined in your stored procedure. Der .NET Framework-Datenanbieter für OLE DB und der .NET Framework-Datenanbieter für ODBC behandeln Parameter in einer gespeicherten Prozedur als Platzhalter und wenden Parameterwerte der Reihe nach an.The .NET Framework Data Provider for OLE DB and .NET Framework Data Provider for ODBC treat parameters in a stored procedure as placeholders and apply parameter values in order. Außerdem müssen der Parameters -Auflistung zuerst die Parameter für die Rückgabewerte hinzugefügt werden.In addition, return value parameters must be the first parameters added to the Parameters collection.

Der .NET Framework-Datenanbieter für OLE DB und der .NET Framework-Datenanbieter für ODBC unterstützen keine benannten Parameter für die Übergabe von Parametern an eine SQL-Anweisung oder gespeicherte Prozedur.The .NET Framework Data Provider for OLE DB and .NET Framework Data Provider for ODBC do not support named parameters for passing parameters to an SQL statement or a stored procedure. In diesem Fall muss der Fragezeichenplatzhalter (?) verwenden. Dies wird im folgenden Beispiel dargestellt.In this case, you must use the question mark (?) placeholder, as in the following example.

SELECT * FROM Customers WHERE CustomerID = ?

Dementsprechend muss die Reihenfolge, in der Parameter -Objekte der Parameters -Auflistung hinzugefügt werden, genau der Position des als Platzhalter für den Parameter fungierenden Fragezeichens (?)As a result, the order in which Parameter objects are added to the Parameters collection must directly correspond to the position of the ? entsprechen.placeholder for the parameter.

OLE DB-BeispielOleDb Example

Dim command As OleDbCommand = New OleDbCommand( _
  "SampleProc", connection)
command.CommandType = CommandType.StoredProcedure

Dim parameter As OleDbParameter = command.Parameters.Add( _
  "RETURN_VALUE", OleDbType.Integer)
parameter.Direction = ParameterDirection.ReturnValue

parameter = command.Parameters.Add( _
  "@InputParm", OleDbType.VarChar, 12)
parameter.Value = "Sample Value"

parameter = command.Parameters.Add( _
  "@OutputParm", OleDbType.VarChar, 28)
parameter.Direction = ParameterDirection.Output
OleDbCommand command = new OleDbCommand("SampleProc", connection);
command.CommandType = CommandType.StoredProcedure;

OleDbParameter parameter = command.Parameters.Add(
  "RETURN_VALUE", OleDbType.Integer);
parameter.Direction = ParameterDirection.ReturnValue;

parameter = command.Parameters.Add(
  "@InputParm", OleDbType.VarChar, 12);
parameter.Value = "Sample Value";

parameter = command.Parameters.Add(
  "@OutputParm", OleDbType.VarChar, 28);
parameter.Direction = ParameterDirection.Output;

Beispiel zu "Odbc"Odbc Example

Dim command As OdbcCommand = New OdbcCommand( _
  "{ ? = CALL SampleProc(?, ?) }", connection)
command.CommandType = CommandType.StoredProcedure

Dim parameter As OdbcParameter = command.Parameters.Add("RETURN_VALUE", OdbcType.Int)
parameter.Direction = ParameterDirection.ReturnValue

parameter = command.Parameters.Add( _
  "@InputParm", OdbcType.VarChar, 12)
parameter.Value = "Sample Value"

parameter = command.Parameters.Add( _
  "@OutputParm", OdbcType.VarChar, 28)
parameter.Direction = ParameterDirection.Output
OdbcCommand command = new OdbcCommand( _
  "{ ? = CALL SampleProc(?, ?) }", connection);
command.CommandType = CommandType.StoredProcedure;

OdbcParameter parameter = command.Parameters.Add( _
  "RETURN_VALUE", OdbcType.Int);
parameter.Direction = ParameterDirection.ReturnValue;

parameter = command.Parameters.Add( _
  "@InputParm", OdbcType.VarChar, 12);
parameter.Value = "Sample Value";

parameter = command.Parameters.Add( _
  "@OutputParm", OdbcType.VarChar, 28);
parameter.Direction = ParameterDirection.Output;

Siehe auchSee also