DOC: Correção para usando parâmetros com um OLEDBCommand

IMPORTANTE: Este artigo foi traduzido por um sistema de tradução automática (também designado por Machine Translation ou MT), não tendo sido portanto traduzido ou revisto por pessoas. A Microsoft possui artigos traduzidos por aplicações (MT) e artigos traduzidos por tradutores profissionais, com o objetivo de oferecer em português a totalidade dos artigos existentes na base de dados de suporte. No entanto, a tradução automática não é sempre perfeita, podendo conter erros de vocabulário, sintaxe ou gramática. A Microsoft não é responsável por incoerências, erros ou prejuízos ocorridos em decorrência da utilização dos artigos MT por parte dos nossos clientes. A Microsoft realiza atualizações freqüentes ao software de tradução automática (MT). Obrigado.

Clique aqui para ver a versão em Inglês deste artigo: 316744
Este artigo foi arquivado. É oferecido "como está" e não será mais atualizado.
O namespace do .NET Framework Class Library seguinte é mencionado neste artigo:

System.Data.OleDb
Sumário
O texto a seguir do Microsoft .NET Framework guia do desenvolvedor do tem um erro de documentação:
usando parâmetros com um OleDbCommand

Ao usar parâmetros com um OleDbCommand, os nomes de parâmetros adicionados ao OleDbParameterCollection devem corresponder aos nomes dos marcadores de parâmetro em seu procedimento armazenado. O provedor OLEDB .NET dados trata parâmetros no procedimento armazenado como parâmetros nomeados e procura os marcadores de parâmetro correspondente.
Para exibir esse erro de documentação, veja o seguinte Microsoft "Usando armazenados procedimentos com um comando" site:
Mais Informações
Ao contrário do que para o que descreve o erro de documentação anterior, os parâmetros OleDbCommand são posicionais quando eles são usados com o Microsoft SQL Server provedor OLE DB. Os nomes dos parâmetros podem ser arbitrários, mas isso não é true com SqlCommand . A ordem dos parâmetros que você adicionar a OleDbParameterCollection deve corresponder a ordem dos parâmetros em seu procedimento armazenado.

Você pode usar parâmetros nomeados fora de ordem com o SQL provedor gerenciado. Com o provedor gerenciado do SQL, você não pode usar arbitrários nomes; nomes dos parâmetros devem corresponder aos nomes parâmetro no procedimento armazenado.

Passos para reproduzir o problema

  1. Inicie o Microsoft Visual Studio NET..
  2. Crie um novo programa do Windows no Visual Basic NET..
  3. Adicione as seguintes instruções na parte superior da janela de código para o formulário padrão:
    Imports System.DataImports System.Data.OleDb					
  4. Adicione o seguinte código ao manipulador de evento Load de Form1:
    Dim cn As OleDb.OleDbConnection = New OleDbConnection("Provider=SQLOLEDB;Data Source=YourServer;User ID=YourUser;Password=YourPassword;Initial Catalog=Northwind")cn.Open()Dim cmd As OleDb.OleDbCommand = New OleDbCommand("[Sales By Year]", cn)cmd.CommandType = CommandType.StoredProcedureDim p1 As OleDbParameter = cmd.Parameters.Add("@Beginning_Date", OleDbType.DBDate)Dim p2 As OleDbParameter = cmd.Parameters.Add("@Ending_Date", OleDbType.DBDate)' Comment out the 2 above lines and uncomment the following 2 lines' to demonstrate that OLEDBParameters must be in same order as in Stored procedure'Dim p2 As OleDbParameter = cmd.Parameters.Add("@Ending_Date", OleDbType.DBDate)'Dim p1 As OleDbParameter = cmd.Parameters.Add("@Beginning_Date", OleDbType.DBDate)p1.Value = "1/1/1997"p2.Value = "1/1/1998"Dim dr As OleDbDataReader = cmd.ExecuteReader()Debug.WriteLine(dr.GetName(0), dr.GetName(1))Do While dr.Read()   Debug.WriteLine(dr(0))Loopdr.Close()cn.Close()					
  5. Altere a seqüência de conexão na declaração para cn refletir o nome de computador do SQL Server e credenciais.
  6. Pressione F5 para compilar e, em seguida, executar o projeto. Pressione CTRL + ALT + O para exibir os resultados do procedimento armazenado na janela de saída. Consulte sobre 400 registros do banco de dados Northwind.
  7. Comentário sem linhas de código a seguir:
    Dim p1 As OleDbParameter = cmd.Parameters.Add("@Beginning_Date", OleDbType.DBDate)Dim p2 As OleDbParameter = cmd.Parameters.Add("@Ending_Date", OleDbType.DBDate)					
    e tire os comentários as seguintes linhas de código
    'Dim p2 As OleDbParameter = cmd.Parameters.Add("@Ending_Date", OleDbType.DBDate)'Dim p1 As OleDbParameter = cmd.Parameters.Add("@Beginning_Date", OleDbType.DBDate)					
  8. Pressione F5 para compilar e, em seguida, executar o projeto. Pressione CTRL + ALT + O para exibir os resultados do procedimento armazenado na janela de saída. Agora, você não pode ver os registros na janela de saída. Como data_final é primeiro, ele está sendo tratado como o primeiro parâmetro no procedimento armazenado ( data_inicial ).
Verifique se a ordem que os parâmetros são adicionados ao OleDbParameterCollection coincide com a ordem dos parâmetros em seu procedimento armazenado.

Aviso: este artigo foi traduzido automaticamente

Propriedades

ID do Artigo: 316744 - Última Revisão: 12/07/2015 08:46:08 - Revisão: 1.1

Microsoft .NET Framework Software Development Kit 1.0, Microsoft ADO.NET (included with the .NET Framework)

  • kbnosurvey kbarchive kbmt kbdocs kbbug kbdocerr KB316744 KbMtpt
Comentários