Warning: file_get_contents(/data/phpspider/zhask/data//catemap/7/sql-server/24.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 如何从SQLServer数据库中的DateTime列获取到DataGridView列的时间?_C#_Sql Server_Winforms_Datagridview - Fatal编程技术网

C# 如何从SQLServer数据库中的DateTime列获取到DataGridView列的时间?

C# 如何从SQLServer数据库中的DateTime列获取到DataGridView列的时间?,c#,sql-server,winforms,datagridview,C#,Sql Server,Winforms,Datagridview,这是我的代码的一部分,我从数据库中的IncomingLog表中检索所有列,并将其保存到Winform应用程序中的DGV。我已经修复了日期列,但是我无法修复我的DataGridView的时间列(这个:“HH:mm:ss tt”不起作用,仍然显示时间(上午7:26,这是正确的)和日期(1900年1月1日,这是不正确的)) 有人能帮我吗?谢谢 DataTable dt; _db.conn(); _db.cmd.CommandText = "SELECT * FROM IncomingLog";

这是我的代码的一部分,我从数据库中的
IncomingLog
表中检索所有列,并将其保存到Winform应用程序中的DGV。我已经修复了
日期
列,但是我无法修复我的DataGridView的
时间
列(这个:“HH:mm:ss tt”不起作用,仍然显示时间(上午7:26,这是正确的)和日期(1900年1月1日,这是不正确的))

有人能帮我吗?谢谢

DataTable dt;

_db.conn();
_db.cmd.CommandText = "SELECT * FROM IncomingLog";

dt = _db.executeDT();

incomLogTable.DataSource = dt;

incomLogTable.Columns[2].DefaultCellStyle.Format = "MM/dd/yyyy";
incomLogTable.Columns[4].DefaultCellStyle.Format = "HH:mm:ss tt";

由于两列都是datetime,因此生成时间时,时间似乎默认为日期0(01/01/1990)。作为旁注,如果日期和时间都存储为时间戳,则它们最好是一列

第一个选项是将datetime转换为字符串,并从字符串中提取所需的值。您可以在SQL Server中读取格式化时间戳。如果你能从中得到你想要的格式,那么这是2中比较容易的。下面的将以字符串形式返回7:26AM

declare @date datetime = '1990-01-01 07:26:00'

select substring(convert(nvarchar(max),@date,0),12,20)
另一个选项是将datetime分解为DatePart,然后以您想要的任何格式将它们组合在一起。以下消息将于上午7:26返回

declare @date datetime = '1990-01-01 07:26:00'

select
    cast(datepart(hour,@date) as varchar(2)) --Assign hour
    + ':' --Add asterisk
    + cast(datepart(minute,@date) as varchar(2)) --Assign minute
    + ' ' --Add space before AM/PM
    + case when datepart(hour,@date) > 12 then 'PM' else 'AM' end --Determine AM vs PM and add

怎么了?小时是否显示不正确?如果是,请尝试hh:mm:ss tt。另外,是否有意在代码周围加上单引号?它消除了SA对块所做的任何格式化。小时显示不正确。它仍然显示mm/dd/yyyy hh:mm AM/PM。我的一行时间是:1900年1月1日上午7:25。时间tho是正确的。当我问这个问题时,我的代码中包含了单引号。哈哈,我的代码里没有。更新:我尝试了hh:mm:ss tt,仍然是相同的。hh是24小时格式。使用hh和tt。“HH:mm:ss”或“HH:mm:ss tt”您能否为正在查询的SQL表列和一些示例行提供数据类型?您可能希望在SQL查询中而不是在c#中进行格式化。