[英]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_increment
, serial
或identity
語法元素)。 這是為表中的列分配唯一的遞增ID的正確方法。
如果沒有符合條件的行,則Sql查詢可能返回null。
如果要查找返回的行數,請更改sql查詢以返回計數而不是使用聚合函數。
嘗試使用此方法:從TblCustomers T1中選擇MAX(T1.CustomerID)AS MaxID
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.