Не записывается в бд

133
12 мая 2019, 09:10

Уже третий день мучаюсь, не могу занести данные в БД. MSSQL Server 2016. Вообще логика такая: пользователь вводит боту логин/пароль, он авторизуется на сайте и параллельно записываем человека в БД. Если в базе есть такой пользователь, то ничего не делаем

static class DatabaseInstance
{
    static private readonly string connectionString = "Data Source = (LocalDB)\\MSSQLLocalDB;AttachDbFilename = C:\\Users\\Blackbirder\\AppData\\Local\\Microsoft\\Microsoft SQL Server Local DB\\Instances\\MSSQLLocalDB\\University.mdf; Integrated Security = True";
    static public void DbInsert(string login, string password)
    {
        try
        {
            using (var connection = new SqlConnection(connectionString))
            {
                connection.Open();
                using (var _find = new SqlCommand("SELECT Login FROM Students", connection))
                {
                 //   connection.Open();
                    SqlDataReader _reader = _find.ExecuteReader();
                    while (_reader.Read())
                    {
                        if (_reader.ToString() == login)
                        {
                            connection.Close();
                            return;
                        }
                    }
                    _reader.Close();
                }
                using (var _insertDb = new SqlCommand($"INSERT INTO [Students] ([Login], [Password]) VALUES ({login}, {password})", connection))
                {
                    _insertDb.ExecuteNonQuery();
                }
                connection.Close();
            }
        }
        catch (Exception ex)
        {
            Console.WriteLine(ex.Message);
        }
    }

пишет Invalid column name 'somepassword' Получаю login и password таким образом:

if (e.Message.Text == "/start")
                Bot.SendTextMessageAsync(e.Message.Chat.Id, @"Введите логин и пароль через пробел");
            user_data = e.Message.Text.Split(' ');
        //    Bot.SendTextMessageAsync(e.Message.Chat.Id, web.Authorize(user_data[0], user_data[1]));
            if (web.Authorize(user_data[0], user_data[1]).Contains("Вы вошли"))
            {
                Task task = new Task(() => DatabaseInstance.DbInsert(user_data[0], user_data[1]));
Answer 1

Оставим за скобками хранение паролей в открытом виде.

Проблема вставки в том, что Вы пытаетесь вставить строку, но не берете значение в кавычки. Простое решение, но неправильное:

_insertDb = new SqlCommand($"INSERT INTO [Students] ([Login], [Password]) VALUES ('{login}', '{password}')", connection))

Неправильное из-за уязвимости для внедрения SQL-кода. Старайтесь использовать в запросах параметризацию:

using (var _insertDb = new SqlCommand("INSERT INTO [Students] ([Login], [Password]) VALUES (@login, @password)", connection))
{
    _insertDb.Parameters.Add("@login", SqlDbType.VarChar, 32).Value = login;
    _insertDb.Parameters.Add("@password", SqlDbType.VarChar, 32).Value = password;
    _insertDb.ExecuteNonQuery();
}

Здесь SqlDbType.VarChar и 32 должны соответствовать типу и размеру колонок таблицы Students.

READ ALSO
Скрыть метку в AR. UNITY

Скрыть метку в AR. UNITY

Как я понял, картинка с тату не прозрачная, а белая, напримерНо потом этот цвет "перекрашивается" под цвет кожи

136
Кэш Entity Framework не сбрасывается

Кэш Entity Framework не сбрасывается

При вызове из метода контроллера метода

150
SQLite ускорить SELECT

SQLite ускорить SELECT

При примерно 4500 строк запрос занимает 5 - 10 секундКак можно ускорить SELECT в SQLite?

153
Реализация связи многие ко многим в c# (windows forms)

Реализация связи многие ко многим в c# (windows forms)

Имеется бд со связью многие ко многимРаботаю с ней на форме 'Данные о маршруте'

153