我有这个专栏ContactNo
和其他像这样的专栏FaxNo
等。
问题出在MSSQL中,这些列被定义为bigint。我使用管理工作室将它们更改为MSSQL中的varchar。
我想将它从int更改为varchar / string的唯一原因是我可以在开始时使用“0”。在int中我不能在开头放“0”..
我认为我还需要对数据集进行更改,因此我还更新了WPF中的数据集。
在数据集中将同一个表的相同列从System.Int64
更改为System.String
但即使我仍然得到这个错误..
Specified Cast is not valid
如果我将类型更改为以前的类型,它可以正常工作..但那些大的int类型不允许零...
当我做调试时..看到这个黄色突出显示。在此之后它直接跳转到异常错误。
== - == - == - == - == - =
**更新1:**
答案 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
。
将ContactNo
从System.Int64
更改为System.String
后,您还应将ContactNo
MaxLength
从-1
更改为{{} 1}}。
答案 4 :(得分:1)