C# 如何用C语言获取sqlserver的DateTime

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

我想以这种格式获取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 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);
        }