从表中选择更大的 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
}

从表中选择更大的 ID

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