Как сохранить результат SQL «Выбрать» в переменной в C # - PullRequest
1 голос
/ 22 апреля 2011

Я использую Visual C #, подключенный к MySQL, в учебных целях, и я застрял в выдаче ошибки пользователю, когда он вводит имя пользователя, которое уже существует.

Текущий код для помещения вещей в базу данных(это может быть бесполезно, как только мой вопрос может быть гораздо больше о SQL):

s = new sql(); // This calls a class that works as an adapter to connect form with the database
Conn = s.Connection;
Conn.Open();
coma = Conn.CreateCommand();
coma.CommandText = "INSERT INTO test.test (`user`,`password`) VALUES ('"+username.Text+"','"+password.Text+"');";

coma.ExecuteNonQuery ();

Что я хочу сделать это сравнить "имя пользователя.Text "(" username "- это TextBox) со значениями в таблице" test "базы данных и, если какое-либо значение совпадает, вызывает MessageBox.Show (" Эй, парень, это имя пользователя уже используется! Попробуйте что-то другое) * +1010 *

Ответы [ 2 ]

5 голосов
/ 22 апреля 2011

Некоторые замечания по поводу примера кода

  1. Вы хотите быть уверены, что избавляетесь от объектов подключения и команд.Что касается моего ответа, я завернул их в using заявления, которые позаботятся об этом для меня.
  2. Вы не хотите идти в базу данных с неанимированными входами .В этом примере я собираюсь использовать параметризованные запросы.
  3. Не рекомендуется хранить пароли в виде простого текста. Я не собираюсь демонстрировать более безопасные методы, просто знаю, ищет информацию о шифровании паролей , солт-ключей и т. Д.

А теперь о некоторыхкод.В этом я использую OleDb объекты, модифицированные для вашей конкретной базы данных.И, конечно же, предоставьте соответствующие имена таблицам, столбцам и т. Д.

using (OleDbConnection connection = SomeMethodReturningConnection())
using (OleDbCommand command = SomeMethodReturningCommand())
{
    command.Parameters.Add(new OleDbParameter("@username", username));
    command.CommandText = "Select Count(*) From Users where Username = @username";
    connection.Open();
    int output = (int)command.ExecuteScalar();

    if (output > 0)
    {
        // username already exists, provide appropriate action
    }
    else
    {
        // perform insert 
        // note: @username parameter already exists, do not need to add again
        command.Parameters.Add(new OleDbParameter("@password", password));
        command.CommandText = "Insert Into Users (Username, Password) Values (@username, @password)";
        command.ExecuteNonQuery();
    }
}
1 голос
/ 23 апреля 2011

Спасибо, Энтони!Ваш ответ поставил меня на правильный путь.Хотя люди, которые будут читать этот пост, должны что-то изменить из своего кода, чтобы он работал с коннекторами Odbc: способ синтаксического анализа параметров и извлечения содержимого текстового поля:

using (OdbcConnection connection = SomeMethodReturningConnection())
using (OdbcCommand command = SomeMethodReturningCommand())
{
    command.Parameters.Add(new OdbcParameter("@username", username.Text));
    command.CommandText = "Select Count(*) From Users where Username = ?";
    connection.Open();
    int output = (int)command.ExecuteScalar();

    if (output > 0)
    {
        // username already exists, provide appropriate action
    }
    else
    {
        // perform insert 
        // note: @username parameter already exists, do not need to add again
        command.Parameters.Add(new OdbcParameter("@password", password.Text));
        command.CommandText = "Insert Into Users (Username, Password) Values (?,?)**";
        command.ExecuteNonQuery();
    }
}

Спасибо в любом случае!

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...