Este é um conteúdo traduzido por máquina.
Guia do Desenvolvedor do .NET Framework
Trabalhando com parâmetros de comando

Os objetos Command usam parâmetros para passar valores para as instruções SQL ou procedimentos armazenados, fornecendo uma verificação de tipo e validação.Ao contrário texto de comando, a entrada de parâmetro é tratada como um valor literal, não como código executável.Isso ajuda na proteção contra ataques "inclusão de SQL", no qual um invasor insere um comando em uma instrução SQL que segurança comprometimentos no servidor.In addition to the Segurança Benefits, parametrizado Commands Provide a método convenient for organizing values passed to a fonte de dados.

Um objeto DbParameter pode ser criado usando seu construtor, ou adicionando-lo para o DbParameterCollection chamando o método da coleção AddDbParameterCollection()()().O método Add terão como entrada uma argumentos de construtor ou um objeto de parâmetro existente, dependendo do provedor de dados.

Fornecendo a propriedade ParameterDirection

When Adding Parameters, You need to a ParameterDirection for Parameters Outro than Parameters.A tabela a seguir mostra os valores ParameterDirection você pode usar com a enumeração ParameterDirection.

Nome do membro

Descrição

Input

O parâmetro é um parâmetro de entrada.Este é o padrão.

InputOutput

The parâmetro is capable of Ambos entrada and saída.

Output

O parâmetro é um parâmetro de saída.

ReturnValue

O parâmetro representa um valor de retorno de uma operação como um procedimento armazenado, função interna ou função definida pelo usuário.

Trabalhando com espaços reservados de parâmetro

The for Placeholders Depends on the Origem.Os provedores de dados .NET Framework tratar nomeação e especificar parâmetros e espaços reservados de parâmetro de maneira diferente.This sintaxe is tailored to a Specific dados Origem, as described in the seguinte tabela.

Provedor de Dados

Sintaxe de nomeação de parâmetro

SqlClient

Uses Parâmetros Nomeados in the formato @ParameterName.

OleDb

Usa os marcadores de parâmetro posicional indicados por um ponto de interrogação (?).

Odbc

Usa os marcadores de parâmetro posicional indicados por um ponto de interrogação (?).

OracleClient

Uses Parâmetros Nomeados in the :parmname (or parmname).

Especificar tipos de dados de parâmetro

O tipo de dados de um parâmetro é específico para o Provedor de Dados .Net Framework.Especificando o tipo converte o valor do parâmetro para o provedor de dados do.NET Framework tipo antes de passar o valor para o fonte de dados.You May also the tipo of a Parameter in a genérico especificar modo by Configuração the DbType propriedade of the objeto Parameter to a particular DbType.

O tipo do provedor de dados do .NET Framework de um objeto Parameter é inferido a partir do tipo .NET Framework do valor do objeto parâmetro ou o DbType do objeto Parameter .A tabela a seguir mostra o inferido Tipo parâmetro baseia o objeto passado como o valor do parâmetro ou o especificado DbType.

Tipo .NET Framework

Sistema. Data.DbType

SqlDbType

OleDbType

OdbcType

OracleType

bool

Boolean

Bit

Boolean

Bit

Byte

byte

Byte

TinyInt

UnsignedTinyInt

TinyInt

Byte

byte[]

Binary

VarBinary. Isso Conversão implícita falhará se a matriz byte é maior do que o tamanho máximo de um VarBinary, que é 8000 bytes.For Arrays byte maior than 8000 bytes, explicitamente Set the SqlDbType.

VarBinary

Binary

Raw

char

 

Não há suporte para inferring um SqlDbType de char.

Char

Char

Byte

DateTime

DateTime

DateTime

DBTimeStamp

DateTime

DateTime

Decimal

Decimal

Decimal

Decimal

Numeric

Number

double

Double

Float

Double

Double

Double

float

Single

Real

Single

Real

Float

Guid

Guid

UniqueIdentifier

Guid

UniqueIdentifier

Raw

Int16

Int16

SmallInt

SmallInt

SmallInt

Int16

Int32

Int32

Int

Int

Int

Int32

Int64

Int64

BigInt

BigInt

BigInt

Number

object

Object

Variant

Variant

Não há suporte para inferring um OdbcType de Object.

Blob

string

String

NVarChar.This implicit conversion will fail if the string is greater than the maximum size of an NVarChar, which is 4000 characters.For Cadeia de caracteres greater than 4000 Characters, Set the SqlDbType.

VarWChar

NVarChar

NVarChar

TimeSpan

Time

Não há suporte para inferring um SqlDbType de TimeSpan.

DBTime

Time

DateTime

UInt16

UInt16

Não há suporte para inferring um SqlDbType de UInt16.

UnsignedSmallInt

Int

UInt16

UInt32

UInt32

Não há suporte para inferring um SqlDbType de UInt32.

UnsignedInt

BigInt

UInt32

UInt64

UInt64

Não há suporte para inferring um SqlDbType de UInt64.

UnsignedBigInt

Numeric

Number

 

AnsiString

VarChar

VarChar

VarChar

VarChar

 

AnsiStringFixedLength

Char

Char

Char

Char

 

Currency

Money

Currency

Não há suporte para inferring um OdbcTypede Currency.

Number

 

Date

Não há suporte para inferring um SqlType de Date.

DBDate

Date

DateTime

 

SByte

Não há suporte para inferring um SqlType de SByte.

TinyInt

Não há suporte para inferring um OdbcTypede SByte.

SByte

 

StringFixedLength

NChar

WChar

NChar

NChar

 

Time

Não há suporte para inferring um SqlType de Time.

DBTime

Time

DateTime

 

VarNumeric

Não há suporte para inferring um SqlDbType de VarNumeric.

VarNumeric

Não há suporte para inferring um OdbcTypede VarNumeric.

Number

ObservaçãoObservação:

Conversions from Decimal to Outro Types are narrowing conversions that the valor Decimal to the nearest toward zero.If the result of the conversão is not representable in the tipo destino, is an OverflowException Descartado.

ObservaçãoObservação:

Quando você envia um valor do parâmetro nulo para o servidor, você deve especificar DBNull, não null (Nothing no Visual Basic).The null value in the system is an empty object that has no value.DBNull is used to represent null values.Para obter mais informações sobre valores Nulos de banco de dados, consulte Manipulação de valores nulos.

A derivação de informações de parâmetro

Parâmetros também podem ser derivados de um procedimento armazenado usando a classe DbCommandBuilder.Tanto o SqlCommandBuilderOleDbCommandBuilder classes oferecem um método estático, DeriveParameters, que automaticamente preenche a coleção parâmetros de uma Comando objeto com informações parâmetro de uma procedimento armazenado.Note that DeriveParameters overwrites any existing informações parâmetro for the Comando.

ObservaçãoObservação:

Deriving informações parâmetro incurs a penalidade de desempenho because it Requires an Additional processamento to the dados Origem to the informações recuperar.If informações parâmetro is known em tempo de design, you can improve the desempenho of Your aplicativo by configuração the Parâmetros explicitamente.

Para obter mais informações, consulte Gerando comandos automaticamente.

Usando parâmetros com um SqlCommand e um procedimento armazenado

Stored Procedures Offer muitos Advantages in Applications Data-driven.Using Stored Procedures, banco de dados Operations can be Encapsulated in a single Command, optimized for melhor desempenho, and Enhanced with additional Segurança.Embora um procedimento armazenado pode ser chamado por simplesmente passando o nome de procedimento armazenado seguido pelo parâmetro argumentos como uma instrução SQL, Usando a coleção do objeto do ADO.NET ParametersDbCommand permite que você mais explicitamente definir parâmetros de procedimento armazenado, bem como para acessar parâmetros de saída e retornar valores.

ObservaçãoObservação:

Instruções parametrizadas são executadas no servidor usando sp_executesql, que permite a reutilização plano de consulta.Local Cursors or Variables in the sp_executesql are not Visível to the that Calls sp_executesql.Changes in contexto banco de dados Último only to the end of the declaração sp_executesql.For more, see Servidor Books Online.

When Using Parameters with a SqlCommand to executar a SQL Servidor procedimento armazenado, the Names of the Parameters Added to the coleção Parameters must match the Names of the markers parâmetro in the procedimento armazenado.The Provider Data for Servidor does not the (?) for passing Parameters to an Instrução SQL or a .Ele trata os parâmetros no procedimento armazenado como parâmetros nomeados e procura por correspondência marcadores de parâmetros.For exemplo, the CustOrderHist Procedimento Armazenado is defined with a nomeado parâmetro @CustomerID.Quando seu código executa o procedimento armazenado ele também deve usar um parâmetro chamado @CustomerID.

CREATE PROCEDURE dbo.CustOrderHist @CustomerID varchar(5)

Exemplo

Este exemplo demonstra como chamar um SQL Servidor procedimento armazenado no banco de dados exemplo Northwind.O nome do procedimento armazenado é dbo.SalesByCategory e ele possui um parâmetro de entrada chamado @CategoryName com um tipo de dados de nvarchar(15).O código cria um novo SqlConnection dentro de uma usando Bloquear para que a conexão é descartada quando o procedimento termina.O SqlCommand e SqlParameter objetos são criados e defina suas propriedades.Um SqlDataReader executa o SqlCommand e retorna o resultado definidas a partir de procedimento armazenado, exibe a saída na janela do console.

ObservaçãoObservação:

Em vez de criar SqlCommandSqlParameter objetos e, em seguida, configuração Propriedades em separar instruções, você pode, em vez disso, optar use um dos construtores sobrecarregados para conjunto múltiplo Propriedades em uma única declaração.

Visual Basic
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()
        Dim 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 Sub
C#
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();
        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();
    }
}
Usando parâmetros com um OleDbCommand ou OdbcCommand

Ao utilizar parâmetros com um OleDbCommand ou OdbcCommand, a ordem dos parâmetros adicionado à coleção Parameters deve corresponder a ordem dos parâmetros definidos em seu procedimento armazenado.The Provider Data .NET Framework for OLE DB and Provider Data .NET Framework for Parameters tratar ODBC in a stored Procedimento as Placeholders and Values parâmetro aplicar in ordem.Além disso, parâmetros valor de retorno devem ser os primeiro parâmetros adicionados à coleção Parameters.

O Provedor de Dados .Net Framework para OLE DB e Provedor de Dados .Net Framework para ODBC não suportam parâmetros nomeados para passar parâmetros para uma instrução SQL ou um procedimento armazenado.In this maiúscminúsc, You Must Use the espaço reservado ponto de interrogação (?), as in the seguinte exemplo.

SELECT * FROM Customers WHERE CustomerID = ?

As a result, the order in which Parameter objects are added to the Parameters collection must directly correspond to the position of the ?placeholder for the parameter.

Exemplo OLEDB

Visual Basic
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
C#
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;
Exemplo de ODBC

Visual Basic
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
C#
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;
Consulte também

Tarefas

Conceitos

Outros recursos

Marcas :


Page view tracker