2

挿入ストアドプロシージャがあり、電子メールがすでに存在するかどうかを確認したいのですが、ユーザーにエラーを表示する必要がありますが、エラーをスローしてコードビハインドでキャッチするにはどうすればよいですか?

CREATE procedure [dbo].[SP_ProfileRegMaster]
    @UserId Varchar(50),
    @FirstName Varchar(50)
    @EmailID varchar (50)
    @result int out)
AS
BEGIN
    IF EXISTS (SELECT EmailId FROM Profile_Master WHERE EmailId = @EmailId)
    BEGIN
        SET @result = 0
    ELSE
       RAISERROR ('Email address does not exist.', 1, 1)
END

C#コード:

result = cmd1.Parameters.Add("@result", System.Data.SqlDbType.Int);
result.Direction = System.Data.ParameterDirection.Output;
4

4 に答える 4

2

RAISERRORseverityパラメータが>=11の場合にのみ、アプリケーションで例外をスローします。

コードはseverity1に設定されています。これは情報メッセージとして分類され、アプリケーションに返されません。

于 2012-08-08T16:41:02.493 に答える
1

コメントで述べたように、あなたの場合はRAISERROR()を使用しません。あなたはこのようなことをすることができます:

ストアドプロシージャ

CREATE procedure [dbo].[SP_ProfileRegMaster]
  @UserId  Varchar(50),
  @FirstName  Varchar(50)
  @EmailID varchar (50))
AS BEGIN
  if exists(select EmailId from Profile_Master where EmailId=@EmailId)
  begin
    return 0
  else
    return 1
  end
end

C#コード

SqlConnection conn = new SqlConnection(getConnectionString())
SqlCommand cmd = new SqlCommand("SP_ProfileRegMaster", conn);
cmd.CommandType = CommandType.StoredProcedure;

// Pass parameters to Stored Proc...

// Add one more parameter to store the Return Value
var returnParameter = cmd.Parameters.Add("@ReturnVal", SqlDbType.Int);
returnParameter.Direction = ParameterDirection.ReturnValue;

conn.Open();
cmd.ExecuteNonQuery();
// Retrieve the return value
var result = returnParameter.Value;
于 2012-08-09T10:31:57.043 に答える
0

SQLからカスタムエラーを本当にスローしたい場合は、RAISERRORを使用してください。

ELSE
     RAISERROR ('Email address does not exist.', 1, 1)

@Resultただし、SQLの例から、成功値とは異なるものに設定することができます。

ELSE
    SET @Result = 1 --indicates an error

@ResultC#の値を確認します。

于 2012-08-08T15:16:50.240 に答える
0

結果が0と1のみになる場合は、@ Resultを少しにして、1はメールアドレスが存在することを意味し、存在しない場合は0で、結果がtrueかfalseかをコードビハインドでチェックインできます。

編集:

RAISEERRORを使用するには、次を使用します

RAISERROR ( { msg_id | msg_str | @local_variable }
{ ,severity ,state }
[ ,argument [ ,...n ] ] )
[ WITH option [ ,...n ] ]

例えば:

 RAISERROR ('Message',10,1)

10は重大度、1は状態です

于 2012-08-08T15:19:38.470 に答える