C# 如何获取SQL Server datetime值,因为它在C中是24小时的#

C# 如何获取SQL Server datetime值,因为它在C中是24小时的#,c#,sql,sql-server,datetime,C#,Sql,Sql Server,Datetime,我正在VS2010 c#中开发一个应用程序,从SQLServer获取单行数据并将其插入MySQL 我有一个列名为Date\u Time的表,包含24小时内的日期和时间。格式如下图所示 获取代码如下所示 SqlCommand cmd = new SqlCommand("SELECT TOP (1) s_name, s_city, s_address, s_added_date, s_added_by FROM tblAQI ORDER BY s_added_date DESC", SSCon);

我正在VS2010 c#中开发一个应用程序,从SQLServer获取单行数据并将其插入MySQL

我有一个列名为Date\u Time的表,包含24小时内的日期和时间。格式如下图所示

获取代码如下所示

SqlCommand cmd = new SqlCommand("SELECT TOP (1) s_name, s_city, s_address, s_added_date, s_added_by FROM tblAQI ORDER BY s_added_date DESC", SSCon);
    SqlDataReader dr = cmd.ExecuteReader();
    while (dr.Read())
    {
        s_name = (dr["s_name"].ToString());
        s_city = (dr["s_city"].ToString());
        s_address = (dr["s_address"].ToString());
        s_added_date = (dr["s_added_date"].ToString());
        s_added_by = (dr["s_added_by"].ToString());
    }
当我打印s_added_date的值时,它会给我

我的问题是为什么会这样,我怎么能在24小时内得到这个时间。格式

请帮助解决它

提前感谢。

写下以下行:

s_added_date = (dr["s_added_date"].ToString());

您的代码将是:

SqlCommand cmd = new SqlCommand("SELECT TOP (1) s_name, s_city, s_address, s_added_date, s_added_by FROM tblAQI ORDER BY s_added_date DESC", SSCon);
    SqlDataReader dr = cmd.ExecuteReader();
    while (dr.Read())
    {
        s_name = (dr["s_name"].ToString());
        s_city = (dr["s_city"].ToString());
        s_address = (dr["s_address"].ToString());
        s_added_date = (dr["s_added_date"].ToString("dd/MM/yyyy hh:mm:ss"));
        s_added_by = (dr["s_added_by"].ToString());
    }
如果ypu希望其为2013年11月11日10:23:25格式:

 s_added_date = (dr["s_added_date"].ToString("dd-MMM-yyyy hh:mm:ss"));
我有一个列名为Date\u Time的表,包含24小时内的日期和时间。格式

不,您有一个列类型为
DateTime
的表。这些值本身没有任何格式-它们只是碰巧以一种方式显示在SQL结果查看器中,这与默认情况下.NET格式的显示方式不同

理解这里的数据只是日期和时间,而不是格式,这一点非常重要

要以特定方式对其进行格式化,请将其强制转换为
DateTime
,然后使用
ToString
重载,该重载允许您指定格式:

DateTime addedDate = (DateTime) sr["s_added_date"];
string addedDateText = addedDate.ToString("dd-MMM-yyyy HH:mm:ss",
                                          CultureInfo.InvariantCulture);
有关更多信息,请参阅和上的MSDN文章

但是,如果目的只是将其插入MySQL,则根本不应将其转换为字符串。只需将参数值作为参数直接传递到相应的MySQL命令中。添加字符串转换只会增加混乱。尽可能将数据保持为“自然”类型—在本例中为
DateTime

尝试以下方法

SqlCommand cmd = new SqlCommand("SELECT TOP (1) s_name, s_city, s_address, DATE_FORMAT(s_added_date,'%T'), s_added_by FROM tblAQI ORDER BY s_added_date DESC", SSCon);

 SqlDataReader dr = cmd.ExecuteReader();
    while (dr.Read())
    {
        s_name = (dr["s_name"].ToString());
        s_city = (dr["s_city"].ToString());
        s_address = (dr["s_address"].ToString());
        s_added_date = (dr["s_added_date"].ToString());
        s_added_by = (dr["s_added_by"].ToString());
    }

对此已经有了答案:,可能是@JonSkeet的副本,但在这种情况下,我们不需要写hh?因为我只参考了你的答案:我不明白你在问什么
hh
是12小时,
hh
是24小时。OP需要24小时格式,因此他应该有
HH
。。。虽然我认为他根本不应该设置值的格式。@JonSkeet他有24小时格式,并且希望是12小时格式,这是我从问题中了解到的,我建议你重新阅读这个问题。他在SQL Server中看到了24小时格式(某种形式),但在他的应用程序中看到了12小时格式:“当我打印s_added_date的值时,它会给我s_added_date的值,我的问题是为什么会显示这样的值,以及我如何在24小时格式中获得这个时间。”@JonSkeet ohh,是的,对不起,这完全是我在阅读和理解问题时的错误,thanx a lotif对格式检查此链接有问题
SqlCommand cmd = new SqlCommand("SELECT TOP (1) s_name, s_city, s_address, DATE_FORMAT(s_added_date,'%T'), s_added_by FROM tblAQI ORDER BY s_added_date DESC", SSCon);

 SqlDataReader dr = cmd.ExecuteReader();
    while (dr.Read())
    {
        s_name = (dr["s_name"].ToString());
        s_city = (dr["s_city"].ToString());
        s_address = (dr["s_address"].ToString());
        s_added_date = (dr["s_added_date"].ToString());
        s_added_by = (dr["s_added_by"].ToString());
    }