为什么这个查询返回-1?

时间:2014-05-07 03:06:49

标签: c# sql winforms

我试图使用此代码获取表类别的最大ID

string maxid = "";
string query = "SELECT MAX(Cat_ID) + 1 FROM Category";

SqlConnection conn = new SqlConnection(ConfigurationManager.ConnectionStrings["JokerCafe"].ConnectionString);

try
{
     conn.Open();
     SqlCommand cmd = new SqlCommand(query, conn);
     maxid = cmd.ExecuteNonQuery().ToString();
}
catch (Exception ex)
{
     MessageBox.Show(ex.Message);
}
finally
{
     conn.Close();
}

return maxid;

我在sql中运行此查询它返回精确值但是当尝试从代码执行它时它返回-1。请指导我出了什么问题?

2 个答案:

答案 0 :(得分:4)

ExecuteNonQuery()将返回受影响的行数。例如,如果您尝试通过ExecuteNonQuery()方法执行任何更新语句或删除语句,则它将返回受影响的行数。

但是,如果您想从特定字段中获取值,则需要尝试ExecuteScalar()方法。它将返回Object类型值。使用此方法,您只能获取单个值记录。

object val = command.ExecuteScalar();
if (val != null)
{
   //Do your stuff here.
}

答案 1 :(得分:2)

ExecuteScaler是您的解决方案

它执行查询,并返回查询返回的结果集中第一行的第一列。其他列或行将被忽略。

所以请将代码修改为

maxid = cmd.ExecuteScalar().ToString();

maxid = cmd.ExecuteScalar() as string; //to be safe side if return value is null

并且您将获得查询所需的值