.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
相关产品推荐
相关产品推荐

