C# 在 SqlDataReader 中禁用自动格式化

Posted

技术标签:

【中文标题】C# 在 SqlDataReader 中禁用自动格式化【英文标题】:C# disable autoformatting in SqlDataReader 【发布时间】:2020-07-02 09:28:16 【问题描述】:

我在 WPF 中使用SqlConnectionmysqlConnectionOracleConnection 来获取数据库中表的内容。

当我尝试从表中获取输出时,一切正常。但是,如果任何会话属性具有日期类型,它将自动从 '2020-02-20' 重新格式化为 '20/02/2020 12:00:00 AM',我需要该日期保持原样并且不在所有三种类型的数据库中格式化。如何防止它自动格式化?

也有可能是其他类型,但我没有注意到。

在命令行中,它会正确返回插入表中的日期值。

在 SQL Server 中,我得到这样的数据:

DataTable dt = new DataTable();

using (cmd = new SqlCommand(query, conn))

      SqlDataAdapter da = new SqlDataAdapter(cmd);
      da.Fill(dt);


dataGrid.DataContext = dt;

其中query 是类似SELECT * FROM STUDENT 的字符串,而dataGrid 是这样在XAML 中定义的

<DataGrid ItemsSource="Binding"  x:Name="dataGrid" IsReadOnly="True"/>

已编辑:当我将数据加载到某个数组或列表时,它会返回格式为:20.02.2020 0:00:00 的日期,这也是错误的。

谢谢

【问题讨论】:

问题不在于数据库,而在于数据网格的格式。请参阅:***.com/questions/7978249/… @jdweng 你确定吗?因为当我将数据加载到某个 Array 或 List 时,它也是如此。 您如何查看数据? DateTime 是以 UTF 存储和传输的数字。用于显示 DateTime 的工具使用机器的文化(时区和格式)将数字转换为字符串。因此,您只是在查看从数字转换而来的字符串。不是存储的数字。 当列类型为 Date 使用 To.String("yyyy-MM-dd") 时,我只需要重新格式化它。这实际上不是我想要的,但它确实有效。谢谢 【参考方案1】:

.NET 根本没有 DATE 的数据类型,所以不同的数据库日期和时间类型都映射到 .NET 的 DateTime,它“表示时间的瞬间,通常表示为一天中的日期和时间。”在这个映射中,一个 DATE 被映射到当天的午夜。

因此,虽然 SqlDataReader 知道 SQL Server 数据类型,但当您使用 DataAdapter 并将数据加载到 DataTable 中时,所有数据都会从 SQL Server 类型转换为 .NET 类型。

您将在客户端获得一个 DateTime,并由您来适当地显示它。如果你想给我们一个不显示时间部分的显示格式,你可以。 EG

Date formatting in WPF datagrid

【讨论】:

以上是关于C# 在 SqlDataReader 中禁用自动格式化的主要内容,如果未能解决你的问题,请参考以下文章

如何在 JavaScript 中使用 C# SQLDataReader 对象

如何在 C# 中使用 SqlDataReader 获取行数

在 c# 中使用 SqlDataReader 填充 List<T>

c# - 从 SqlDataReader 填充通用列表

C#:使用 SqlDataReader 在图表上显示 SQL 查询

C#利用SqlDataReader读取SQL Server数据表