簡體   English   中英

Datatable rows.count == 0給出1,盡管表中沒有找到記錄

[英]Datatable rows.count == 0 gives 1 although there not found records in the table

我有一個問題,我不知道為什么會發生!

我試圖在數據庫表內的一列中找到最大值,我使用以下代碼:

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;
}

請問是什么問題?

這是您的查詢:

Select Max(CustomerID) AS MaxID
From TblCustomers

這是一個聚合查詢。 沒有group by聚合查詢總是返回一行-不管是否有任何行匹配。

對於MaxId ,單行返回的值為NULL

我對您要做什么很懷疑。 如果您想要最大的id-如果表為空則沒有行-請執行以下操作:

select c.CustomerID
from TblCustomers c
order by c.CustomerID desc
fetch first 1 row only;

(這使用ANSI / ISO標准語法,因此確切的邏輯可能取決於您的數據庫。)

我的懷疑是您然后想將此ID用於insert -這是一個不好的方法。 幾乎所有數據庫都支持某種自動遞增的列(帶有諸如auto_incrementserialidentity語法元素)。 這是為表中的列分配唯一的遞增ID的正確方法。

如果沒有符合條件的行,則Sql查詢可能返回null。

如果要查找返回的行數,請更改sql查詢以返回計數而不是使用聚合函數。

嘗試使用此方法:從TblCustomers T1中選擇MAX(T1.CustomerID)AS MaxID

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM