我正在尝试使用C#获取表的最后一行,但它似乎不起作用,这是我的代码:
MySqlConnection cnnGetID = new MySqlConnection(Global.connectionString);
cmd = "SELECT ContactID FROM Contacten ORDER BY ContactID DESC LIMIT 1";
MySqlCommand cmdGetID = new MySqlCommand(cmd, cnnGetID);
cnnGetID.Open();
string contactID = cmdGetID.ExecuteNonQuery().ToString();
MessageBox.Show(contactID);
cnnGetID.Close();
返回的值为-1,而应返回59。
奇怪的是,当我在phpmyadmin中运行此命令时,我得到59。
关于为什么C#没有返回正确的值而是phpmyadmin的任何想法都是?
编辑:问题解决了,应该使用ExecuteScalar()。看起来我已经盯着我的显示器看了太久......
答案 0 :(得分:1)
你应该使用ExecuteScalar
,因为你返回值ExecuteNonQuery
返回受更新删除或插入操作影响的行数
您可以查看此信息以获取更多信息
ExecuteNonQuery
返回受影响的行数。
ExecuteScalar
执行查询,并返回第一行的第一列 查询返回的结果集。其他列或行是 忽略。
有关详细信息,请查看此The MySqlCommand Object
答案 1 :(得分:1)
返回的值为-1,而应返回59。
不,它的行为完全符合IDbCommand.ExecuteNonQuery
的记录:
对于UPDATE,INSERT和DELETE语句,返回值是受命令影响的行数。对于所有其他类型的语句,返回值为-1。
您正在使用SELECT
语句 - 查询。因此,您应该使用ExecuteNonQuery
并迭代结果,而不是执行ExecuteQuery
,或者ExecuteScalar
,因为您知道自己只有一个结果:
string contactID = cmdGetID.ExecuteScalar().ToString();
答案 2 :(得分:1)
您需要使用ExecuteScalar
代替ExecuteNonQuery
。
MySqlConnection cnnGetID = new MySqlConnection(Global.connectionString);
cmd = "SELECT ContactID FROM Contacten ORDER BY ContactID DESC LIMIT 1";
MySqlCommand cmdGetID = new MySqlCommand(cmd, cnnGetID);
cnnGetID.Open();
string contactID = cmdGetID.ExecuteScalar().ToString();
MessageBox.Show(contactID);
cnnGetID.Close();
这可以解决您的问题。
答案 3 :(得分:0)
你可以使用像这样的查询
MySqlConnection cnnGetID = new MySqlConnection(Global.connectionString);
cmd = "SELECT TOP 1 ContactID FROM Contacten ORDER BY ContactID";
MySqlCommand cmdGetID = new MySqlCommand(cmd, cnnGetID);
cnnGetID.Open();
string contactID = cmdGetID.ExecuteNonQuery().ToString();
MessageBox.Show(contactID);
cnnGetID.Close();