C# 如何用C语言获取sqlserver的DateTime
我想以这种格式获取SQL Server的日期时间2020-04-29 08:31:50.813 这是我的代码:C# 如何用C语言获取sqlserver的DateTime,c#,sql-server,C#,Sql Server,我想以这种格式获取SQL Server的日期时间2020-04-29 08:31:50.813 这是我的代码: [WebMethod] public void getDTOServer() { string sqlStr = string.Format(@"use [{0}] SELECT GETDATE() AS 'DTOServer' ", DatabaseName); SqlCommand c
[WebMethod]
public void getDTOServer()
{
string sqlStr = string.Format(@"use [{0}]
SELECT GETDATE() AS 'DTOServer'
", DatabaseName);
SqlCommand cmd = new SqlCommand(sqlStr);
string DT = Man.getSqlDataset(cmd).Tables[0].Rows[0][0].ToString();
Context.Response.Clear();
Context.Response.Flush();
Context.Response.Write(DT);
}
问题是,当我在SQL Server中运行这个查询时,选择GETDATE作为'DTOServer',我得到了正确的输出,但是C给了我这样的输出:20年4月29日上午8:31:51
我想要的是2020-04-29 08:31:50.813。您可以自定义适当DateTime对象的ToString方法
刚找到解决办法。将DateTime转换为VARCHAR 像这样:
[WebMethod]
public void getDTOServer()
{
string sqlStr = string.Format(@"use [{0}]
SELECT REPLACE(CONVERT(VARCHAR, GETDATE(), 126), 'T', ' ') AS 'DTOServer'
", DatabaseName);
SqlCommand cmd = new SqlCommand(sqlStr);
string DT = Man.getSqlDataset(cmd).Tables[0].Rows[0][0].ToString();
Context.Response.Clear();
Context.Response.Flush();
Context.Response.Write(DT);
}
问题是C正在将其转换为本地格式,因为数据类型是DateTime我不知道Man是什么,但您可以也应该只使用ExecuteScalar,它返回object,并强制转换为DateTime。然后,如果您需要字符串,请使用ToString重载,该重载采用的格式如Nithin的回答所示。@ZoharPeled Man是我的dll SQL管理器,它处理所有连接打开、关闭等操作,比SQL Server更适合用C进行格式化。不,这不是问题所在。问题是,当您使用DateTime时,您正在处理字符串。你看,不是在SQL Server中,也不是在c中,本地/通用与时区有关,而不是字符串表示格式。不要乱搞字符串,而是从SQLServer的DateTime填充c的DateTime结构。另外,您不需要use语句-GETDATE在服务器级别工作,它与您连接到的数据库无关。
[WebMethod]
public void getDTOServer()
{
string sqlStr = string.Format(@"use [{0}]
SELECT REPLACE(CONVERT(VARCHAR, GETDATE(), 126), 'T', ' ') AS 'DTOServer'
", DatabaseName);
SqlCommand cmd = new SqlCommand(sqlStr);
string DT = Man.getSqlDataset(cmd).Tables[0].Rows[0][0].ToString();
Context.Response.Clear();
Context.Response.Flush();
Context.Response.Write(DT);
}