2012-04-24 8 views
2

私の選択したプログラミング言語として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 

答えて

1

マイクロソフトでは、Visual BasicではHow to Retrieve Values in SQL Server Stored Proceduresという記事を掲載しています。これはあなたの問題を解決する方法のアイデアを与える必要があります。

+1

ありがとうNeil、それはちょっと助けました。私の問題は、私のエラーレベルが10に設定され、レベル11-18だけがe.Exceptionで返されるということでした。 –

関連する問題