我正在使用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()
你能帮帮我办一下吗?
答案 0 :(得分:3)
您将始终在VB中收到错误,因为在您的过程结束时使用RAISEERROR
语句,您总是会返回错误。
该消息作为服务器错误消息返回给调用 应用程序或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