[英]How to identify source of a FormatException from SQL Server 2012 in LINQ to SQL
我有一个DBML文件,该文件定义了供LINQ-to-SQL查询使用的大量实体。 它在SQL Server 2005和SQL Server 2008以及我们正在与之集成的特定版本的第三方软件上运行良好。 但是,我们现在正在研究在新OS(Windows Server 2012)和数据库平台(SQL Server 2012)上以及作为64位进程运行的第三方软件的较新版本。
当我尝试从我们在这个新环境中的数据库(而不是第三方软件)中定义的表的一个获取对象,我得到异常,“字符串必须是一个字符长。” 现在,从其他问题和文章中我知道,Visual Studio过去将某些列创建为Char类型而不是String为nvarchar(1)
列创建了一些错误行为。 但是有很多因素使我相信我正在这里处理另一个问题:
nvarchar(1)
数据库列。 Dim dtl = Aggregate i In context.FSE_ItemDetails Into First()
)。 我需要帮助的是确定导致此错误的表和列。 我假设错误是来自我要从中检索数据的表,但是当我查看架构时,很难想象它是怎么回事。 FormatException
很少提供有关错误源的信息,而当我捕获到该错误时,我没有太多了解发生了什么情况的信息。 我可以在调用堆栈(不幸的是,仅以字符串形式提供)中看到, System.Convert.ToChar
是抛出该函数的函数,而我们的ItemDetail.get_Item()
生成的函数是代码中的最后一层堆。 但是没有专栏的提示。 如果可能,我希望通过更改重现错误的测试程序来缩小此范围,因为我没有在可以重现错误的环境中设置调试环境。 但是,一旦异常解除到我的水平,我不知道如何以编程方式访问调用堆栈中的数据。
编辑
我只访问一个表这一事实使我感到误解。 我忘记了我的测试输出是引用了第三方架构中的关联对象,该对象确实可能已更新。 问题仍然存在,但是,有没有一种好的方法来识别导致错误的源列。 该表中有很多列。
在发现我查看了错误的表之后,我只是在XML编辑器中打开了DBML文件,找到了我现在怀疑是问题所在的表的定义,并查找了Type
设置为System.Char
每个Column
元素。 我查询了新数据库中的每一列,最后找到了一个不完全包含1个字符的列。 对其进行进一步检查表明,它曾经被定义为Char(1) NULL
,但是现在是nvarchar(2) NULL
。 通过更正并再次运行测试而没有错误,我已经确认这是我所看到的问题的根源。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.