我正在用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()你能帮我操作一下吗?
发布于 2016-06-01 05:50:33
在VB中你总是会收到一个错误,因为在你的过程末尾使用RAISEERROR语句,你总是返回一个错误。
来自:
将消息作为服务器错误消息返回给调用应用程序或TRY…的关联CATCH块CATCH构造。
您应该考虑在过程中使用PRINT而不是RAISERROR。
发布于 2016-06-01 05:57:00
按照您编写存储过程的方式,它总是会引发错误。
另外请阅读这个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
ENDhttps://stackoverflow.com/questions/37556115
复制相似问题