SQL存储过程编辑

时间:2016-05-31 21:43:10

标签: sql-server vb.net tsql

我正在使用SQL和Visual Basic开发一个关于我的网络订单的数据库但是我没有看到我想要的结果,在visual basic中我收到错误这是我的存储过程

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

你能帮帮我办一下吗?

2 个答案:

答案 0 :(得分:3)

您将始终在VB中收到错误,因为在您的过程结束时使用RAISEERROR语句,您总是会返回错误。

来自the documentation

  

该消息作为服务器错误消息返回给调用   应用程序或TRY ... CATCH构造的相关CATCH块。

您应该考虑在您的程序中切换到使用PRINT而不是RAISERROR

答案 1 :(得分: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