簡體   English   中英

ID為GUID時如何從數據庫獲取最新行

[英]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() + "'"; 

在數據庫中創建一個名為CreateDateUpdateDate的新列。

當您在表中進行插入時,將UpdateDateCreateDate設置為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.

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