"Cannot change DataType of a column once it has data" error in Visual Studio 2005 DataSet Designer
Asked Answered
W

6

24

I've got a DataSet in VisualStudio 2005. I need to change the datatype of a column in one of the datatables from System.Int32 to System.Decimal. When I try to change the datatype in the DataSet Designer I receive the following error:

Property value is not valid. Cannot change DataType of a column once it has data.

From my understanding, this should be changing the datatype in the schema for the DataSet. I don't see how there can be any data to cause this error.

Does any one have any ideas?

Wive answered 6/9, 2008 at 2:55 Comment(0)
R
46

I get the same error but only for columns with its DefaultValue set to any value (except the default <DBNull>). So the way I got around this issue was:

  1. Column DefaultValue : Type in <DBNull>
  2. Save and reopen the dataset
Rookie answered 15/12, 2009 at 7:17 Comment(3)
This works, but something should be noted: there is a validation done at the time you save and close. If there is a problem then the fields are simply deleted when you close the dataset. I found this out the hard way as I lost a lot of information I entered. To prevent loss, be sure the dataset saves without errors BEFORE you try to close it.Picked
lol you really have to save and close then open for this to work, thanks life saverProbe
Thanks, this works :). "Save and reopen" DataSet is must for this to work.Guienne
S
5

Since filled Datatables do not entertain a change in the schema a workaround can be applied as follows:

  1. Make a new datatable

  2. Use datatable's Clone method to create the datatable with the same structure and make changes to that column

  3. In the end use datatable's ImportRow method to populate it with data.

HTH

Schreiner answered 6/9, 2008 at 6:48 Comment(0)
C
4

For those finding this via Google and you have a slightly different case where your table has got data and you add a new column (like me), if you create the column and set the datatype in separate statements you also get this same exception. However, if you do it in the same statement, it works fine.

So, instead of this:

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

Do this:

var column = myTable.Columns.Add("Column1", typeof(int));
Campball answered 18/12, 2015 at 10:39 Comment(0)
E
4

Its an old Question but it still can happen at VS 2019

Solution:

  1. Change the DefaultValue to <DBNull>
  2. Save the Dataset
  3. Close the DataSet Designer
  4. Re-Open the Designer

Now it should be possible to change the type without any problem.

Eparchy answered 15/6, 2021 at 21:20 Comment(0)
W
3

I have found a work around. If I delete the data column and add it back with the different data type, then it will work.

Wive answered 6/9, 2008 at 7:16 Comment(2)
I have run into the same problem. Strange - can't change it in the designer. Looks like a bug...Automatism
Same bug is still in VS2010. Same solution works. Remove the default values, save and close the DS, then re-open and you can edit the data types.Burgage
C
0
  • Close the DataSet in the visual designer
  • Right click the dataset, choose Open With...
  • Choose XML (Text) Editor
  • Find the column in the XML, in your dataset it will look something like:
<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" />
  • Change the type="xs:int" to type="xs:decimal"
  • Save and close the XML editor
  • You may need to right click the DataSet again and choose Run Custom Tool
Conlen answered 14/10, 2019 at 14:38 Comment(0)

© 2022 - 2024 — McMap. All rights reserved.