Уже третий день мучаюсь, не могу занести данные в БД. 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]));
Оставим за скобками хранение паролей в открытом виде.
Проблема вставки в том, что Вы пытаетесь вставить строку, но не берете значение в кавычки. Простое решение, но неправильное:
_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.
Кофе для программистов: как напиток влияет на продуктивность кодеров?
Рекламные вывески: как привлечь внимание и увеличить продажи
Стратегії та тренди в SMM - Технології, що формують майбутнє сьогодні
Выделенный сервер, что это, для чего нужен и какие характеристики важны?
Современные решения для бизнеса: как облачные и виртуальные технологии меняют рынок
Как я понял, картинка с тату не прозрачная, а белая, напримерНо потом этот цвет "перекрашивается" под цвет кожи
При примерно 4500 строк запрос занимает 5 - 10 секундКак можно ускорить SELECT в SQLite?
Имеется бд со связью многие ко многимРаботаю с ней на форме 'Данные о маршруте'