在 MSSQL 中将 bigint 转换为 varchar

Converted bigint to varchar in MSSQL

我有这个专栏 ContactNo 和其他类似的内容,例如 FaxNo 等等

问题出在 MSSQL 中,这些列被定义为 bigint,我在 MSSQL 中使用 Management Studio 将它们更改为 varchar:

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

我想我还需要更改数据集,所以我也更新了 WPF 中的数据集。在数据集中,将相同 table 的同一列从 System.Int64 更改为 System.String

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

Specified Cast is not valid

如果我将类型改回它们之前的任何类型,它工作正常,但那些大的 int 类型不允许零。

当我调试时,看到这个黄色突出显示。之后直接跳转到异常error:

更新 1

根据您上传的 DataSet1.xsd 张图片,ContactNoMaxLength 属性 是 -1

ContactNoSystem.Int64 更改为 System.String 后,您还应该将 ContactNoMaxLength-1 更改为 30.

我怀疑您在 AgentAccount 中有一个字段尚未更新为字符串,它仍然是一个 int。因此,演员表失败了。 Select AgentAccount 在代码中,按F12 跳转到定义,然后将字段更新为字符串。然后一切都应该工作。

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

试试这个:

关闭所有 windows 并打开 Dataset1.xsd(设计器)。在设计器表面上做一些事情,迫使它重新生成代码。大多数时候,甚至只是稍微移动其中一张桌子就可以解决问题;但如果它不只是右键单击并添加一个虚拟适配器,则保存然后删除它并再次保存。 (目的是让它重新生成自动生成的代码)

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

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

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

其次,您使用的是 Datasets 还是 LINQ to SQL 类?示例代码似乎都有,我假设您正在使用 DataClassesDataContext.AgentAccount 属性.

中的适配器获取数据

确保查询 returns 数据,否则您将无法获得异常,因为没有任何对象可以转换。

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

编辑

在广泛检查您的代码后,这里没有显示,有两个地方有问题。

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

中转换为 longint

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

很高兴你解决了问题,我们都理解碰壁的挫败感:)


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

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