22

我在 VisualStudio 2005 中有一个数据集。我需要将其中一个数据表中列的数据类型从System.Int32更改为System.Decimal. 当我尝试更改数据类型时,DataSet Designer我收到以下错误:

属性值无效。一旦有数据,就无法更改列的 DataType。

据我了解,这应该是更改 DataSet 架构中的数据类型。我看不出有什么数据会导致这个错误。

有没有人有任何想法?

4

6 回答 6

44

我得到相同的错误,但仅适用于其DefaultValue设置为任何值的列(除了 default <DBNull>)。所以我解决这个问题的方法是:

  1. 列 DefaultValue : 输入<DBNull>
  2. 保存并重新打开数据集
于 2009-12-15T07:17:51.557 回答
5

由于填充的数据表不会改变架构,因此可以应用以下解决方法:

  1. 创建一个新的数据表

  2. 使用数据表的 Clone 方法创建具有相同结构的数据表并更改该列

  3. 最后使用数据表的 ImportRow 方法用数据填充它。

高温高压

于 2008-09-06T06:48:11.107 回答
3

我找到了解决办法。如果我删除数据列并将其添加回不同的数据类型,那么它将起作用。

于 2008-09-06T07:16:46.170 回答
2

对于那些通过谷歌找到这个并且你有一个稍微不同的情况,你的表有数据并且你添加了一个新列(像我一样),如果你创建列并在单独的语句中设置数据类型,你也会得到同样的异常。但是,如果您在同一个语句中执行此操作,则效果很好。

所以,而不是这个:

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

做这个:

var column = myTable.Columns.Add("Column1", typeof(int));
于 2015-12-18T10:39:59.657 回答
0
  • 在可视化设计器中关闭 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
于 2019-10-14T14:38:08.957 回答
0

这是一个老问题,但它仍然可能发生在 VS 2019

解决方案:

  1. 将 DefaultValue 更改为 <DBNull>
  2. 保存数据集
  3. 关闭数据集设计器
  4. 重新打开设计器

现在应该可以毫无问题地更改类型。

于 2021-06-15T21:20:21.287 回答