2013-06-05 46 views
1

我看過這個問題問過幾次,但我找不到一個好的答案。我一直堅持這個小時。如何檢查用戶名是否已存在於數據庫中

基本上我有用戶名保存在數據庫中,當新用戶註冊時,我想檢查他的用戶名是否可用 - 如果可用,請將他添加到數據庫。他們通過名爲FName的文本框進行註冊。該表稱爲用戶。

SqlConnection con = new SqlConnection(ConfigurationManager.ConnectionStrings["ConnectionString"].ConnectionString); 

SqlCommand cmd = new SqlCommand("SELECT FName FROM Users WHERE FName = ????? usernames????? ", con); 

con.Open(); 
SqlDataReader reader = cmd.ExecuteReader(); 
while (reader.Read()) 
{ 
    Console.WriteLine(reader["text"].ToString()); 
} 

我該如何解決這個問題?

+1

使用參數發送給您要檢查,並更改讀者循環使用'FName'而不是名稱'text'。 – DonBoitnott

+0

當.NET已經具有內置於「WebMatrix」和「會員提供程序」中的確切功能時,似乎很遺憾重新發明輪子。 –

回答

7
"SELECT FName FROM Users WHERE FName = @paramUsername" 

,然後您將參數進入CMD像這樣:

cmd.Parameters.Add("paramUsername", System.Data.SqlDbType.VarChar); 
cmd.Parameters["paramUsername"].Value = "Theusernameyouarelookingfor"; 
+0

感謝您的快速回復:)但是... cmd.Parameters [「paramUsername」]。Value =「用戶名稱您正在查看」 我到底在那裏寫什麼?我正在尋找每一個可能的名字。不是一個... – user2456977

+0

但是...什麼? =) – SamiHuutoniemi

+0

^^看看上面。我編輯了我的句子...... – user2456977

1

檢查了這一點:

SqlConnection connection = new SqlConnection(ConfigurationManager.ConnectionStrings["ConnectionString"].ConnectionString); 

string validationQuery = "SELECT * FROM Users WHERE FName = @name"; 
SqlCommand validationCommand = new SqlCommand(validationQuery, connection); 
validationCommand.Parameters.Add("@name", SqlDbType.VarChar).Value = loginUserSelected; 

connection.Open(); 

SqlDataReader validationReader = validationCommand.ExecuteReader(CommandBehavior.CloseConnection); 

if (!validationReader.Read()) 
{ 
    string insertQuery = "INSERT INTO Users (FName) VALUES (@name)"; 
    SqlCommand insertCommand = new SqlCommand(insertQuery, connection); 
    insertCommand.Parameters.Add("@name", SqlDbType.VarChar).Value = loginUserSelected; 

    connection.Open(); 

    insertCommand.ExecuteNonQuery(); 

    insertCommand.Dispose(); 

    connection.Close(); 
} 
else 
{ 
    //Uh oh, username already taken 
} 

validationReader.Close(); 

validationCommand.Dispose(); 

注意事項:

  • 使用參數,avo ID連接字符串,因爲它是一個安全漏洞
  • 始終CloseDispose您的ADO對象的命令
+0

我從哪裏導入SqlDbType,loginUserSelected,CommandBehavior從? ***我導入了SqlDbType和CommandBehavior,但我怎麼用loginUserSelected? – user2456977

+0

'loginUserSelected'來自您的界面,它是用戶提交的字符串。 –

+0

我把它放在引號中嗎?它現在顯示爲錯誤。 – user2456977

相關問題