SqlDataReader在填充DataTable时如何确定是否将列设置为ReadOnly?
问题描述:
我打电话给dataTable.Load(sqlDataReader)
,其中2列自动在dataTable中设置为ReadOnly
。其余列是可编辑的。我知道我可以编辑这个属性,但我想知道它是如何确定要设置为ReadOnly
。SqlDataReader在填充DataTable时如何确定是否将列设置为ReadOnly?
其中一列是表的主键,另一列是Bit
。 Bit
列在SQL Server中有一个默认约束,但就是这样。我正在使用的查询将该列转换为INT
。我想知道是否有一种方法可以编辑我的SQL查询以使列只读。
答
你回答自己的问题,通过指定列的详细信息。
我的假设是DataTable是以能够更新,插入,删除行/列等方式创建的。因此,由DataTable以外的资源处理或计算的任何内容都可能被读取只要。
因此,主键列可能是一个IDENTITY列,意味着数据库分配键,这意味着您不想添加自己的值!因此被标记为只读。
下一个可能不是因为列上有默认值。因为从技术上讲,您不包括位列,但是包含基于位列的计算列。所以你包含的列实际上并不存在于底层表中,因此.net将无法更改列中的数据.....
是的,我确实可以使它PK只读,但我不希望转换值自动只读。我将varchars转换为varchars,并将它们视为只读,所以我想就是这样。你不会碰巧知道一种方法来防止这种情况发生吗? – user1427105
我想问题是你为什么要转换?那么为了不被只读,你如何将你的转换映射到更新/插入基础表?第二个问题是为什么他们被标记为只读,您将不得不实现自定义业务逻辑和更新/插入命令。 – Matt
我正在转换它,因为该位使它成为DataGrid中的复选框,而这不是我正在寻找的。它最终没有与我的更新/插入在往返旅行。我用我的方法走了一条不同的路线,让我有更多的控制权。 – user1427105