Estás trabajando sin conexión, espera a que vuelva la conexión a Internet

Cómo: Devolver errores y advertencias de un SQL Server un procedimiento almacenado de ADO.NET

IMPORTANTE: Este artículo ha sido traducido por un software de traducción automática de Microsoft (http://support.microsoft.com/gp/mtdetails) en lugar de un traductor humano. Microsoft le ofrece artículos traducidos por un traductor humano y artículos traducidos automáticamente para que tenga acceso en su propio idioma a todos los artículos de nuestra base de conocimientos (Knowledge Base). Sin embargo, los artículos traducidos automáticamente pueden contener errores en el vocabulario, la sintaxis o la gramática, como los que un extranjero podría cometer al hablar el idioma. Microsoft no se hace responsable de cualquier imprecisión, error o daño ocasionado por una mala traducción del contenido o como consecuencia de su utilización por nuestros clientes. Microsoft suele actualizar el software de traducción frecuentemente.

Haga clic aquí para ver el artículo original (en inglés): 321903
Resumen
Este artículo describe cómo se muestran ambos de SQL Server errores y advertencias en ADO.NET. Si genera un error que tenga un nivel de gravedad de 10 o menos, que es una advertencia, se genera ninguna excepción. Esta advertencia no es para completar de la SqlErrorCollection. En su lugar debe enlazar el evento InfoMessage del objeto Connection y procesar el mensaje no existe.

Errores de SQL los procedimientos almacenados con un nivel de gravedad de 11 a 20 producen un error en SQL que se recoge en la SqlErrorCollection. Tenga en cuenta también que algunos errores que tienen un nivel de gravedad de 11 o anulación mayor todo el procedimiento almacenado.

back to the top

Requisitos

La lista siguiente describe el hardware recomendado, software, infraestructura de red y los service Pack necesarios:
  • Microsoft Visual Studio .NET instalado en un compatible Sistema operativo Microsoft Windows
  • Un servidor SQL con la base de datos de ejemplo Northwind instalado
Este artículo se supone que está familiarizado con lo siguiente temas:
  • Visual Basic .NET
  • Acceso a datos ADO.NET
back to the top

Crear el proyecto y agregue el procedimiento almacenado en SQL Server

En el siguiente ejemplo utiliza una combinación de gravedad 10 y 11 de gravedad muestra cómo utilizar ADO.NET para mostrar mensajes de error con los errores distintos niveles de gravedad. En este ejemplo también se muestra cómo utilizar IF...ELSE lógica en combinación con RAISERROR para proporcionar control de errores en los procedimientos almacenados de SQL.

En el ejemplo realiza una búsqueda simple en la tabla Customers de la Base de datos Northwind de SQL Server. Si uno de los CustomerIDs no se encuentra, un 10 SEV se produce la excepción. Si ambos de los CustomerIDs no se encuentran, a 11 SEV se produce la excepción y se anula el procedimiento almacenado. Tenga en cuenta que se ha denegado un controlador para enlazar el evento InfoMessage del objeto Connection para mostrar los errores que tienen un nivel de gravedad de 10 o menos.
  1. Siga estos pasos para crear nuevas ventanas de Visual Basic Proyecto de aplicación:
    1. Inicie Visual Studio. NET.
    2. En el menú archivo , seleccione nuevoy, a continuación, haga clic en proyecto.
    3. En el cuadro de diálogo Nuevo proyecto , haga clic en Proyectos de Visual Basic en Tipos de proyecto, haga clic en Aplicación de Windows en plantillasy, a continuación, haga clic en Aceptar.
  2. En el Explorador de servidores, configurar una nueva conexión de datos a la Base de datos Neptuno en un SQL Server disponibles.
  3. Expanda el nodo de base de datos Neptuno , haga clic en los procedimientos almacenadosy, a continuación, haga clic en el nuevo procedimiento almacenado.
  4. En la ventana de código del procedimiento almacenado, pegue el código de procedimiento almacenado siguiente:
    CREATE proc GetCustomers @CustomerID1 nvarchar (5),@CustomerID2 nvarchar (5)ASDECLARE @err_message nvarchar(255)--if no customers found return SEV 11 error to abort stored procedureIF NOT EXISTS (Select CustomerID from Customers where CustomerID = @CustomerID1 or CustomerID =  @CustomerID2) 	BEGIN		SET @err_message = @CustomerID1 + ' and ' + @CustomerID2 + ' Not found raise sev 11'	RAISERROR (@err_message, 11,1)	END--if 1st customerid not found throw SEV 10 exceptionIF EXISTS (Select CustomerID from Customers where CustomerID = @CustomerID1)	BEGIN	select * from Customers where CustomerID = @CustomerID1	ENDELSE	BEGIN	SET @err_message = @CustomerID1 + ' not found raise sev 10'             RAISERROR (@err_message,10, 1) 		END--if 2nd customerid not found throw SEV 10 exceptionIF EXISTS (select * from Customers where CustomerID = @CustomerID2)	BEGIN	select * from Customers where CustomerID = @CustomerID2	ENDELSE	BEGIN	SET @err_message = @CustomerID2 +  ' not found raise sev 10'    	RAISERROR (@err_message,10, 1) 	END
  5. Cierre la ventana de código de procedimiento almacenado y, a continuación, haga clic en para guardar los cambios.
back to the top

Agregar código a las advertencias y errores de pantalla

  1. En la ventana de código de Form1, o de sus en Visual Basic .NET proyecto, agregar una referencia a System.Data.SQLClient agregando la línea siguiente a la parte superior del archivo Form1.vb:
    Imports System.Data.SqlClient					
  2. Arrastre los controles de cuadro de texto 2 (TextBox1 y TextBox2) desde el cuadro de herramientas para Form1.
  3. Presione F4 para cambiar la propiedad de texto de TextBox1 a ALFKI.
  4. Presione F4 para cambiar la propiedad Text de TextBox2 a ANATR.
  5. Arrastre un control de botón (Button1) desde el cuadro de herramientas a Form1 y, a continuación, presione F4 para cambiar la propiedad Text en Búsqueda.
  6. Haga doble clic en Button1y, a continuación, agregue el código siguiente al controlador de eventos Button1_Click :

    Nota Debe cambiar el ID de usuario <username> valor y la contraseña = valor de<strong password=""> a los valores correctos antes de ejecutar esto código. Asegúrese de que el identificador de usuario tiene los permisos adecuados para realizar esta operación operación en la base de datos.</strong> </username>
            Try            Dim cn As New SqlConnection("Server=servername;Database=Northwind;User Id=<username>;Password=<strong password>")            AddHandler cn.InfoMessage, AddressOf cn_InfoMessage            cn.Open()            Dim cmd As New SqlCommand("GetCustomers")            cmd.CommandType = CommandType.StoredProcedure            cmd.Connection = cn            cmd.Parameters.Add(New SqlParameter("@CustomerID1", SqlDbType.NVarChar, 5))            cmd.Parameters.Add(New SqlParameter("@CustomerID2", SqlDbType.NVarChar, 5))            cmd.Parameters("@CustomerID1").Value = TextBox1.Text            cmd.Parameters("@CustomerID2").Value = TextBox2.Text            Dim myReader As SqlDataReader = cmd.ExecuteReader()            Dim RecordCount As Integer = 0            'You must check the nextresult method because there is a possiblity that the            'stored procedure may return multiple resultsets; the NextResult method            'positions the DataReader at the next result in the resultset if you             'have multiple results, otherwise it will return false.            Do            Do while myreader.read()            Debug.WriteLine("Found customer ID : " & myReader(0))            Loop            Loop While myreader.NextResult()            myReader.Close()        Catch SqlEx As SqlException            Dim myError As SqlError                        Debug.WriteLine("Errors Count:" & SqlEx.Errors.Count)            For Each myError In SqlEx.Errors                Debug.WriteLine(myError.Number & " - " & myError.Message)            Next        End Try					
  7. Modifique la cadena de conexión para que apunte a la Northwind base de datos en el servidor SQL.
  8. Para mostrar los errores que tienen una gravedad de 10 o menos, Agregue la subrutina siguiente para controlar el evento InfoMessage :
        Public Sub cn_InfoMessage(ByVal sender As Object, ByVal e As System.Data.SqlClient.SqlInfoMessageEventArgs)        Debug.WriteLine("info message event: " & e.Message)    End Sub					
  9. Presione CTRL + F5 para ejecutar el programa. Haga clic en Button1 y tenga en cuenta en la ventana de salida que no se ve CustomerIDs ALFKI y ANATR. Para asegurarse de que la ventana de salida está visible, presione CTRL + ALT + O.
back to the top

Generará y administrará una gravedad 10 advertencia

Cambie el valor en TextBox1 desde ALFKI a AAAAAy, a continuación, haga clic en Button1 para intentar seleccionar un valor que no existe en los clientes base de datos. El código de error personalizado en el procedimiento almacenado aplica reventado a esta situación y produce una excepción de gravedad 10. Verá que se produce una excepción de gravedad 10 y Mostrar con el evento InfoMessage del objeto Connection . Mensajes de error que tienen una gravedad de 10 o menos se tratan como mensajes informativos y no se devuelven como errores o en resultados de la consulta.

back to the top

Generará y administrará una gravedad 11 excepción

En TextBox1 , cambie el valor de ALFKI a AAAAAy en TextBox2, cambie el valor de ANATR a AAAAAy, a continuación, haga clic en Button1. Esto no encuentra los dos valores en la base de datos a los clientes, y el procedimiento almacenado produce una excepción de gravedad 11. Ahora verá el error de gravedad 11 en SQLErrorCollection con el mensaje de error personalizado.

back to the top

Referencias
Para obtener información adicional, haga clic en los números de artículo siguientes para verlos en Microsoft Knowledge Base:
308049 Cómo: Llamar a un procedimiento almacenado parametrizado utilizando ADO.NET y Visual Basic .NET
309490 Cómo: Controlar varios resultados mediante DataReader en Visual Basic .NET
316549 Cómo: Depurar almacenados procedimientos en Visual Studio .NET
321902 HOW TO: Llamada a procedimientos almacenados con valores opcionales en ADO.NET
308051 PRB: No se devuelven los parámetros de salida cuando ejecuta un comando de ADO.NET en Visual Basic .NET

Warning: This article has been translated automatically

Propiedades

Id. de artículo: 321903 - Última revisión: 11/30/2012 16:03:00 - Revisión: 8.0

Microsoft Visual Studio .NET 2002 Professional, Microsoft Visual Studio .NET 2003 Professional, Microsoft ADO.NET 1.1

  • kbhowtomaster kbsqlclient kbsystemdata kbmt KB321903 KbMtes
Comentarios
l>