私の選択したプログラミング言語としてC#を使用してASP.NET 4.0の周りに頭を上げようとしています。私は良いSQL開発者であり、ビジネスロジックのほとんどをSQLで行う予定です。アプリケーションは、ストアドプロシージャを介してのみデータベースと対話します。c#asp.net:SQLストアドプロシージャからraiserror()メッセージを取得します。
私はSPを呼び出しデータビューを移入するためのデータソースを持っているaspxページで「season_get_byID」及びパラメータの数を取り更新「season_update」の、
ASPX源が
<asp:SqlDataSource ID="dsDetail" runat="server"
ConnectionString="<%$ ConnectionStrings:ADR %>"
SelectCommand="season_get_by_ID" SelectCommandType="StoredProcedure"
UpdateCommand="season_Update" UpdateCommandType="StoredProcedure">
<SelectParameters>
<asp:ControlParameter ControlID="GridView1" Name="ID"
PropertyName="SelectedValue" Type="Int32" />
</SelectParameters>
<UpdateParameters>
<asp:Parameter Name="ID" Type="Int32" />
<asp:Parameter Name="Code" Type="String" />
<asp:Parameter Name="Description" Type="String" />
<asp:Parameter DbType="Datetime" Name="StartDate" />
<asp:Parameter DbType="Datetime" Name="EndDate" />
<asp:Parameter Name="isActive" Type="Byte" />
<asp:Parameter Name="isCurrent" Type="Byte" />
</UpdateParameters>
</asp:SqlDataSource>
を示します
各asp:パラメータはストアドプロシージャの@Param引数にマップされます - これまでのところ良い
ストアドプロシージャは、更新を行う前にいくつかの検証を行います。検証に失敗すると、RAISERROR(@ errmsg、10,1)が生成されます。
私がうまくいかないのは、aspx.csコードの背後にあるファイルで、エラーをキャプチャしようとしたときの構文とは何ですか:after_updateイベントハンドラ内にある必要がありますe.exceptionの一部になる。私は、このルーチンのバリデーションのいくつかはバリデーションクラスを使って行うことができることを知っていますが、これは最終的な生産コードではなく環境を操作する学習エクササイズです。すなわち、正しいものではなく可能なものを理解しようとしています。
保存されたprocのテキストは以下のとおりです。
ALTER Procedure [dbo].[season_Update]
(
@ID int,
@Code nvarchar(10),
@Description nvarchar(50),
@StartDate date,
@EndDate date,
@isActive tinyint,
@isCurrent tinyint
)
as
DECLARE @ERR nvarchar(max) = ''
IF (SELECT count(*) FROM season WHERE ID = @ID) = 0
BEGIN
SET @ERR = @ERR + '|Season Doesn''''t exist'
END
/*validate that season code and description are not blank*/
IF (@Code is null
or
ltrim(rtrim(@Code)) = ''
)
BEGIN
set @ERR =+ '|Season Code cannot be blank'
END
IF @ERR = ''
BEGIN
IF (@Description is null
or
ltrim(rtrim(@Description)) = ''
)
BEGIN
set @ERR =+ '|Season Description cannot be blank'
END
/*validate that the season code does not already exist on a different ID*/
IF (SELECT count(*) FROM season WHERE Code = ltrim(rtrim(upper(@CODE))) and
ID <> @ID) > 0
BEGIN
SET @ERR =+ '|Season Code ' + @Code + 'already exists'
END
/*validate that the start date is before the end date*/
IF @Startdate > @Enddate
BEGIN
SET @ERR =+ '|Start Date cannot be Before End Date'
END
END
IF @ERR = ''
BEGIN
BEGIN TRY
UPDATE Season
SET Code = ltrim(rtrim(upper(@Code))),
Description = Ltrim(rtrim(@Description)),
StartDate = @StartDate,
EndDate = @EndDate,
isActive = @isActive,
isCurrent = @isCurrent
WHERE
ID = @ID
END TRY
BEGIN CATCH
RAISERROR(N'There was a problem',10,1)
END CATCH
END
IF @ERR <> ''
BEGIN
RAISERROR(@ERR,10,1)
END
ありがとうNeil、それはちょっと助けました。私の問題は、私のエラーレベルが10に設定され、レベル11-18だけがe.Exceptionで返されるということでした。 –