【问题标题】:Calling stored procedure from C# code从 C# 代码调用存储过程
【发布时间】:2013-03-22 09:04:55
【问题描述】:

我有一个存储过程,用于检查输入的电子邮件(和手机)是否已存在于数据库中。如果存在(存在)则返回 True,否则返回 False。如果返回 False(即电子邮件和手机是唯一的),另一个存储过程会将用户详细信息插入数据库并注册他。所有这一切都只需单击一个按钮即可完成。

需要此代码的帮助:

编辑 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    

【问题讨论】:

  • 你也可以在这里发布你的Stored Procedure。 d 最有效的方法是写高效Stored Procedure
  • 请在编辑后的帖子中找到存储过程...

标签: asp.net database stored-procedures


【解决方案1】:

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

在您的存储过程中进行如下检查:

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

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

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

【讨论】:

  • 我还必须向用户显示电子邮件/手机已被占用/可用的消息...
  • 它说你必须声明(@Name,@CountryCode,@Password)
  • 就像我的帖子所说,您需要将这些参数添加到存储过程中
  • 我已经添加了截图。您会看到红色下划线。那就是我得到错误的地方。它不允许我创建存储过程。
  • 将所有参数添加到 usp_CheckEmailMobile,它们当前未定义
【解决方案2】:

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

您可以将它们合二为一,而不是使用两种不同的程序。 proc会先检查邮箱和手机是否存在,如果为false则添加用户,如果为true则不添加用户并返回false给你。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2018-02-03
    • 2018-04-07
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-04-25
    相关资源
    最近更新 更多