C# 在 SqlDataReader 中禁用自动格式化
Posted
技术标签:
【中文标题】C# 在 SqlDataReader 中禁用自动格式化【英文标题】:C# disable autoformatting in SqlDataReader 【发布时间】:2020-07-02 09:28:16 【问题描述】:我在 WPF 中使用SqlConnection
、mysqlConnection
和OracleConnection
来获取数据库中表的内容。
当我尝试从表中获取输出时,一切正常。但是,如果任何会话属性具有日期类型,它将自动从 '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 填充 List<T>