2016-05-31 91 views
0

我正在用SQL和Visual Basic開發一個關於我的網絡訂單的數據庫,但我沒有看到我想要的結果,在visual basic中我收到一個錯誤,這是我的存儲過程SQL存儲過程編輯

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) 

我的VB.NET是:

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() 

你能幫我跑了嗎?

+0

你commiting交易? – lopushen

+0

您可以使用'RAISERROR('Valor modificado',0,1)WITH NOWAIT' –

回答

3

在VB中總是會收到一個錯誤,因爲在程序結束時RAISEERROR聲明總是返回一個錯誤。

the documentation

該消息被返回作爲服務器錯誤消息給主叫 應用程序或到TRY ... CATCH構造的相關聯的CATCH塊。

您應該考慮在您的過程中切換爲使用PRINT而不是RAISERROR

0

您編寫存儲過程的方式總是會引發錯誤。

也請閱讀這TSQL Try/Catch within Transaction or vice versa?,我詳細解釋了TRY..CATCH塊的工作原理以及如何適當地執行錯誤處理。

你的SP應該這樣寫......

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