2013-06-05 47 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

相关问题