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 的新列。

当您在 table 中进行 Insert 时,将 UpdateDateCreateDate 设置为 DateTime.Now。当您对 table 中的行进行 Update 时,只需将 UpdateDate 设置为 DateTime.Now

之后您将需要这样的查询,对于最后创建的:

select * from CashFlow order by CreateDate desc

最后更新

select * from CashFlow order by UpdateDate desc

数据库通常没有 "latest" 的概念,所以如果您的 table 不包含某种时间戳,您就无法真正获得最新记录。

修复 - 向记录添加某种时间戳字段,以便能够 "order by" 在该字段上。例如,您可以考虑添加 "autoincrement" 字段(您必须将其添加到 PK - mysql auto-increment on a non-primary key)。


旁注 - 请使用参数化查询,而不是使用字符串连接构造查询 - Parameterized Query for MySQL with C#

近似样本(假设您有 TimeStamp 字段):

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。

这是例子。 CREATE TABLE myTable (ColumnA uniqueidentifier DEFAULT NEWSEQUENTIALID());

排序并检查用户名后,您可以select排在前 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