当ID为GUID时,如何从数据库中获取最新的行



我在尝试从SQL表中提取最新的行时遇到了一些问题。用户可以填写费用表,ASP.NET文本框中的数据会被发送到数据库,但当用户提交更多数据时,我无法提取最新数据并用该数据填充文本框。我使用GUID作为ID字段。我已将userID存储在Session["New"]中。

这是我的SQL语句:

string str = "select * from CashFlow where userID='" + Session["New"].ToString() + "'"; 

在数据库中创建一个名为CreateDateUpdateDate的新列。

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

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

select * from CashFlow order by CreateDate desc

以及上次更新的

select * from CashFlow order by UpdateDate desc

尝试使用NEWSEQUENTIALID()生成GUID,然后当ID为GUID时,您可以从数据库中获取最后一行。因为它创建的GUID大于自Windows启动以来此函数以前在指定计算机上生成的任何GUID。

这是一个例子。CREATE TABLE myTable(ColumnA唯一标识符DEFAULT NEWSEQUENTIALID());

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

修复-在记录中添加某种时间戳字段,以便能够在该字段上"排序依据"。例如,您可以考虑添加"autoincrement"字段(您必须将其添加到非主键上的PK-mysql auto-inrement中)。


附带说明-请使用参数化查询,而不是使用字符串串联构建查询-使用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相同。

因此,只需使用内存中的一个,而不是使用数据库查询您所知道的内容。

您可以在排序和检查用户名后选择前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

相关内容

  • 没有找到相关文章

最新更新