Как SqlDataReader определяет, следует ли устанавливать для столбца значение Только для чтения при заполнении DataTable?

Я звоню dataTable.Load(sqlDataReader), и 2 столбца автоматически устанавливаются в ReadOnly в dataTable. Остальные столбцы доступны для редактирования. Я знаю, что могу редактировать это свойство, но мне было интересно, как оно определяет, что установить в ReadOnly.

Один из столбцов является первичным ключом таблицы, а другой — Bit. Столбец Bit имеет ограничение по умолчанию в SQL Server, но это все. Запрос, который я использую для его вызова, преобразует столбец в INT. Мне интересно, есть ли способ, которым я могу отредактировать свой SQL-запрос, чтобы сделать столбец только для чтения.


person user1427105    schedule 06.07.2016    source источник


Ответы (1)


Вы как бы ответили на свой вопрос, указав детали столбца.

Я предполагаю, что DataTable создается таким образом, чтобы иметь возможность обновлять, вставлять, удалять строку/столбец и т. д. Таким образом, все, что обрабатывается ресурсом, отличным от DataTable, или вычисляется, вероятно, только для чтения.

Таким образом, столбец первичного ключа, скорее всего, является столбцом IDENTITY, означающим, что база данных назначает ключ, а это означает, что вы НЕ хотите добавлять свое собственное значение! И поэтому помечен как только для чтения.

Следующее, вероятно, не потому, что в столбце есть значение по умолчанию. Потому что технически вы не включаете битовый столбец, но включаете вычисляемый столбец на основе битового столбца. Таким образом, столбец, который вы включаете, фактически не существует в базовой таблице, и поэтому .net не сможет изменить данные в столбце.....

person Matt    schedule 06.07.2016
comment
Да, на самом деле я был в порядке, делая PK только для чтения, но я не хочу, чтобы преобразованные значения были автоматически доступны только для чтения. Я преобразовал свои varchars в varchars и наблюдал, как они становятся доступными только для чтения, так что, думаю, это все. Вы случайно не знаете способа предотвратить это, не так ли? - person user1427105; 06.07.2016
comment
Я думаю, вопрос в том, почему вы конвертируете? Затем, если вы не только для чтения, как бы вы сопоставили свое преобразование с обновлением/вставкой базовой таблицы? Второй вопрос заключается в том, почему они помечаются как доступные только для чтения. Вам придется реализовать пользовательскую бизнес-логику и команды обновления/вставки. - person Matt; 06.07.2016
comment
Я преобразовывал его, потому что Бит сделал его флажком в DataGrid, а это было не то, что я искал. В итоге это не сработало с моим обновлением/вставкой в ​​оба конца. В итоге я пошел другим путем, чтобы дать мне больше контроля. - person user1427105; 08.07.2016