这是一个做C/S的管理软件开发时经常被忽略的问题,客户端的时间与服务器的时间如果有偏差,数据统计、报表等等肯定会有“意外”的情况发生。
意图很简单:从数据库服务器获取到时间,根据这个时间修改当前客户端电脑时间。
用Sql的函数getdate(),是比较容易的。
我们是基于dotnet4.0、EntityFramework开发软件,所以希望用ESQL的方式获取数据库服务器的时间,但昨天折腾了半天,还没搞定。
如果有哪位同学已经解决了这个问题,希望能指点一下!
暂时解决,之所以说是暂时,是因为并没有用Esql的方式,而是用T-Sql的方式。
以下是我的过程:
System.Data.EntityClient.EntityConnection 这个是实体概念模型与数据源的连接,继承自DbConnection
在这个连接下CreateCommand(),就需要写Esql语句,我的语句是"SELECT VALUE CurrentDateTime()",却是语法错误。翻遍了手册和网络查询,没有任何有用的结果。
但在这个连接对象下有一个属性StoreConnection,返回的是Sql方式的连接,在这个下面CreateCommand(),可以写T-Sql语句,我的语句是"SELECT getdate()",运行成功。
以上是程序代码例子:
// 与数据库服务器的时间进行同步 System.Data.EntityClient.EntityConnection conn = (System.Data.EntityClient.EntityConnection)Blemployee.myData.Connection; IDbConnection conn0 = conn.StoreConnection; IDbCommand comm = conn0.CreateCommand(); // comm.CommandText = "SELECT VALUE CurrentDateTime()"; comm.CommandText = " SELECT getdate() " ; comm.CommandType = CommandType.Text; if (comm.Connection.State != ConnectionState.Open) comm.Connection.Open(); object tt = comm.ExecuteScalar(); DateTime sqlDT = Convert.ToDateTime(tt); SetLocalTime(sqlDT); // 设置本机时间