Подтвердить что ты не робот

"Невозможно изменить тип DataType столбца после его получения" в Visual Studio 2005 DataSet Designer

У меня есть DataSet в VisualStudio 2005. Мне нужно изменить тип данных столбца в одном из данных datatables от System.Int32 до System.Decimal. Когда я пытаюсь изменить тип данных в DataSet Designer, я получаю следующую ошибку:

Значение свойства недействительно. Невозможно изменить тип данных столбца один раз он имеет данные.

По моему мнению, это должно изменить тип данных в схеме для DataSet. Я не вижу, как могут быть какие-либо данные, чтобы вызвать эту ошибку.

Есть ли у кого-нибудь идеи?

4b9b3361

Ответ 1

Я получаю ту же ошибку, но только для столбцов со значением DefaultValue для любого значения (кроме значения по умолчанию <DBNull>). Так что я столкнулся с этой проблемой:

  • Столбец DefaultValue: введите <DBNull>
  • Сохранить и снова открыть набор данных

Ответ 2

Так как заполненные Datatables не содержат изменения в схеме, обходное решение может применяться следующим образом:

  • Создайте новый datatable

  • Использовать метод clone datatable для   создавать данные с такими же   структуры и внести изменения в это   Столбец

  • В конце используйте datatable ImportRow   метод для заполнения его данными.

НТН

Ответ 3

Я нашел работу. Если я удалю столбец данных и добавлю его обратно с другим типом данных, он будет работать.

Ответ 4

Для тех, кто находит это через Google, и у вас есть немного другой случай, когда ваша таблица имеет данные, и вы добавляете новый столбец (например, я), если вы создаете столбец и устанавливаете тип данных в отдельных отчетах, вы также получаете это исключение. Однако, если вы делаете это в одном и том же заявлении, он отлично работает.

Итак, вместо этого:

var column = myTable.Columns.Add("Column1");
column.DataType = typeof(int); //nope, exception!

Сделайте это:

var column = myTable.Columns.Add("Column1", typeof(int));

Ответ 5

У меня была такая же ошибка, но я повторно использовал таблицу для отображения различных результатов запроса, используя myTable.Clear() и myTable.Columns.Clear() для очистки таблицы между запросами. Это меня действительно смутило, поскольку я не мог понять, как таблица может содержать данные, чтобы вызвать ошибку!

Решение Logan устранило проблему. Спасибо, сэр, вы спасли мое здравомыслие.

Ответ 6

  • Закройте DataSet в визуальном конструкторе
  • Щелкните правой кнопкой мыши набор данных, выберите Open With...
  • Выберите XML (Text) Editor
  • Найдите столбец в XML, в вашем наборе данных он будет выглядеть примерно так:
<xs:element name="DataColumn1"
  msprop:Generator_ColumnVarNameInTable="columnDataColumn1"
  msprop:Generator_ColumnPropNameInRow="DataColumn1"
  msprop:Generator_ColumnPropNameInTable="DataColumn1Column"
  msprop:Generator_UserColumnName="DataColumn1" 
  type="xs:int" 
  minOccurs="0" />
  • Измените type="xs:int" на type="xs:decimal"
  • Сохраните и закройте редактор XML
  • Возможно, вам придется снова щелкнуть правой кнопкой мыши по DataSet и выбрать Run Custom Tool