【问题标题】:How does SqlDataReader determine whether to set a column to ReadOnly when filling a DataTable?SqlDataReader在填充DataTable时如何判断是否将某列设置为ReadOnly?
【发布时间】:2016-11-09 00:40:04
【问题描述】:

我正在调用dataTable.Load(sqlDataReader),并且数据表中的 2 列自动设置为 ReadOnly。其余列是可编辑的。我知道我可以编辑此属性,但我想知道它如何确定设置为 ReadOnly 的内容。

其中一列是表的主键,另一列是Bit。 Bit 列在 SQL Server 中有一个默认约束,但仅此而已。我用来调用它的查询将列转换为INT。我想知道是否有一种方法可以编辑我的 SQL 查询以使列只读。

【问题讨论】:

    标签: .net sql-server datatable sqldatareader


    【解决方案1】:

    您通过指定列详细信息回答了自己的问题。

    我的假设是 DataTable 的创建方式能够更新、插入、删除行/列等。因此,由 DataTable 以外的资源处理或计算的任何内容都可能是只读的.

    所以主键列可能是 IDENTITY 列,这意味着数据库分配了键,这意味着您不想添加自己的值!因此被标记为只读。

    下一个可能不是因为该列有默认值。因为从技术上讲,您不包括位列,而是包括基于位列的计算列。因此,您包含的列实际上并不存在于基础表中,因此 .net 将无法更改列中的数据.....

    【讨论】:

    • 是的,我实际上可以将 PK 设为只读,但我不希望转换后的值自动变为只读。我将我的 varchars 转换为 varchars 并看着它们变成只读的,所以我想就是这样。你不会碰巧知道有什么方法可以防止这种情况发生吗?
    • 我想问题是你为什么要转换?那么对于不是只读的,您将如何将您的转换映射回更新/插入基础表?第二个问题是为什么它们被标记为只读,你必须实现自定义业务逻辑和更新/插入命令。
    • 我正在转换它,因为 Bit 使它成为 DataGrid 中的一个复选框,而这不是我想要的。它最终无法在往返行程中使用我的更新/插入。我最终选择了一条不同的路线,以给予我更多的控制权。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2022-10-02
    • 1970-01-01
    • 1970-01-01
    • 2017-08-30
    • 1970-01-01
    • 2014-01-25
    相关资源
    最近更新 更多