【问题标题】:Fetching MAX id from SQL Server database causes exception从 SQL Server 数据库获取 MAX id 导致异常
【发布时间】:2017-11-01 09:30:43
【问题描述】:

我正在使用此代码从表 PatientInfo 中获取最大 ID

private void LoadID()
{
    string query = "SELECT MAX(ID) FROM PatientInfo";

    using (SqlConnection cn = new SqlConnection(constr))
    using (SqlCommand cmd = new SqlCommand(query, cn))
    {
        cn.Open();

        SqlDataReader reader = cmd.ExecuteReader();

        if (reader.HasRows)
        {
            while (reader.Read())
            {
                txtid.Text = reader["ID"].ToString();
            }
        }
        else
        {
            // other code
        }

        reader.Close();
        cn.Close();
    }
}

因为我必须先检查是否存在任何记录,所以我使用reader.HasRows。之后,代码应该获取 ID 并将其放入文本框。但事实并非如此。它正在抛出IndexOutOfRangeException。我不知道为什么。

在我的数据库中,我插入了一条记录。但它仍然在两种条件下给出相同的结果(1.当我在表中没有数据时和 2.当我在表中有数据时)

其次,我正在尝试在表格中手动输入数据,但它什么也没做,并说出以下内容

因此,没有添加任何数据

【问题讨论】:

  • 请添加此问题中使用的编程语言,我认为它是 C#
  • 使用 ExectueScalar 可以大大简化您的代码。
  • 哎呀。是的,它的 c#
  • @Carra。如何使用 ExecuteScalar 检查数据是否存在?
  • @user3837889:你没有——如果你的表中绝对没有数据,那么.ExecuteScalar() 将返回NULL——检查一下就完成了

标签: c# sql-server exception reader


【解决方案1】:

ID 不是您查询中的字段,您必须为您的 MAX 起别名

string query = "SELECT MAX(ID) AS ID FROM PatientInfo";

【讨论】:

  • 你能告诉我为什么我不能手动编辑表格中的数据
  • @user3837889 我不使用该工具,纯 SQL 是您的朋友,但我敢打赌 SSMS 正在根据表验证您的数据,因此请检查空值或数据类型
  • 好的。感谢您的帮助
猜你喜欢
  • 1970-01-01
  • 2012-03-13
  • 1970-01-01
  • 2010-09-13
  • 2012-03-06
  • 1970-01-01
  • 1970-01-01
  • 2014-10-25
  • 1970-01-01
相关资源
最近更新 更多