在MSSQL中将bigint转换为varchar

时间:2015-08-18 06:56:58

标签: sql-server ado.net dataset

我有这个专栏ContactNo和其他像这样的专栏FaxNo等。

问题出在MSSQL中,这些列被定义为bigint。我使用管理工作室将它们更改为MSSQL中的varchar。

enter image description here

我想将它从int更改为varchar / string的唯一原因是我可以在开始时使用“0”。在int中我不能在开头放“0”..

我认为我还需要对数据集进行更改,因此我还更新了WPF中的数据集。 在数据集中将同一个表的相同列从System.Int64更改为System.String

enter image description here

但即使我仍然得到这个错误..

Specified Cast is not valid

enter image description here

如果我将类型更改为以前的类型,它可以正常工作..但那些大的int类型不允许零...

当我做调试时..看到这个黄色突出显示。在此之后它直接跳转到异常错误。

enter image description here

== - == - == - == - == - =

**更新1:**

enter image description here

enter image description here

5 个答案:

答案 0 :(得分:2)

我怀疑你在AgentAccount中有一个字段,你没有更新为字符串,它仍然是一个int。因此,演员阵容失败了。在代码中选择AgentAccount,按F12跳转到定义,然后将该字段更新为字符串。一切都应该有效。

答案 1 :(得分:2)

由于您已在基础数据库中进行了更改,因此您在程序中所需要做的就是重新生成类型化数据集代码。这应该解决所有这些问题。

试试这个:

关闭所有窗口并打开Dataset1.xsd(设计师)。在设计器表面上做一些强制它重新生成代码的东西。大多数时候甚至只是移动其中一个表应该可以做到这一点;但如果它不是右键单击并添加虚拟适配器,则保存然后将其删除并再次保存。 (目的是让它再次重新生成自动生成的代码。)

对您可能拥有的任何更多类型的数据集重复此过程。 (我在屏幕截图中看到一个名为RMSDatabase2Dataset.xsd的内容。)

最后保存所有内容并完成项目的全面重建。

答案 2 :(得分:2)

如果只想在UI中显示前导零,可以使用字符串格式进行绑定,也可以使用转换器。 但是如果你需要在数据库中保存带有前导零的值,那么最好将类型更改为varchar。

其次,您使用的是数据集还是LINQ to SQL类?看起来示例代码,我假设您使用DataClassesDataContext.AgentAccount属性中的适配器获取数据。

确保查询返回数据,否则您将无法获得异常,因为不会有任何要投射的对象。

在简单数据集中执行相同步骤时,一切正常,当您修改Dataset.ContactNo&保存文件,它反映在所有相关的地方。

答案 3 :(得分:1)

从您上传的DataSet1.xsd图片中,MaxLength ContactNo的{​​{1}}属性为-1

ContactNoSystem.Int64更改为System.String后,您还应将ContactNo MaxLength-1更改为{{} 1}}。

答案 4 :(得分:1)

修改

广泛浏览您的代码后,这里没有显示有两个问题。

一个是数据注释,另一个仍然是在xaml.cs

中转换为longint

当更改这样的数据类型时,它可能非常繁琐,我们需要遍历代码中处理该字段的每个文件。

我很高兴你解决了你的问题,我们都明白撞墙砖的挫败感:)

这可能是由MSSERVER中的设置引起的:

转到选项并取消选中阻止保存需要重新创建表的更改。由于您可能会在项目的某些部分更改表,但更改未保存在数据库中。所以会有一个强制转换异常,因为它正在寻找bigint而不是varchar。

enter image description here