当数据是来自 sql 服务器数据库的时间戳类型时,“FastDatalistView”中是否存在错误?

Is there a bug in `FastDatalistView` when data is type timestamp from sql server db?

我正在使用 ObjectListView wrapper,特别是 FastDatalistView。使用 Visual Studio 可视化编辑器,我按如下方式配置了 FastDatalistView

    AlternateRowBackColor = ControlLight
    AutoGenerateColumns = True
    Columns = {nothing} (Configured by the wrapper at runtime)
    DataSource = None (Set in code at runtime)
    FullRowSelect = True
    GridLines = True
    MultiSelect = False
    OwnerDraw = True
    ShowGroups = False
    View = Details

请注意,我依赖包装器的 AutoGenerateColumns 功能来自动生成 header 列文本和方面名称,并且我指望包装器在没有我的代码的情况下将数据加载到列表中对它做任何事。为什么?因为我的 select 语句可以而且将由任何列 name/sql 服务器数据类型和 table 名称构成,可以在任何 sql 服务器 2014 数据库

中找到

我的代码的相关部分:

dataTable_X = new DataTable();
dataTable_X.Clear();

dataTable_X = dataAccessLayer.QueryDbGetRecords({arguments needed to construct select statement in QueryDbGetRecords});

if (dataTable_X.Rows.Count <= 0)
{
    MessageBox.Show("The selected table has no records.", "XXXXXXX`", MessageBoxButtons.OK, MessageBoxIcon.Exclamation);
    return;
}

this.fastDataListViewTableKeys.DataSource = dataTable_X;
this.fastDataListViewTableKeys.RebuildColumns();

fastDataListViewTableKeys.AutoResizeColumns(ColumnHeaderAutoResizeStyle.ColumnContent);
fastDataListViewTableKeys.AutoResizeColumns(ColumnHeaderAutoResizeStyle.HeaderSize);

dataTable_X.Dispose();
  1. 有效的场景:

我执行select X from Y order by XXXXXXXX 是 sql 服务器 2014 varchar(50) 类型。数据的一个例子是 9876-1234。 select 语句将 406,000 行检索到数据 table 中。 FastDatalistView显示数据成功。

  1. 另一种可行的方案:

我执行select X from Y order by XXXXXXXX 是 sql 服务器 2014 int 类型。数据的一个例子是 36。 select 语句将 20 行检索到数据 table 中。 FastDatalistView显示数据成功。

  1. 失败的场景:

我执行select X from Y order by XX 是 sql 服务器 2014 timestamp 类型。数据的一个例子是 0x0000000000F0F5DD。 select 语句将 100,000 行检索到数据 table 中。 FastDatalistView 显示列标题。垂直滚动条和隔行背景色表示列表中有很多项,但没有显示数据。

我使用调试器检查了 fastDataListViewTableKeys object。 fastDataListViewTableKeys.Columns.Results View[0].AspectName 是预期的 X。我不确定我应该在 fastDataListViewTableKeys 中的哪个位置查看列表数据

是否 FastDatalistView 无法将 sql 服务器 timestamp 数据转换为可显示版本,而 intvarchar ,或者,大概是它检测到并字符串化的其他类型??

timestamprowversion 的已弃用同义词。它用于乐观并发,没有可显示的形式或用法。它与时间、连续值、唯一性或产生任何有意义的排序顺序无关。来自文档

Is a data type that exposes automatically generated, unique binary numbers within a database. rowversion is generally used as a mechanism for version-stamping table rows. The storage size is 8 bytes. The rowversion data type is just an incrementing number and does not preserve a date or a time. To record a date or time, use a datetime2 data type.

唯一的保证是,如果一行被修改,rowversion 值将自动设置为大于先前值的值。如果同时修改多行,服务器可能会决定批量生成新值。

只需不要将其添加到网格中。如果您想要 high-resolution 日期时间类型,请使用具有您想要的精度的 datetime2`

rowversion 也不能用于 检测 和检索更改的记录,方法是检索 rowversion 值高于某个存储值的行。为此,请使用所有 SQL 服务器版本和版本

中可用的 Change Tracking