如何从DataTable中检索最后一行的值?

16

我在从Data-table中检索最后插入行的值方面遇到了问题。我有一个登录表单,将插入的值为ID(int,自动增加的值),userID(int),logintime(smalldatetime)和logouttime(smalldatetime)的表格。用于登录按钮的代码,因此插入所有值,除了注销时间。

DateTime t1 = DateTime.Now;
objbal2.insertLoginTime(s, t1);

在登出按钮中,我正在更新表格,因此我必须检索最后一行的值。我根据ID值和userID参考来更新表格。 我能使用这个查询获取值吗?但我无法弄清楚如何做到这一点?

SELECT COLUMN FROM TABLE ORDER BY COLUMN DESC

提前感谢您


那么,一个用户登录后,直到上一个用户注销,就不会再有其他用户登录了吗? - Steve
你的问题对我们来说不太清楚... 请简单明了地表达。 - Ronak Patel
@steve。其他用户可以登录,但一旦用户登录,我立即想获取该行的值,以便我可以将相同的值传递给更新查询。 - Cindrella
4个回答

39

如果您必须从最后一行读取值,则

DataRow lastRow = yourTable.Rows[yourTable.Rows.Count-1];

会返回最后一行,您可以从中读取值。

我的第二个猜测是,通过“datatable”,您指的是SQL Server中的表。

然后稍作修改,您的查询也是可以的。

SELECT TOP 1 COLUMN FROM TABLE ORDER BY COLUMN DESC

然而,当我更新数据库时,我收到了这个错误:SqlDateTime 溢出。必须介于 1/1/1753 12:00:00 AM 和 12/31/9999 11:59:59 PM 之间。 - Cindrella
这意味着您的日期时间对象正在获取最小值。 - Ehsan

9
var dt = new DataTable();
dt.AsEnumerable().Last();

dt.AsEnumerable() 返回一个 IEnumerable<DataRow>


1
你可以从会话中获取值,然后根据你的更改更新数据库。
DateTime t2 = DateTime.Now;

DataRow Row = Mylagin_dataTable.Rows.Count-1

Row[0]["LogoutTime"] = t2 ;

如果您的会话中有ID,则使用以下内容:
DateTime t2 = DateTime.Now;

DataRow Row = Mylagin_dataTable.Select("LoginID='"+ HttpContext.Current.Session["loginID"] + "'");

Row[0]["LogoutTime"] = t2 ;

然而,当我更新数据库时,我收到了这个错误:SqlDateTime 溢出。必须在 1/1/1753 12:00:00 AM 和 12/31/9999 11:59:59 PM 之间。 - Cindrella
你在SQL Server中使用什么数据类型?是datetime、datetime2还是smalldatetime?你需要分别赋值。 - MSTdev
1
让我们来看看这个链接:http://stackoverflow.com/questions/11829070/datetime-now-into-smalldatetime 你会得到答案的 :) - MSTdev
你把 DateTime.Now 转换成小日期时间了吗,Cindrella? - MSTdev

0
在应用程序退出事件上执行以下查询,这将完成您的工作:
string _query = string.Format("update top 1 SessionTable set LogOutTime = {0} where UserID = {1} order by ID desc", DateTime.Now, UserID);

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接