首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >SQL存储过程编辑

SQL存储过程编辑
EN

Stack Overflow用户
提问于 2016-06-01 05:43:10
回答 2查看 62关注 0票数 0

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

代码语言:javascript
复制
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是:

代码语言:javascript
复制
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()

你能帮我操作一下吗?

EN

回答 2

Stack Overflow用户

发布于 2016-06-01 05:50:33

在VB中你总是会收到一个错误,因为在你的过程末尾使用RAISEERROR语句,你总是返回一个错误。

来自:

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

您应该考虑在过程中使用PRINT而不是RAISERROR

票数 3
EN

Stack Overflow用户

发布于 2016-06-01 05:57:00

按照您编写存储过程的方式,它总是会引发错误。

另外请阅读这个TSQL Try / Catch within Transaction or vice versa?,我非常详细地解释了TRY..CATCH块是如何工作的,以及如何正确地对它进行错误处理。

你的SP应该写成这样...

代码语言:javascript
复制
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
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/37556115

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档