-1

ss

入力した電子メール (およびモバイル) がデータベースに既に存在するかどうかを確認するストアド プロシージャがあります。存在する (存在する) 場合は True を返し、そうでない場合は False を返します。False が返された場合 (つまり、電子メールとモバイルが一意である場合)、別のストアド プロシージャがユーザーの詳細をデータベースに挿入し、ユーザーを登録します。これはすべて、ボタンを 1 回クリックするだけで実行できます。

このコードについてサポートが必要です:

編集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    
4

2 に答える 2

0

ExecuteNonQuery は、影響を受けた行の数を返します。ExecuteScalar を使用する必要があると思います (プロシージャは true または false のみを返すため)。そして、executecalar の結果を boolean に変換します。

また、2 つの異なる手順を使用する代わりに、それらを 1 つに組み合わせることができます。proc は最初に電子メールとモバイルが存在するかどうかを確認します。false の場合はユーザーを追加し、true の場合はユーザーを追加せずに false を返します。

于 2013-03-22T09:09:37.897 に答える
0

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 値を使用して、返された値に応じて「登録成功」または「ユーザーが既に存在します」と言うことができます。

于 2013-03-22T09:16:06.687 に答える