![](/img/trans.png)
[英]How to get all Guid properties and their values with the name "Id" from class?
[英]How to get the latest row from database when ID is GUID
我在嘗試從SQL表中提取最新行時遇到了一些麻煩。 用戶可以填寫費用表格,然后將來自ASP.NET文本框的數據發送到數據庫,但是當用戶提交更多數據時,我無法提取最新數據並用該數據填充文本框。 我正在使用GUID作為ID字段。 我已經將userID
存儲在Session["New"]
。
這是我的SQL語句:
string str = "select * from CashFlow where userID='" + Session["New"].ToString() + "'";
在數據庫中創建一個名為CreateDate
和UpdateDate
的新列。
當您在表中進行插入時,將UpdateDate
和CreateDate
設置為DateTime.Now
。 當您對表中的行進行更新時 ,只需將UpdateDate
設置為DateTime.Now
之后,您將需要這樣的查詢,以最后創建一個:
select * from CashFlow order by CreateDate desc
最后更新
select * from CashFlow order by UpdateDate desc
數據庫通常沒有“最新”的概念,因此,如果您的表不包含某種時間戳,則您將無法真正獲得最新記錄。
修復-向記錄添加某種時間戳字段,以便能夠對該字段進行“排序”。 例如,您可以考慮添加“ autoincrement”字段(必須將其添加到PK- 非主鍵上的mysql auto-increment )。
旁注-請使用參數化查詢,而不是使用字符串連接構造查詢- 使用C#的MySQL參數化查詢
近似樣本(假設您具有“時間戳記”字段):
var selectCommand = "SELECT * FROM CashFlow WHERE userID=@userId ORDER BY TimeStamp";
var cmd = new MySqlCommand(readCommand);
cmd.Parameters.AddWithValue("@userId", Session["New"].ToString());
聽起來您的整個問題都倒退了。 使用GUID的要點是ID由用戶(或本例中的應用程序)生成。
假定GUID由應用程序生成,則最后一個ID與上次生成的ID相同。
因此,只需在內存中使用一個,而不使用數據庫查詢來了解您所知道的內容。
嘗試使用NEWSEQUENTIALID()生成您的GUID,然后當ID為GUID時,可以從數據庫獲取最新行。 因為它創建的GUID大於自Windows啟動以來在指定計算機上此功能先前生成的任何GUID。
這是例子。 創建表myTable(ColumnA uniqueidentifier DEFAULT NEWSEQUENTIALID());
您可以在排序並檢查用戶名后選擇前1行
string str = "SELECT TOP 1 OrderNr FROM Orders Where CustomerName = 'Maria' ORDER BY OrderNr DESC;";
只需對字符串進行一些調整即可滿足您的需求,但這應該可以使客戶說出最后一行。
insert into CashFlow (Column names)
OUTPUT inserted.userID
values
(inserted values in Column )
store Return value in variable For fetch Latest Record By userID
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.