C #MySQL按顺序返回-1

时间:2017-04-08 08:50:32

标签: c# mysql

我正在尝试使用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()。看起来我已经盯着我的显示器看了太久......

4 个答案:

答案 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();