【发布时间】:2018-03-20 12:17:37
【问题描述】:
我有一个存储过程,我执行INSERT,然后执行RAISERROR("MyException", 5, 5),在这种情况下插入失败。
问题是我的 .NET 应用程序的结果是
MyException: 无法插入值 NULL...
所以它会合二为一地返回 2 个异常。
我的 .NET 代码总是将整个字符串与“MyException”进行匹配,但不再起作用了。
这是标准吗?如果是这样,这以前怎么可能有效?有什么设置吗?
编辑:
我正在使用 .NET 表适配器来处理 SQL 数据库。
版本
产品 : Microsoft SQL Server Enterprice(64-bit) 版本:11.0.2100.60 集群:假 HADR:错误
微软框架 .NET 4.6.2
存储过程
ALTER Procedure [dbo].[up_kod_text_save]
-- Add the parameters for the stored procedure here
@entity_id int,
@text varchar(300),
@kod_key int,
@kod_id int,
@korttext varchar(10),
@inaktiv bit,
@primar_extern_kod varchar(300),
@sparad_av varchar(128),
@kod_typ_id int,
@kod varchar(20),
@original_rowver rowversion,
@associerat_varde decimal(18,5),
@beskrivning varchar(2000),
@viktigt_varde bit
AS
BEGIN
-- SET NOCOUNT ON added to prevent extra result sets from
-- interfering with SELECT statements.
SET NOCOUNT ON;
DECLARE @resultat table(kod_id int, uppdat_tidpunkt datetime, rowver binary(8) );
Insert into @resultat
exec up_kod_save @kod_id,@text,@korttext,@inaktiv,@primar_extern_kod,@sparad_av,@kod_typ_id,@kod,@original_rowver, @associerat_varde, @beskrivning,@viktigt_varde
declare @uppdat_tidpunkt datetime
declare @rowver rowversion
declare @tablename varchar(30)
declare @idname varchar(30)
SET @rowver = (SELECT rowver FROM @resultat)
SET @kod_id = (SELECT kod_id from @resultat)
------------------------------------------------------------------------------------
set @uppdat_tidpunkt = getdate()
IF(@kod_key = 2)
BEGIN
ELSE IF(@kod_key = 11)
BEGIN
IF EXISTS ( SELECT akut_checklista_id FROM akut_checklista WHERE akut_checklista_id = @entity_id )
BEGIN
UPDATE akut_checklista
SET [text] = @text,
[kod_id] = @kod_id
WHERE akut_checklista_id = @entity_id
END
ELSE
BEGIN
-- Skapa master-rad
INSERT INTO [akut_checklista] ([text], [kod_id])
VALUES (@text, @kod_id);
set @entity_id = SCOPE_IDENTITY()
END
END
ELSE
BEGIN
RAISERROR ('MyApp_EXCEPTION_UPPDATERAD_AV_ANNAN',16,1)
RETURN
END
SELECT @entity_id as entity_id, @rowver as rowver, @kod_id as kod_id, @uppdat_tidpunkt as uppdat_tidpunkt
up_kod_save 只是更新\插入,没有任何事务。但是,如果 rowversion 错误,它可能会失败。
【问题讨论】:
-
能否请您提供有关 sql-server 版本和 .net 版本的信息?结构os存储过程呢?交易?尝试/捕捉
-
我的 .NET 代码总是将整个字符串与“MyException”匹配,但是...你能分享一下执行此操作的代码吗?
-
指定的严重性必须为 11 或更高,
RAISERROR才能引发异常。试试RAISERROR('MyException',16,5)。请注意,单引号允许您使用QUOTED_IDENTIFIER ON运行,这是一种最佳做法。 -
我现在更新了一些信息。 @destination-data,.NET 代码不是问题。我可以看到 sp 的结果是 2 条错误消息合二为一。在这种情况下,首先是 akut_checklista 中关于 null 的异常,然后是因为 Uppdaterad_Av....
-
您是否尝试过使用分析器并获取您的应用程序正在尝试执行的操作并将查询放在 SQL 上?首先,我会这样做来检查.. 在这里粘贴你的分析器插入也
标签: .net sql-server exception stored-procedures