使用存储过程显示错误消息

时间:2012-08-08 15:08:21

标签: c# sql-server

我有一个插入存储过程,我想检查电子邮件是否已经存在,如果存在我必须向用户显示错误但是如何抛出错误并将其捕获到后面的代码中?

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 个答案:

答案 0 :(得分:2)

RAISERROR只会在severity参数为> = 11时在应用程序中抛出异常。

您的代码将severity设置为1,该类别被归类为信息性消息,并且不会返回给应用程序。

答案 1 :(得分: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;

答案 2 :(得分:0)

如果你真的想从SQL中抛出一个自定义错误,请使用RAISERROR,即

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

但是,从您的示例SQL中,您可以将@Result设置为与您的成功值不同的内容:

ELSE
    SET @Result = 1 --indicates an error

并从C#中检查@Result的值。

答案 3 :(得分:0)

如果你的结果只有0和1,那么@Result应该是一点,1表示电子邮件地址存在,如果不存在则为0,那么你可以检查后面的代码,如果结果是真或假。< / p>

编辑:

要使用theRAISEERROR,请使用以下

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

例如:

 RAISERROR ('Message',10,1)

10是严重性,1是状态