我试图使用此代码获取表类别的最大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。请指导我出了什么问题?
答案 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
并且您将获得查询所需的值