2016-05-31 87 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