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

我有一个问题,我不知道为什么会这样!


我试图在数据库表内的列中找到最大值,我使用以下代码:


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;

}

请问这是什么问题?


汪汪一只猫
浏览 119回答 3
3回答

尚方宝剑之说

这是您的查询:Select Max(CustomerID) AS MaxIDFrom TblCustomers这是一个聚合查询。no 的聚合查询group by总是返回一行——不管是否有任何行匹配。单行中返回的值是NULLfor MaxId。我非常怀疑你想做什么。如果您想要最大 id - 如果表为空则没有行 - 然后执行:select c.CustomerIDfrom TblCustomers corder by c.CustomerID descfetch first 1 row only;(这使用 ANSI/ISO 标准语法,因此确切的逻辑可能取决于您的数据库。)我的怀疑是,然后您想将此 id 用于insert- 这是一种不好的方法。几乎所有数据库都支持某种类型的自动递增列(使用语法元素,例如auto_increment、serial或identity)。这是为表中的列分配唯一递增 id 的正确方法。

胡说叔叔

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

潇湘沐

如果没有符合条件的行,则 Sql 查询可能会返回 null。如果目的是查找返回的行数。更改 sql 查询以返回计数,而不是使用聚合函数。
打开App,查看更多内容
随时随地看视频慕课网APP