为了账号安全,请及时绑定邮箱和手机立即绑定

Datatable rows.count == 0 给出 1 尽管在表中没有找到记录

Datatable rows.count == 0 给出 1 尽管在表中没有找到记录

C#
汪汪一只猫 2022-10-23 16:05:57
我有一个问题,我不知道为什么会这样!我试图在数据库表内的列中找到最大值,我使用以下代码:private void FrmCustomer_New_Load(object sender, EventArgs e){    int NewID;               DataTable _Dt = CusVar.GetCustomersIDs();    if (_Dt.Rows.Count == 0)    {        NewID = 1;        this.txt1.Text = NewID.ToString();        DataRow _Row = CusVar.GetCustomersIDs().Rows[0];        MessageBox.Show(Convert.ToString(_Dt.Rows[0]["MaxID"]));    }}代码正在运行,但它给出了 1 虽然表中没有记录?我使用 C# 和 Access 数据库 ACCDB。我在 Cls_Customers 中使用这个函数:public DataTable GetCustomersIDs(){    DAL.DataAccessLayer DAL = new DAL.DataAccessLayer();    DataTable Dt = new DataTable();    Dt = DAL.DataSelect("Select Max(CustomerID) AS MaxID From TblCustomers", null);    DAL.CloseConn();    return Dt;}请问这是什么问题?
查看完整描述

3 回答

?
尚方宝剑之说

TA贡献1788条经验 获得超4个赞

这是您的查询:


Select Max(CustomerID) AS MaxID

From TblCustomers

这是一个聚合查询。no 的聚合查询group by总是返回一行——不管是否有任何行匹配。


单行中返回的值是NULLfor MaxId。


我非常怀疑你想做什么。如果您想要最大 id - 如果表为空则没有行 - 然后执行:


select c.CustomerID

from TblCustomers c

order by c.CustomerID desc

fetch first 1 row only;

(这使用 ANSI/ISO 标准语法,因此确切的逻辑可能取决于您的数据库。)


我的怀疑是,然后您想将此 id 用于insert- 这是一种不好的方法。几乎所有数据库都支持某种类型的自动递增列(使用语法元素,例如auto_increment、serial或identity)。这是为表中的列分配唯一递增 id 的正确方法。


查看完整回答
反对 回复 2022-10-23
?
胡说叔叔

TA贡献1804条经验 获得超8个赞

试试这个: SELECT MAX(T1.CustomerID) AS MaxID From TblCustomers T1



查看完整回答
反对 回复 2022-10-23
?
潇湘沐

TA贡献1816条经验 获得超6个赞

如果没有符合条件的行,则 Sql 查询可能会返回 null。

如果目的是查找返回的行数。更改 sql 查询以返回计数,而不是使用聚合函数。


查看完整回答
反对 回复 2022-10-23
  • 3 回答
  • 0 关注
  • 118 浏览

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信