[英]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.