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"

Traduções deste artigo Traduções deste artigo
ID do artigo: 310368 - Exibir os produtos aos quais esse artigo se aplica.
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
Expandir tudo | Recolher tudo

Neste artigo

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 System
    Imports System.Data.OleDb
    Imports 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:
Acessando dados com o ADO.NET
http://msdn2.microsoft.com/en-us/library/e80y5yhx(vs.71).aspx

Propriedades

ID do artigo: 310368 - Última revisão: segunda-feira, 24 de fevereiro de 2014 - Revisão: 2.8
A informação contida neste artigo aplica-se a:
  • 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
Palavras-chave: 
kbnosurvey kbarchive kbmt kbtshoot kberrmsg kbnofix kbprb kbsqlclient kbsystemdata KB310368 KbMtpt
Tradução automática
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: 310368

Contact us for more help

Contact us for more help
Connect with Answer Desk for expert help.
Get more support from smallbusiness.support.microsoft.com