2013-03-22 180 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