我正在将我的 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 但使用相同的代码和来自 MySql.Data.MySqlClient.MySqlCommand 的 ExecuteScalar() 我得到一个空异常(exception)吗? 那么这如何与 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;
}
最佳答案
MySql 使用函数LAST_INSERT_ID 返回最后插入的id
所以你的命令文本应该改成这样
dbClient.setQuery(@"INSERT INTO items (base_item, user_id) VALUES (....);
SELECT LAST_INSERT_ID()");
Id = (uint)dbClient.insertQuery();
但是您的代码存在一个称为 SQL 注入(inject)的严重问题。传递一个由其他字符串拼接而成的字符串会使您的代码暴露于一个非常容易使用的安全漏洞。
了解 SQL Injection以及如何使用 Parameterized query
SQL Injection short story
关于c# - 获取行的ID c# Mysql,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/25169102/