1

我正在将 Mysql 数据库客户端更改为 System.data.sqlclient 中的 mysql.data.dll 之一。

但在使用 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();

然后我是否得到了我刚刚插入但使用相同代码和来自 MySql.Data.MySqlClient.MySqlCommand 的 ExecuteScalar() 的 itemId 我得到一个空异常。那么这如何与 MySqlCommand 一起工作?

命令来自于此:

        private MySql.Data.MySqlClient.MySqlCommand Command;

由于史蒂夫继承了固定代码,因此修复了它。

   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;
        }
4

1 回答 1

0

MySql 使用函数LAST_INSERT_ID返回最后插入的 id

所以你的命令文本应该改成这样

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

但是,您的代码遇到了一个称为 SQL 注入的严重问题。传递一个连接其他字符串的字符串会使您的代码暴露在一个非常容易使用的安全漏洞中。

阅读SQL 注入以及如何使用参数化查询
SQL 注入短篇小说

于 2014-08-06T20:15:48.577 回答