Софт добавляет юзера, который открыл софт, в бд. В пхпМайАдмин не разобрался, как можно сделать так, чтобы один и тот же юзер не добавлялся несколько раз. Решил сделать проверку в коде, но ничего не выходит. Но моём компе такое условие работает и меня не добавляет заново в бд, а вот на компе товарища, хоть 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(); } Код 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(); }
Это потому что у тебя логика неправильная - ты бежишь по списку адресов и если не совпадает с твоим то ты вставляешь. А что если ты еще не дошёл до своего в этом списке? А вообще если ты в таблице определишь UNIQUE KEY на MacAdress то в MySQL можно использовать "INSERT IGNORE" вместо "INSERT" и тогда тебе вообще не нужны все эти пляски с проверками - просто вставляй всё - вставится только первая запись с таким мак адресом
vtlstolyarov, где тут можно установить эти параметры, а если можно, покажи кодом, как можно реализовать нормальную проверку
Minin_inactive4471240, Для полей типа TEXT нельзя задать unique constraint, переделай в varchar(17) и пошарься там вроде должна быть опция типа Индекс (я не уверен как она на русском называется - никогда не пользовался)
Minin_inactive4471240, проверка после этого никакая не нужна, просто выкинь из своего метода всё кроме using (var connection = new MySqlConnection(connectionString)) { connection.Open(); string query = $"INSERT IGNORE INTO ..."; var command = new MySqlCommand(query, connection); command.ExecuteNonQuery(); } C# using (var connection = new MySqlConnection(connectionString)) { connection.Open(); string query = $"INSERT IGNORE INTO ..."; var command = new MySqlCommand(query, connection); command.ExecuteNonQuery(); }