我有一个插入存储过程,我想检查电子邮件是否已经存在,如果存在我必须向用户显示错误但是如何抛出错误并将其捕获到后面的代码中?
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;
答案 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是状态