我有一個存儲過程,在這裏我做一個INSERT
,然後在這種情況下,一個RAISERROR("MyException", 5, 5)
插入失敗。SQL Server存儲過程拋出多重錯誤
的問題是,結果到我的.NET應用程序是
MyException:不能將NULL值...
所以它返回一個2個例外。
我的.NET代碼總是將整個字符串與「MyException」匹配,但不再工作。
這是標準嗎?如果是這樣,這怎麼可能以前工作?有沒有任何設置?
編輯:
使用.NET表格適配器來處理SQL數據庫。
版本
產品:Microsoft SQL Server的企業單位(64位) 版本: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存儲過程?交易? try/catch – MtwStark
*我的.NET代碼總是將整個字符串與「MyException」匹配,但是... *您可以共享執行此操作的代碼嗎? –
爲了使RAISERROR引發異常,指定的嚴重性必須爲11或更大。試試'RAISERROR('MyException',16,5)'。請注意,單引號允許您使用'QUOTED_IDENTIFIER ON'運行,這是最佳做法。 –