【问题标题】:Why this query returning -1?为什么这个查询返回-1?
【发布时间】:2014-05-07 03:06:48
【问题描述】:

我正在尝试使用此代码获取表类别的最大 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。请指导我这是怎么回事?

【问题讨论】:

  • ExecuteNonQuery.. 如.. 不查询,只做一些 SQL。如果你想退货.. 使用ExecuteScalar.
  • @SimonWhitehead 听起来不错。让它成为一个答案。这是合法的。
  • ExecuteNonQuery() 的可能重复项

标签: c# sql winforms


【解决方案1】:

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

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

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

【讨论】:

    【解决方案2】:

    ExecuteScaler 是您的解决方案

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

    所以修改你的代码为

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

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

    你会从查询中得到预期的值

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2021-08-13
      • 1970-01-01
      相关资源
      最近更新 更多