从表中选择更大的 ID
本文关键字:ID 选择 | 更新日期: 2023-09-27 18:32:41
我正在尝试从表中选择最佳 ID 并插入到变量中(可以是 int 或 long)。我的代码有点工作,但它没有得到它应该的数字。相反,它一直得到 -1。
Ps1 - RXRX 是 ID 列。
Ps3 - 我已经尝试将执行非查询替换为执行阅读器,并且出现以下错误:无法将类型 System.Data.SqlClient.SqlDataReader
隐式转换为int
private int aux;
if(some condition)
{
MessageBox.Show("Should get a positive number in the next messageBox");
cmd.CommandText = "SELECT MAX(RXRX) from tablee";
aux = cmd.ExecuteNonQuery();
MessageBox.Show(aux.ToString()); //Gets -1 all the time
}
怎么了?可悲的是,我不能使用 LAST INSERT ID 命令,因为该人在插入任何数据之前可以进入此 IF。
更新:得到了答案。现在它正在工作,谢谢大家:
if(some condition)
{
MessageBox.Show("Should get a positive number in the next messageBox");
cmd.CommandText = "SELECT MAX(RXRX) from tablee";
aux = Convert.ToInt32(cmd.ExecuteScalar()); //Thanks Joachim Isaksson
MessageBox.Show(auxiliar.ToString()); //Now it works fine
}
ExecuteNonQuery
不会返回从数据库中选择的值。
像这样尝试:
if(some condition)
{
MessageBox.Show("Should get a positive number in the next messageBox");
cmd.CommandText = "SELECT MAX(RXRX) from tablee";
object readedValue= cmd.ExecuteScalar();
if(readedValue != null)
{
aux=(int)readedValue; //Will always get the value
}
MessageBox.Show(aux.ToString());
}
ExecuteScalar
将返回计数的单个值(或 - 技术上 - 结果第一行的第一列),您可以将其转换为 int 并立即使用;
aux = Convert.ToInt32(cmd.ExecuteScalar());
由于 Sql Server 返回一个 int32 作为计数,而 - 例如 - Oracle 返回一个完全不同的类型,因此最安全的路由通常是使用 Convert.ToInt32
来获取值(假设您计算的行数少于 20 亿行)
改用ExecuteScalar()
。这是查询返回单个值时使用的方法。
ExecuteNonQuery() 返回受影响的行数。由于查询不会影响任何行,因此结果-1
。(例如,如果您删除了两行,则结果将为2
)。
若要从 SQL 查询中检索单个结果,请使用 ExecuteScalar()。这将返回一个object
,表示查询结果第一行的第一列。
如果未返回任何结果,则返回值为 null
。
如果返回的值是 SQL NULL
,则结果将为 DbNull.Value
。