Получение идентификатора строки C# Mysql

Я изменял мой клиент базы данных Mysql на файл mysql.data.dll из System.data.sqlclient.

Но раньше с sqlclient я мог сделать это:

 public long insertQuery()
    {
        long lastInsertedId = 0L;
        try
        {
            lastInsertedId = (long)command.ExecuteScalar();
        }
        catch (Exception exception)
        {
            Exeption.WriteMySQLError(exception.ToString());
        }
        return lastInsertedId;
    }
dbClient.setQuery("INSERT INTO items (base_item, user_id) VALUES (" + BaseItem + ", " + UserId + ")");
                    Id = (uint)dbClient.insertQuery();

и затем я получил itemId, который я только что вставил, но с тем же кодом и с ExecuteScalar() из MySql.Data.MySqlClient.MySqlCommand Я получаю нулевое исключение. так как это работает с MySqlCommand?

Команда исходит из этого:

        private MySql.Data.MySqlClient.MySqlCommand Command;

Исправил это благодаря Стиву Heres фиксированный код.

   public long insertQuery()
        {
            Command.CommandText += "; SELECT LAST_INSERT_ID()";
            long lastInsertedId = 0L;
            try
            {
                lastInsertedId = Convert.ToInt32(Command.ExecuteScalar().ToString());
            }
            catch (Exception exception)
            {
                Console.WriteLine("Nou er is een error in insertquery! :" + exception.ToString());
            }   
            return lastInsertedId;
        }

1 ответ

Решение

MySql возвращает последний вставленный идентификатор, используя функцию LAST_INSERT_ID

Таким образом, текст вашей команды должен быть изменен на что-то вроде этого

 dbClient.setQuery(@"INSERT INTO items (base_item, user_id) VALUES (....);
                     SELECT LAST_INSERT_ID()");
 Id = (uint)dbClient.insertQuery();

Однако ваш код страдает от серьезной проблемы, называемой SQL-инъекцией. Передача сформированных строк, объединяющих фрагменты других строк, делает ваш код уязвимым с точки зрения безопасности и очень простым в использовании.

Прочитайте об SQL-инъекции и о том, как использовать параметризованный запрос.
Краткий рассказ о SQL-инъекциях

Другие вопросы по тегам