簡體   English   中英

從SQL Server CE數據庫的最后一行讀取一個值

[英]Read one value from the last row of a SQL Server CE database

我有一個包含一些列的數據庫,其中一個稱為ID (datatype = int )。
我需要知道最后一行ID的值(對於最后一行,我是指最后創建的ID )。

我試過了,但它給出了運行時錯誤:

string query = "SELECT * FROM Customer WHERE ID = (SELECT MAX(ID) FROM Customer)";
SqlCeCommand comSelect = new SqlCeCommand(query, connection);
SqlCeDataReader rdr = comSelect.ExecuteReader();
int ID = rdr.GetInt32(6);

GetInt32(6)因為ID在第六列)

謝謝大家,對不起我的英語。

PS

客戶是我的桌子,ID按升序設置。 創建的第一行的ID = 0 ,第二個ID = 1依此類推。

我需要知道最后一個ID,因為在創建新客戶時,我想將其ID設置為以前的ID+1

錯誤:

用戶代碼中未處理的System.Data.SqlServerCe.dll中類型'System.Data.SqlServerCe.SqlCeException'的異常

鑒於並發性可能沒有問題,您只需通過ExecuteScalar調用即可獲取最后一個ID

string query ="SELECT MAX(ID) FROM Customer";
SqlCeCommand comSelect = new SqlCeCommand(query, connection);
int ID = (int)comSelect.ExecuteScalar();

ExecuteScalar返回結果集中第一行的第一列。
查詢SELECT MAX(ID)僅返回一行,只有一列。 因此ExecuteScalar非常適合這種情況。 無需使用ExecuteReader

但是,處理自動增量方案的正確方法是使用IDENTITY列該列將在您插入新記錄時自動為您設置下一個值。 在這種情況下,您已將ID列的IDENTITY屬性標記為TRUE,然后將數據插入到表Customer中,而沒有傳遞ID列的任何值。 插入后,您立即檢索數據庫分配給您的ID列的值

偽代碼

string query ="INSERT INTO Customers (Name, Address, .....) VALUES (.....)";
SqlCeCommand comInsert = new SqlCeCommand(query, connection);
comInsert.ExecuteNonQuery();
query ="SELECT @@IDENTITY";
SqlCeCommand comSelect = new SqlCeCommand(query, connection);
int ID = (int)comSelect.ExecuteScalar();

如果要設置Id並且可能讓其他用戶最好保存新數據並通過保存行的代碼從db中獲取Id或整個新對象。 如果您嘗試跟蹤user ids其他用戶可能會添加新項目並弄亂事情。

如果必須從數據庫獲得最后一個,則可以在sql中使用@inserted來添加最后一行。

暫無
暫無

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

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