我有以下一段sql查询:
Sql += " SELECT ISNULL(SUM(COALESCE (a.currency, 0)), 0) AS monthCurrency
FROM IW_Awards AS a ";
查询工作正常,我试图在提交查询后在C#中转换此值,但我找不到它的类型。
我试过int,int?和字符串。当我试图转换为字符串时,我有以下错误消息: 无法将类型为“System.Decimal”的对象强制转换为“System.String”。
当我试图将它转换为Int或Int时?我有: 指定的演员表无效。
数据库:SQL IDE:Visual Studio 2010 数据库接口:LINQ(但我正在创建自己的查询) 服务器端语言:C#
感谢您的帮助。
答案 0 :(得分:5)
你尝试过小数吗?它告诉你它试图将System.Decimal强制转换为字符串,当你试图将它强制转换为字符串时。
它将返回任何类型的货币。
答案 1 :(得分:2)
什么类型的货币?我会说这可能是您的错误消息中的十进制数据类型。
出于好奇,为什么要使用coalesce和isnull?由于您已将所有空值更改为0,因此根本不需要外部isnull。
答案 2 :(得分:1)
听起来像是小数。这就是错误消息告诉你的,你正在尝试将小数字转换为字符串。
答案 3 :(得分:1)
如果currency是数据库中的int,则使用Convert.ToInt32
。另一种选择是使用myTable.Rows[0].Field<int>("monthCurrency")
命名空间中的System.Data
。问题有时即使你从SqlServer返回一个int,.NET仍然认为它是一个小数。
答案 4 :(得分:1)
在我看来,结果是decimal
,基于错误消息指定它无法从System.Decimal
转换。
答案 5 :(得分:1)
正如其他人提到的那样,你正在寻找decimal
,但我想将这个link添加到CLR-SQL类型的映射文档中(非常有用的链接)。