如何在LINQ查询中使用SQL服务器时钟
本文关键字:SQL 服务器 时钟 LINQ 查询 | 更新日期: 2023-09-27 18:12:10
我正在编写一个具有"check in"功能的应用程序-本质上是一个系统托盘应用程序,通过写入SQL数据库每20秒检查一次。
然后我有第二个应用程序检查这个表,看看客户端是否已经登记,并执行一个操作,如果客户端没有登记60秒。
我需要确保写入sql数据库的时间是本地服务器时间,而不是客户端时间-否则我会有同步问题。
我正在使用Linq-to-SQL -我怎么能做到这一点?
实际上,根据一般经验,您也不应该使用服务器的本地时间,而应该使用UTC时间(协调世界时间)。
在Linq to Sql中,您可以使用SqlFunctions.GetUtcDate()
来映射到Sql Server中的GETUTCDATE()
。
编写一个返回GetDate()
的用户定义函数并将其添加到dbml文件
试试这个:
[Function(Name="GetDate", IsComposable=true)]
public DateTime GetSystemDate()
{
MethodInfo mi = MethodBase.GetCurrentMethod() as MethodInfo;
return (DateTime)this.ExecuteMethodCall(this, mi, new object[]{}).ReturnValue;
}
编辑:这需要成为你的DataContext类的一部分
此解决方案适用于任何。net版本:它应该比其他解决方案更有利于速度和网络流量。
1)在SQL server中创建函数:CREATE FUNCTION [dbo].[GetSQLServerDate]
()
RETURNS datetime
AS
BEGIN
DECLARE @Result datetime
SELECT @Result = getdate()
RETURN @Result
END
GO
2)将函数添加到LINQ to SQL图的存储过程部分
3)从代码中调用函数THEDBDataContext DBConn = new THEDBDataContext ();
DateTime dt = (DateTime) DBConn.GetSQLServerDate();
Acaz Souza的答案有效,但它需要成为数据上下文的一部分。要将其置于特定数据上下文类之外(这可能更易于重用),请尝试将其作为扩展方法:
public static DateTime GetSystemDate(this DataContext db)
{
return db.ExecuteQuery<DateTime>("SELECT GETDATE()").Single();
}