解决 即使在数据集和SQL Server Management Studio中更改数据类型后也会出错

已加入
2020年5月15日
留言内容
32
编程经验
Beginner
我在C#Visual Studio中有一个数据库,然后有一个数据集。在数据库中,有一个表,该表的列名为CardType。这是我之前的某个人创建的。并且此列中的值始终为40。因此他创建了double类型的值。

有人告诉我,现在必须将值更改为SAR40,而不仅仅是40。所以现在是字符串。因此,当我将值更改为SAR40时,尝试将SAR40添加到double类型的列时显然会出错。所以首先我去了SQL Server Management Studio,然后将类型更改为nvarchar。然后,我回到Visual Studio,并将CardType的数据类型更改为System.String。

然后,当我运行程序时,仍然出现错误

参数值不能从字符串转换为双精度。
FormatException:输入的字符串格式错误。
程序的工作方式是有一堆小段来填充数据,并且每个数据都进入数据库。诸如卡类型,硬件修订等数据。因此,我们创建了一个名为工作行的数据行,然后将其添加到工作行中。

workRow ["CardType"] = type.Text; // CardType是字符串,我将鼠标悬停在它上面进行了仔细检查,它显示为字符串。
workRow ["Hardwarerevision"] = hw.Text;

然后,将数据行添加到数据集中。
//添加新数据行
ds.UNIO_CPU.Rows.Add(workRow);

最后,我们使用名为DataGridAdapter_CPU的表适配器使用数据集更新数据库。
//将数据写入数据库
DataGridAdapter_CPU.Update(workRow);

那么为什么我仍然会出现错误?
我尝试仅用40运行该程序,但程序未显示任何错误。它工作正常。那怎么可能。因为我在SQL Server Management Studio和Visual Studio的数据集中都将其更改为字符串类型。因此,这里应该显示错误。但是它没有显示错误。而我尝试输入SAR40则显示无法将字符串转换为双精度的错误。

该错误发生在DataGridAdapter_CPU.Update(workRow)行中。因为我注释掉了这条线,然后运行其余部分。没有错误,程序正常运行,但是由于注释了该行,因此数据库未接收到新行。因此,当tableadapter尝试将数据行添加到sql server数据库时,就会发生错误。但是正如我所说,我已经将数据集中的CardType更改为System.string,然后还将SSMS中的colum CardType更改为string。因此,tableadadapter中有一些我必须更改的东西。我不是这方面的专家,我只知道基本的C#编程。请帮我。谢谢你。
 
Solution
大概您在一个地方更改了某项内容,但并未影响其他地方的更改。您应该做的是在数据库中进行更改,然后在“数据源”窗口中重新生成DataSet以在所有必需的位置进行更改。我认为DataColumn的数据类型应该更改,但是如果没有更改,则可以删除DataTable并从数据库中重新生成整个数据。

金西尼

C#论坛主持人
工作人员
已加入
2011年4月23日
留言内容
3,524
地点
悉尼,澳大利亚
编程经验
10+
大概您在一个地方更改了某项内容,但并未影响其他地方的更改。您应该做的是在数据库中进行更改,然后在“数据源”窗口中重新生成DataSet以在所有必需的位置进行更改。我认为DataColumn的数据类型应该更改,但是如果没有更改,则可以删除DataTable并从数据库中重新生成整个数据。
 
解决方案
已加入
2020年5月15日
留言内容
32
编程经验
Beginner
大概您在一个地方更改了某项内容,但并未影响其他地方的更改。您应该做的是在数据库中进行更改,然后在“数据源”窗口中重新生成DataSet以在所有必需的位置进行更改。我认为DataColumn的数据类型应该更改,但是如果没有更改,则可以删除DataTable并从数据库中重新生成整个数据。
谢谢,我确实做到了。我没有删除整个数据表,只是删除了CardType列,然后创建了一个新的StringType的CardType,然后将Dataset配置为包括新的CardType列,并且它起作用了。因此,创建新列有效,但更改旧列无效。但是早些时候,当我将类型从double更改为string时,我没有对tableadapter进行任何配置,只是对其进行了更改,并认为表适配器可以自动工作。因此,我认为我将再次做旧的事情,即从双精度字符串更改为字符串,然后还配置tableadapter,并查看它如何工作以理解问题。无论如何,它现在就可以了,这就是我所需要的。谢谢你。
 
已加入
2020年5月15日
留言内容
32
编程经验
Beginner
大概您在一个地方更改了某项内容,但并未影响其他地方的更改。您应该做的是在数据库中进行更改,然后在“数据源”窗口中重新生成DataSet以在所有必需的位置进行更改。我认为DataColumn的数据类型应该更改,但是如果没有更改,则可以删除DataTable并从数据库中重新生成整个数据。
是的,我转到了程序的旧副本,该副本的旧CardType已从double更改为string,然后在那里我再次重新配置了表适配器,并且它可以正常工作。因此,仅在VB和SSMS中更改表是不够的。我还需要配置表适配器中的更改。那是我的错
 
最佳 底部