Загрузка...

Checking for uniqueness and adding to the database

Thread in C# created by Minin_inactive4471240 Mar 2, 2022. 348 views

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

    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 Mar 2, 2022 468 Jan 8, 2022
    Это потому что у тебя логика неправильная - ты бежишь по списку адресов и если не совпадает с твоим то ты вставляешь. А что если ты еще не дошёл до своего в этом списке?

    А вообще если ты в таблице определишь UNIQUE KEY на MacAdress то в MySQL можно использовать "INSERT IGNORE" вместо "INSERT" и тогда тебе вообще не нужны все эти пляски с проверками - просто вставляй всё - вставится только первая запись с таким мак адресом
     
    1. View previous comments (3)
    2. vtlstolyarov
      Minin_inactive4471240, Для полей типа TEXT нельзя задать unique constraint, переделай в varchar(17) и пошарься там вроде должна быть опция типа Индекс (я не уверен как она на русском называется - никогда не пользовался)
    3. 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 Mar 2, 2022 468 Jan 8, 2022
    А еще подумай что произойдет если я назову свой компьютер "', NOW()); DROP TABLE таблица;"
     
Top
Loading...