2016-04-24 170 views
2

我想找到大量的時間如何檢查值存在,我無法找到它,我需要檢查兩次:在招牌如何檢查是否值已經存在

  1. 高達
  2. 日誌在

這裏是我的代碼塊:

SqlConnection c = new SqlConnection(str); 
     SqlCommand cmdUsername = new SqlCommand("SELECT 1 FROM Users WHERE UserName = @userName;", c); 
     cmdUsername.Parameters.AddWithValue("userName", userName); 
     cmdUsername.CommandType = System.Data.CommandType.Text; 
     SqlCommand cmdEmail = new SqlCommand("SELECT 1 FROM Users WHERE Email = @email;", c); 
     cmdUsername.Parameters.AddWithValue("email", email); 

     c.Open(); 
     nameExists = (int)cmdUsername.ExecuteScalar(); 
     emailExists = (int)cmdEmail.ExecuteScalar(); 
     c.Close(); 

當我輸入一個電子郵件它標誌着行

emailExists = (int)cmdEmail.ExecuteScalar(); 

和日誌中的所有的就可以了。

請幫幫我!謝謝你們。

+0

它標誌着怎麼行?有編譯器錯誤?向我們展示'nameExists'和'emailExists'的定義。 –

+0

這裏是defenition: 'int nameExists,emailExists;' 錯誤是這樣的: **對象引用未設置爲對象的實例** – D4NieLDev

+0

什麼是str?連接字符串? –

回答

1

假設你要防止重複的用戶名或電子郵件,你必須做到以下幾點。 1.將ID列設置爲INT,並將其設置爲來自列屬性的標識列。 2.將您的電子郵件或用戶名設置爲主鍵,以防止重複發送電子郵件或用戶名,最佳做法是將電子郵件列設置爲主鍵,其中有很多情況下用戶具有相同的名稱但具有唯一的名稱電子郵件。 FYI

希望有幫助!

並檢查用戶名或電子郵件是否已經在這裏存在你如何做到這一點!

SqlCommand check_User_Name = new SqlCommand("SELECT COUNT(*) FROM [Table] WHERE ([user] = @user || [email] = @email)" , c); 
check_User_Name.Parameters.AddWithValue("@user", txtBox_UserName.Text); 
check_User_Name.Parameters.AddWithValue("@email", txtBox_Email.Text); 
int UserExist = (int)check_User_Name.ExecuteScalar(); 

if(UserExist > 0) 
{ 
    //Username exist 
} 
else 
{ 
    //Username doesn't exist. 
} 
+0

如何在輸入已存在的值時打印錯誤消息?例如,用戶名john已經存在,現在一個新人想用john這個名字註冊,我想打印一個錯誤信息。 – D4NieLDev

+0

你需要設置一個錯誤處理程序,你應該問一個新的問題。目前如果答案對你有幫助,請接受它作爲幫助周圍其他人的答案。 –

+0

我認爲它會有所幫助,但我更喜歡只有一個主鍵 – D4NieLDev

-1

試試這個 -

string myConnection=str;//this is your connection string 
string userName=""; 
string email=""; 
string parameteruserName = "";//your parameter should goes here 
string parameterEmail = "";//your parameter should goes here 
try 
{ 
    SqlDataReader myReader = null; 
    SqlCommand myCommand = new SqlCommand(SELECT COUNT(*) as count FROM Users WHERE UserName =" +parameteruserName+" or Email ="+parameterEmail 
    ) "+ ";", 
              myConnection); 
    myReader = myCommand.ExecuteReader(); 
    while(myReader.Read()) 
    { 
     userName= myReader["count"].ToString(); 

    } 
myReader.close(); 
myConnection.Close(); 
} 
catch (Exception e) 
{ 
    Console.WriteLine(e.ToString()); 
} 


if(Convert.ToInt32(userName)>0){ 
//your user name is exists 
} 
+0

我嘗試一下,當我輸入一個現有的電子郵件時,我沒有收到任何錯誤。 如何知道用戶名或電子郵件是否存在? – D4NieLDev

+0

我無法調用myReader.close()方法,因爲它不存在於當前上下文中。 – D4NieLDev

+0

如果您從記錄中得不到任何信息,則電子郵件或usert名稱爲空字符串,這意味着電子郵件或用戶名不存在。 –

0

使用你的代碼,只是優化了一下。

  • 只需一個電話數據庫
  • 始終關閉連接,即使沒有找到時出現
  • 返回false一個異常或缺異常發生,真正otherwis

您還可以添加一個檢查如果這是一個登錄檢查,則輸入密碼。

public bool ValidData(string username, string email, string connectionString) 
{ 
    var c = new SqlConnection(connectionString); 
    var cmdUsername = new SqlCommand("SELECT COUNT(*) FROM Users WHERE UserName = @userName AND email = @email;", c); 
    cmdUsername.Parameters.AddWithValue("userName", username); 
    cmdUsername.CommandType = System.Data.CommandType.Text; 
    cmdUsername.Parameters.AddWithValue("email", email); 

    c.Open(); 
    try 
    { 
     return (int) cmdUsername.ExecuteScalar() > 0; 
    } 
    catch (Exception ex) 
    { 
     //log exception 

     return false; 
    } 
    finally 
    { 
     c.Close(); 
    } 
} 

如果你只需要用戶名或電子郵件的變化:

var cmdUsername = new SqlCommand("SELECT COUNT(*) FROM Users WHERE UserName = @userName AND email = @email;", c); 

到:

var cmdUsername = new SqlCommand("SELECT COUNT(*) FROM Users WHERE UserName = @userName OR email = @email;", c);