2016-05-31 6 views
0

Ich entwickle eine Datenbank über die Aufträge für mein Netzwerk mit SQL und Visual Basic, aber ich sehe nicht die Ergebnisse, die ich will, in Visual Basic habe ich einen Fehler erhalten, das ist meine gespeicherten ProzedurenBearbeiten von SQL-Stored Procedures

CREATE PROCEDURE modificar 
    @NumeroIP nvarchar(255), 
    @Usuario nvarchar(255), 
    @DirecciónMAC nvarchar(255), 
    @MACRestricciones nvarchar(255), 
    @MACSinRestricciones nvarchar(255), 
    @Enmascarada nvarchar(255), 
    @SistemaOperativo nvarchar(255), 
    @DirecciónArea nvarchar(255), 
    @TipoEquipo nvarchar(255), 
    @Observación nvarchar(255) 
AS 
    UPDATE dbo.IP 
    SET Usuario = @Usuario, 
     DirecciónMAC = @DirecciónMAC, 
     MACRestricciones = @MACRestricciones, 
     MACSinRestricciones = @MACSinRestricciones, 
     Enmascarada = @Enmascarada, 
     SistemaOperativo = @SistemaOperativo, 
     DirecciónArea = @DirecciónArea, 
     TipoEquipo = @TipoEquipo, 
     Observación = @Observación 
    WHERE 
     NumeroIP = @NumeroIP 

    RAISERROR ('Valor modificado', 16, 1) 

Und mein VB.NET ist:

Dim conex As New SqlConnection("Data Source=GABRIELA;Initial Catalog=IPS_Database;Integrated Security=True") 

Dim cmd As New SqlCommand("editar", conex) 
cmd.CommandType = CommandType.StoredProcedure 

conex.Open() 

Dim para As New SqlParameter("@NumeroIP", SqlDbType.NVarChar) 
para.Size = 255 
para.Value = TextBoxDireccionIP.Text 
cmd.Parameters.Add(para) 

Dim da As New SqlDataAdapter 
da.SelectCommand = cmd 
da.SelectCommand.Connection = conex 

Dim ds As New DataSet 
da.Fill(ds, "IPS_DatabaseDataSet1") 

DataGridView2.DataSource = ds.Tables("TablaIPS") 

NumeroIPPTextBox.Clear() 
UsuarioTextBox.Clear() 
DireccionMACTextBox.Clear() 
DireccionAreaTextBox.Clear() 
ObservacionTextBox.Clear() 
DireccionAreaTextBox.Clear() 
ObservacionTextBox.Clear() 

conex.Open() 
cmd.ExecuteNonQuery() 

Können Sie mir helfen, es zu laufen?

+0

Sind commiting Sie die Transaktion? – lopushen

+0

Sie können 'RAISERROR ('Valor modificado', 0, 1) WITH NOWAIT' verwenden –

Antwort

3

Sie erhalten immer einen Fehler in VB, weil Sie mit der RAISEERROR-Anweisung am Ende Ihrer Prozedur immer einen Fehler zurückgeben.

Von the documentation:

die Nachricht als eine Server-Fehlermeldung an den rufenden Anwendung oder an einen zugeordneten FANG Block eines TRY ... FANG Konstrukt zurückgeführt wird.

Sie sollten in Ihrem Verfahren die Verwendung von PRINT anstelle von RAISERROR in Erwägung ziehen.

0

So wie Sie Ihre gespeicherte Prozedur geschrieben haben, wird immer ein Fehler ausgelöst.

Bitte lesen Sie auch diese TSQL Try/Catch within Transaction or vice versa?, ich erklärte sehr detailliert, wie der TRY..CATCH Block funktioniert und wie Sie die Fehlerbehandlung damit richtig machen können.

Ihre SP sollte wie folgt geschrieben werden ...

CREATE PROCEDURE modificar 
    @NumeroIP nvarchar(255) 
, @Usuario nvarchar(255) 
, @DirecciónMAC nvarchar(255) 
, @MACRestricciones nvarchar(255) 
, @MACSinRestricciones nvarchar(255) 
, @Enmascarada nvarchar(255) 
, @SistemaOperativo nvarchar(255) 
, @DirecciónArea nvarchar(255) 
, @TipoEquipo nvarchar(255) 
, @Observación nvarchar(255) 
AS 
BEGIN 
    SET NOCOUNT ON; 

BEGIN TRY 
    BEGIN TRANSACTION; 
    update dbo.IP 
     set Usuario = @Usuario 
      , DirecciónMAC = @DirecciónMAC 
      , MACRestricciones = @MACRestricciones 
      , MACSinRestricciones = @MACSinRestricciones 
      , Enmascarada = @Enmascarada 
      , SistemaOperativo = @SistemaOperativo 
      , DirecciónArea = @DirecciónArea 
      , TipoEquipo = @TipoEquipo 
      , Observación = @Observación 
    where NumeroIP = @NumeroIP 
    COMMIT TRANSACTION; 
END TRY 

BEGIN CATCH 

    IF (@@TRANCOUNT <> 0) 
    BEGIN 
    ROLLBACK TRANSACTION; 
    END 

    raiserror ('Valor modificado',16,1) 
END CATCH 
END 
Verwandte Themen