Ошибка «Невозможно изменить тип данных столбца, если он содержит данные» в Visual Studio 2005 DataSet Designer - PullRequest
19 голосов
/ 06 сентября 2008

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

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

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

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

Ответы [ 4 ]

35 голосов
/ 15 декабря 2009

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

  1. Столбец Значение по умолчанию: введите <DBNull>
  2. Сохраните и снова откройте набор данных
3 голосов
/ 06 сентября 2008

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

3 голосов
/ 06 сентября 2008

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

  1. Создать новую таблицу данных

  2. Используйте метод клонирования для создать таблицу данных с тем же структурировать и внести изменения в это колонка

  3. В конце используйте ImportRow таблицы данных способ заполнить его данными.

НТН

1 голос
/ 18 декабря 2015

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

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

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

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

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