2013-03-22 182 views
-1

ss调用存储从C#代码

过程我有一个存储过程,如果电子邮件(&手机)进入已经存在于数据库来检查。如果它存在,则返回True,否则返回False。如果返回False(即电子邮件& mobile是唯一的),另一个存储过程将把用户详细信息插入数据库并注册。所有这些都是通过单击按钮完成的。

与此代码需要帮助:

编辑2:

protected void btnRegister_Click(object sender, EventArgs e) 
{ 

    SqlConnection con = new SqlConnection(System.Configuration.ConfigurationManager.AppSettings["ConnectionString"]); 
    con.Open(); 



    SqlCommand Cmd = new SqlCommand("usp_CheckEmailMobile", con); 
    Cmd.CommandType = CommandType.StoredProcedure; 
    Cmd.CommandText = "Registration"; 
    Cmd.Parameters.AddWithValue("@Name", txtName.Text); 
    Cmd.Parameters.AddWithValue("@Email", txtEmailAddress.Text); 
    Cmd.Parameters.AddWithValue("@Password", txtPassword.Text); 
    Cmd.Parameters.AddWithValue("@CountryCode", ddlCountryCode.Text); 
    Cmd.Parameters.AddWithValue("@Mobile", txtMobileNumber.Text); 
    //Cmd.Parameters.Add("@Result", DbType.Boolean); 
    SqlParameter sqlParam = new SqlParameter("@Result", DbType.Boolean); 
    //sqlParam.ParameterName = "@Result"; 
    //sqlParam.DbType = DbType.Boolean; 
    sqlParam.Direction = ParameterDirection.Output; 
    Cmd.Parameters.Add(sqlParam); 
    Cmd.ExecuteNonQuery(); 
    con.Close(); 
    Response.Write(Cmd.Parameters["@Result"].Value); 

} 

问:我怎么做工作?我如何使用最少的资源进行工作?我是否复制代码?我想以最高效/合理/正确的方式做到这一点。

编辑:

ALTER PROCEDURE [dbo].[usp_CheckEmailMobile] 
( @Name VARCHAR(50), 
@Email NVARCHAR(50), 
@Password NVARCHAR(50), 
@CountryCode INT, 
@Mobile VARCHAR(50), 
@Result BIT OUTPUT) 
AS 
BEGIN 

    IF EXISTS (SELECT COUNT (*) FROM AUser WHERE [Email] = @Email AND [Mobile] = @Mobile) 
Begin 
Set @Result=0; --Email &/or Mobile does not exist in database 
End 
ELSE 
Begin 
--Insert the record & register the user 
INSERT INTO [AUser] ([Name], [Email], [Password], [CountryCode], [Mobile]) VALUES (@Name, @Email, @Password, @CountryCode, @Mobile) 
    Set @Result=1; 
End 

END  
+1

你还可以在这里发布你的'存储过程'。 d最有效的方法就是编写高效的'存储过程' – 2013-03-22 09:11:13

+0

请在编辑后的文章中找到存储过程... – adityawho 2013-03-22 09:16:25

回答

0

你可以通过你的usp_CheckEmailMobile存储过程执行操作:

内部存储过程做一次检查是这样的:

-- Check that record doesn't exist 
IF NOT EXISTS (SELECT TOP 1 FROM AUser WHERE [email protected] and [email protected]) 
     -- Insert record 
     INSERT INTO [AUser] ([Name], [Email], [Password], [CountryCode], [Mobile]) 
     VALUES (@Name, @Email, @Password, @CountryCode, @Mobile) 

这将插入的记录,如果它不存在。您只需将其他参数添加到此存储过程。

根据返回的值,可以使用True/False值并说'注册成功'或'用户已存在'。

+0

我还必须向用户显示电子邮件/手机是采取/ avaialable ... – adityawho 2013-03-22 09:17:40

+0

它说你必须声明(@Name,@CountryCode,@Password) – adityawho 2013-03-22 09:27:36

+0

像我的帖子说,你需要添加这些params到存储过程 – Tanner 2013-03-22 09:30:14

0

的ExecuteNonQuery返回受影响的行数。我认为你应该使用ExecuteScalar(因为你的过程只返回true或false)。并转换为执行结果到布尔值。

而不是使用两个不同的过程,你可以将它们合并为一个。 proc将首先检查电子邮件和手机是否存在,如果false将添加用户,如果为true,则不会添加用户并向您返回false。

+0

那么什么来代替???????我怎么能把它们合并成一个? – adityawho 2013-03-22 09:12:11