2012-08-08 30 views
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; 
+0

你需要使用SQL客户端并做通过C#代码后面的代码..你需要看看如何在C#中连接SQL Server的示例以及如何在C#代码中传递参数来执行查询..例如 – MethodMan 2012-08-08 15:10:49

回答

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 [email protected]) 
    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; 
+0

这就是我所做的,但我想知道什么时候和在哪里可以更有效地使用或实施RAISERROR? – 2012-08-09 11:09:10

0

如果你真的想扔从SQL使用RAISERROR自定义错误,即

ELSE 
    RAISERROR ('Email address does not exist.', 1, 1) 
从你可以只设置 @Result您例如SQL

然而比你的成功值不同的东西:

ELSE 
    SET @Result = 1 --indicates an error 

,并从您检查@Result值C#。

+0

那么如何在后面的代码中捕获这个@result?就像下面的 int结果; cmd.Parameters.AddWithValue(“@ Result”,result); – 2012-08-08 15:18:54

+0

如何将错误消息添加到Raiserror(....) – 2012-08-08 15:26:11

+0

我修改了上面的示例,但我建议您阅读上面链接的MSDN文档。 – 2012-08-08 15:33:26

0

如果结果只打算为0和1,则@Result应该是一个位和1表示的电子邮件地址是当前和0,如果没有,那么你可以在代码后面的检查,如果结果是真还是假。

编辑:

要使用theRAISEERROR使用下面

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

例如:

RAISERROR ('Message',10,1) 

10是严重程度和1是状态

2

RAISERROR只会抛出在申请时例外severity pa rameter> = 11。

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