Загрузка...

Проверка на уникальность и добавление в бд

Тема в разделе C# создана пользователем Minin_inactive4471240 2 мар 2022. 332 просмотра

  1. Minin_inactive4471240
    Minin_inactive4471240 Автор темы 2 мар 2022 3 5 сен 2021
    Софт добавляет юзера, который открыл софт, в бд. В пхпМайАдмин не разобрался, как можно сделать так, чтобы один и тот же юзер не добавлялся несколько раз. Решил сделать проверку в коде, но ничего не выходит. Но моём компе такое условие работает и меня не добавляет заново в бд, а вот на компе товарища, хоть 1000раз запускай, всё равно добавит. Вот код проверки на уникальность(за уникальный объект я беру MacAdress)
    Код

    public static void Sql(string ip, string mcAdress, string pcName, DateTime date)
    {

    string connectionString = //connect;

    MySqlConnection connection = new MySqlConnection(connectionString);

    connection.Open();

    string ysl = "SELECT MacAdress FROM таблица";


    MySqlCommand comm = new MySqlCommand(ysl, connection);


    MySqlDataReader reader = comm.ExecuteReader();


    List<string> mac = new List<string>();

    while (reader.Read())
    {
    mac.Add(reader["MacAdress"].ToString());

    }
    reader.Close();



    int count = mac.Count;
    int counter = 0;
    for (int i = 0; i < count; i++)
    {
    if (mac[i] == mcAdress)
    {
    ++counter;
    Console.WriteLine("хуй там");
    Console.ReadLine();


    }
    else if (mac[i] != mcAdress && counter < 1)
    {
    string query = $"INSERT INTO таблица (IP, MacAdress, NameOfPc, Reg_Data) VALUES ('{ip}', '{mcAdress}', '{pcName}', '{date}')";
    MySqlCommand command = new MySqlCommand(query, connection);
    command.ExecuteNonQuery();
    Console.WriteLine("Добавлен!");
    Console.ReadLine();
    }

    }

    //string Mac = comm.ExecuteScalar().ToString();
    //Console.WriteLine(Mac);


    connection.Close();

    }
     
  2. vtlstolyarov
    vtlstolyarov 2 мар 2022 474 8 янв 2022
    Это потому что у тебя логика неправильная - ты бежишь по списку адресов и если не совпадает с твоим то ты вставляешь. А что если ты еще не дошёл до своего в этом списке?

    А вообще если ты в таблице определишь UNIQUE KEY на MacAdress то в MySQL можно использовать "INSERT IGNORE" вместо "INSERT" и тогда тебе вообще не нужны все эти пляски с проверками - просто вставляй всё - вставится только первая запись с таким мак адресом
     
    2 мар 2022 Изменено
    1. Посмотреть предыдущие комментарии (2)
    2. Minin_inactive4471240 Автор темы
      vtlstolyarov, [IMG]
      где тут можно установить эти параметры, а если можно, покажи кодом, как можно реализовать нормальную проверку
    3. vtlstolyarov
      Minin_inactive4471240, Для полей типа TEXT нельзя задать unique constraint, переделай в varchar(17) и пошарься там вроде должна быть опция типа Индекс (я не уверен как она на русском называется - никогда не пользовался)
    4. vtlstolyarov
      Minin_inactive4471240, проверка после этого никакая не нужна, просто выкинь из своего метода всё кроме
      C#
      using (var connection = new MySqlConnection(connectionString))
      {
      connection.Open();

      string query = $"INSERT IGNORE INTO ...";
      var command = new MySqlCommand(query, connection);
      command.ExecuteNonQuery();
      }
  3. vtlstolyarov
    vtlstolyarov 2 мар 2022 474 8 янв 2022
    А еще подумай что произойдет если я назову свой компьютер "', NOW()); DROP TABLE таблица;"
     
Загрузка...
Top