Entrar

Erro ao tentar chamar o método preparar antes de adicionar parâmetros: "Uma exceção sem tratamento do tipo 'System.Data.SqlClient.SqlException' ocorreu no system.data.dll"

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.

310368
Este artigo foi arquivado. É oferecido "como está" e não será mais atualizado.
Para obter uma Microsoft Visual translation from VPE for Csharp .NET versão deste artigo, consulte 311348.

Este artigo se refere aos seguintes namespaces Microsoft .NET Framework Class Library:
  • System.Data.OLEDB
  • System.Data.SqlClient
Sintomas
Quando você cria um comando com parâmetros em Microsoft SQL Server 7.0, se você chamar o método de preparação antes de adicionar parâmetros para o comando, você receber a seguinte mensagem de erro:
Uma exceção sem tratamento do tipo 'System.Data.SqlClient.SqlException' ocorreu no system.data.dll.
Obter informações adicionais: erro do sistema.
Esse problema não ocorre no SQL Server 2000.
Causa
Esse problema ocorre no SQL Server 7.0 porque, por design, você não pode executar o método Preparar antes de adicionar parâmetros. Isso se aplica a maioria dos sistemas de banco de dados.

SQL Server 2000 não gera a exceção mencionados acima porque ele não executa Preparar até que o primeiro comando é executado. Essa otimização evita a sobrecarga de Preparar se não comandos são executados posteriormente.
Resolução
Para resolver esse problema, não chame o método Preparar até depois de adicionar os parâmetros.
Mais Informações

Passos para reproduzir o problema

O código de exemplo a seguir usa a tabela Region do Northwind banco de dados de exemplo.
  1. Inicie o Microsoft Visual Studio NET..
  2. Crie um novo projeto Visual Basic Windows Application. Form1 é adicionado para o projeto por padrão.
  3. Verifique se seu projeto contém uma referência ao namespace System.Data e adicione uma referência a este espaço para nome se não.
  4. Coloque um controle de botão em Form1. Altere a propriedade nome do botão para btnTest e altere a propriedade Text para teste .
  5. Use a declaração Imports nos namespaces de sistema , System.Data.OLEDB e System.Data.SqlClient para que não é necessário para qualificar declarações esses namespaces posteriormente no seu código. Adicione o seguinte código à seção "General Declarations" do Form1:
    Imports SystemImports System.Data.OleDbImports System.Data.SqlClient					
  6. Adicione o seguinte código para a janela de código após a região "Windows Form Designer gerou código".

    Observação <username>Você deve alterar senha e identificação do usuário <nomedousuário> = < senha de alta segurança > para os valores corretos antes de executar esse código. Certifique-se que a ID de usuário tenha as permissões apropriadas para executar esta operação no banco de dados.
        Private Sub btnTest_Click(ByVal sender As System.Object, _    ByVal e As System.EventArgs) Handles btnTest.Click        Dim myConnString As String = _            "User ID=<username>;password=<strong password>;Initial Catalog=Northwind;Data Source=myServer"        Dim id As Integer = 25        Dim desc As String = "myFirstRegion"        Dim rConn As SqlConnection = New SqlConnection(myConnString)        rConn.Open()        Dim command As SqlCommand = New SqlCommand("", rConn)        command.CommandText = "insert into Region (RegionID, RegionDescription)" & _                              "values (@id, @desc)"        'SQL Server 7.0 throws an exception here.        'Comment the following line to resolve this problem against SQL Server 7.0.        command.Prepare()        command.Parameters.Add("@id", SqlDbType.Int, 4)        command.Parameters.Add("@desc", SqlDbType.Char, 50)        'You can call Prepare after you set up CommandText and parameters.        command.Prepare()         command.Parameters(0).Value = id        command.Parameters(1).Value = desc        command.ExecuteNonQuery()        MessageBox.Show("Updated Successfully")    End Sub					
  7. Modificar a seqüência de conexão ( myConnString ) conforme apropriado para seu ambiente.
  8. Salve seu projeto. No menu Debug , clique em Iniciar para executar seu projeto.
  9. Clique em Test . Se você estiver conectado a um banco de dados do SQL Server 7.0, o código gera a exceção mencionados acima.

    Se você estiver conectado a um banco de dados do SQL Server 2000, o código é executado corretamente, e a caixa de mensagem "Atualizado successfully" aparece.
  10. Para resolver esse problema no SQL Server 7.0, comentar a chamada para command.Prepare que precede o código para adicionar os parâmetros e, em seguida, execute novamente o projeto.
Referências
Para obter mais informações sobre objetos ADO.NET e a sintaxe, consulte o seguinte Microsoft .NET Framework Software Development Kit (SDK) documentação:

Aviso: Este artigo foi traduzido automaticamente

Propriedades

ID do Artigo: 310368 - Última Revisão: 02/24/2014 12:52:37 - Revisão: 2.8

  • Microsoft ADO.NET 2.0
  • Microsoft ADO.NET (included with the .NET Framework)
  • Microsoft Visual Basic .NET 2002 Standard Edition
  • Microsoft Visual Basic .NET 2003 Standard Edition
  • Microsoft Visual Basic 2005
  • Microsoft SQL Server 7.0 Standard Edition
  • kbnosurvey kbarchive kbmt kbtshoot kberrmsg kbnofix kbprb kbsqlclient kbsystemdata KB310368 KbMtpt
Comentários