2013-06-05 3 views
1

Я видел этот вопрос пару раз, но я не мог найти хороший ответ. Я застрял часами на этом.Как проверить, существует ли имя пользователя в базе данных

В основном у меня есть имена пользователей, сохраненных в базе данных, и когда новый пользователь регистрируется, я хочу проверить, доступно ли его имя пользователя, и если оно доступно, добавьте его в базу данных. И они регистрируются через текстовое поле с именем FName. Таблица называется Users.

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.Parameters.Add("paramUsername", System.Data.SqlDbType.VarChar); 
cmd.Parameters["paramUsername"].Value = "Theusernameyouarelookingfor"; 
+0

Спасибо за ваш быстрый ответ :) но ... cmd.Parameters ["paramUsername"]. Значение = "Theusernameyouarelookforfor" Что именно я там пишу? Я ищу все возможные названия. Не psecific один ... – 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(); 

Things отметить:

  • Использование параметров, avo идентификатор конкатенация строк, потому что это уязвимость
  • Всегда Close и Dispose вашего ADO объекты
+0

Где я могу импортировать SqlDbType, loginUserSelected, CommandBehavior from ?? *** Я импортировал SqlDbType и CommandBehavior, но что мне делать с loginUserSelected ?? – user2456977

+0

'loginUserSelected' поступает из вашего интерфейса, это строка, которую пользователь отправил. –

+0

Я помещаю его в кавычки? Он отображается как ошибка прямо сейчас. – user2456977

Смежные вопросы