You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

.NET Framework4.7.2与.NET6中SqlDataReader.GetSchemaTable()兼容性疑问

.NET Framework与.NET6中SqlDataReader获取timestamp列IsReadOnly值不一致问题

测试代码

[TestMethod]
public void MyTestMethod()
{
   using (var c = new SqlConnection(TestObjectHelper.MSSQLConnectionString))
   {
      c.Open();

      var cmd = c.CreateCommand();
      cmd.CommandText = "CREATE TABLE #blabla ( [ts] [timestamp] )";
      cmd.ExecuteNonQuery();

      cmd = c.CreateCommand();
      cmd.CommandText = "SELECT * FROM #blabla";

      using (var reader = cmd.ExecuteReader())
      {
         var schemaTable = reader.GetSchemaTable();
         var isReadOnly = (bool)schemaTable.Rows[0]["IsReadOnly"];

         Assert.Fail($"env: {Environment.Version}, isReadOnly value: {isReadOnly}");
      }
   }
}

测试结果对比

.NET Framework 4.7.2下的失败信息

env: 4.0.30319.42000, isReadOnly value: True

.NET 6下的失败信息

env: 6.0.20, isReadOnly value: False

两次测试均针对同一SQL Server 2017实例。

我未找到相关官方解释,想确认这是我遗漏了关键信息,还是应该将此问题报告为bug?

更新记录

  • 更新1:按照建议为ExecuteReader调用添加CommandBehavior.KeyInfo参数后,测试结果并未改变。
  • 更新2:添加CommandBehavior.KeyInfo参数后,schemaTable中出现了基于ColumnName的重复行,初步观察这些重复的列描述行仅IsHidden值不同。

内容的提问来源于stack exchange,提问作者cly

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.14 14:09:51