如何从 DataTable 中的最后一行检索值?
Posted
技术标签:
【中文标题】如何从 DataTable 中的最后一行检索值?【英文标题】:How to retrieve values from the last row in a DataTable? 【发布时间】:2013-09-02 22:29:21 【问题描述】:我在从数据表中最后插入的行中检索值时遇到问题。我有一个登录表单,这些值将插入到具有 ID(int,自动递增值)、userID(int)、logintime(smalldatetime)和 logouttime(smalldatetime)的表中。用于登录按钮内部的代码,因此插入了除注销时间之外的所有值
DateTime t1 = DateTime.Now;
objbal2.insertLoginTime(s, t1);
在注销按钮中我正在更新表格,所以我必须检索最后一行的值。我正在参考 ID 值和用户 ID 更新表。 我可以使用此查询获取值吗?但我不知道怎么做?
SELECT COLUMN FROM TABLE ORDER BY COLUMN DESC
提前致谢
【问题讨论】:
那么,在一个用户登录后,直到前一个用户退出,就没有更多的登录了? 您的问题我们不清楚...请通俗易懂 @steve。其他用户可以登录。bt 一旦用户登录我立即想要获取该行的值。这样我就可以将相同的值传递给更新查询 【参考方案1】:如果你必须读取最后一行的值,那么
DataRow lastRow = yourTable.Rows[yourTable.Rows.Count-1];
将返回最后一行。你可以从中读取值。
我的第二个猜测是,通过 datatable 您指的是 sql server 中的表。
然后稍作修改,您的查询也可以。
SELECT TOP 1 COLUMN FROM TABLE ORDER BY COLUMN DESC
【讨论】:
然而,当我更新数据库时,我收到此错误:SqlDateTime 溢出。必须在 1753 年 1 月 1 日凌晨 12:00:00 到 9999 年 12 月 31 日晚上 11:59:59 之间。 这意味着您的日期时间对象正在获取最小值【参考方案2】:var dt = new DataTable();
dt.AsEnumerable().Last();
dt.AsEnumerable()
返回一个IEnumerable<DataRow>
【讨论】:
【参考方案3】:您可以从会话中获取值,然后根据您的更改更新数据库
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 溢出。必须在 1753 年 1 月 1 日凌晨 12:00:00 到 9999 年 12 月 31 日晚上 11:59:59 之间。 你在 sqlserver 中的数据类型是什么? datetime 、 datetime 2 或 smalldatetime。您需要分配为相应的值 让我们检查***.com/questions/11829070/…你会得到答案:) 您是否将 DateTime.Now 转换为小日期时间 Cindrella ??【参考方案4】:对应用程序退出事件执行以下查询,这将完成您的工作
string _query = string.Format("update top 1 SessionTable set LogOutTime = 0 where UserID = 1 order by ID desc", DateTime.Now, UserID);
【讨论】:
以上是关于如何从 DataTable 中的最后一行检索值?的主要内容,如果未能解决你的问题,请参考以下文章
如何从 DataGridView 中的一行获取 DataRow