PRB: Error en SQL Server 7.0 al llamar a Command.Prepare antes de agregar parámetros mediante Visual Basic .NET

Seleccione idioma Seleccione idioma
Id. de artículo: 310368 - Ver los productos a los que se aplica este artículo
Este artículo se publicó anteriormente con el número E310368
Este artículo se ha archivado. Se ofrece "tal cual" y no se volverá a actualizar.
Para ver una versión de Microsoft Visual C# .NET de este artículo, consulte 311348.
Expandir todo | Contraer todo

En esta página

Síntomas

Cuando crea un comando parametrizado en Microsoft SQL Server 7.0, si llama al método Prepare antes de agregar parámetros al comando, aparece el mensaje de error siguiente:
Excepción no controlada del tipo 'System.Data.SqlClient.SqlException' en system.data.dll.
Información adicional: Error del sistema.
Este problema no ocurre en SQL Server 2000.

Causa

Este problema se produce en SQL Server 7.0 porque, por diseño, no puede ejecutar el método Prepare antes de agregar parámetros. Esto se aplica a la mayoría de los sistemas de base de datos.

SQL Server 2000 no genera la excepción mencionada anteriormente porque no ejecuta Prepare hasta que se ejecuta el primer comando. Esta optimización impide la sobrecarga de Prepare si no se ejecutan más comandos.

Solución

Para resolver este problema, no llame al método Prepare hasta después de agregar los parámetros.

Más información

Pasos para reproducir este comportamiento

En el código de ejemplo siguiente se utiliza la tabla Region de la base de datos de ejemplo Northwind.
  1. Abra Microsoft Visual Studio .NET.
  2. Cree un nuevo proyecto de aplicación para Windows de Visual Basic. Se agregará Form1 al proyecto de manera predeterminada.
  3. Asegúrese de que el proyecto contiene una referencia al espacio de nombres System.Data y, si no es así, agregue una.
  4. Ponga un botón Command en Form1. Cambie la propiedad Name del botón a btnTest y cambie la propiedad Text a Probar .
  5. Utilice la instrucción Imports de los espacios de nombres System , System.Data y System.Data.SqlClient de forma que no tenga que suministrar declaraciones de estos espacios de nombres más adelante en el código. Agregue el código siguiente en la sección General Declarations de Form1:
    Imports System
    Imports System.Data.OleDb
    Imports System.Data.SqlClient
  6. Agregue el código siguiente a la ventana Código, después de la región "Código generado por el Diseñador de Windows Forms":
        Private Sub btnTest_Click(ByVal sender As System.Object, _
        ByVal e As System.EventArgs) Handles btnTest.Click
            Dim myConnString As String = _
                "User ID=sa;password=sa;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 genera aquí una excepción.
            'Ponga como comentario la línea siguiente para resolver este problema en SQL Server 7.0.
            command.Prepare()
    
            command.Parameters.Add("@id", SqlDbType.Int, 4)
            command.Parameters.Add("@desc", SqlDbType.Char, 50)
            'Puede llamar a Prepare después de configurar CommandText y los parámetros.
            command.Prepare() 
    
            command.Parameters(0).Value = id
            command.Parameters(1).Value = desc
            command.ExecuteNonQuery()
            MessageBox.Show("Actualizado correctamente.")
        End Sub
  7. Modifique la cadena de conexión (myConnString) de acuerdo con su entorno.
  8. Guarde el proyecto. En el menú Depurar, haga clic en Iniciar y ejecute el proyecto.
  9. Haga clic en Probar. Si está conectado a una base de datos de SQL Server 7.0, el código genera la excepción mencionada anteriormente.

    Si está conectado a una base de datos de SQL Server 2000, el código se ejecutará correctamente y aparecerá el cuadro de mensajes "Actualizado correctamente".
  10. Para resolver este problema en SQL Server 7.0, ponga como comentario la llamada a command.Prepare que precede al código para agregar los parámetros y ejecute de nuevo el proyecto.

Referencias

Para obtener más información acerca de los objetos de ADO.NET y su sintaxis, consulte lo siguiente en la documentación del Kit de desarrollo de software (SDK) de Microsoft .NET Framework:
Acceso a datos con ADO.NET
http://msdn2.microsoft.com/en-us/library/e80y5yhx(vs.71).aspx

Propiedades

Id. de artículo: 310368 - Última revisión: lunes, 24 de febrero de 2014 - Versión: 2.2
La información de este artículo se refiere a:
  • Microsoft ADO .NET (incluido con .NET Framework)
  • Microsoft Visual Basic .NET 2002 Standard Edition
  • Microsoft SQL Server 7.0 Standard Edition
Palabras clave: 
kbnosurvey kbarchive kbnofix kbprb kbgrpdsvbdb kbgrpdsmdac KB310368

Enviar comentarios

 

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