您好我有这个查询,我想返回'0'的'0'
当我尝试这样写时:
string sqlcom = "SELECT (ISNULL(s_prijmy, 0,00)), * FROM zajezd WHERE akce >= '" + txt_od.Text + "'AND akce <='" + txt_do.Text + "' AND rocnik='" + klientClass.Rocnik() + "'";
它给了我以下例外:
System.InvalidCastException:指定的强制转换无效。在 System.Data.SqlClient.SqlBuffer.get_Decimal()
请问我该如何解决?
谢谢你。
这个'0,00'的未来使用应该如下:
this.chart1.Series["Příjmy"].Points.AddXY(myreader.GetString(myreader.GetOrdinal("akce")), myreader.GetDecimal(34).ToString()); // the 34th column
答案 0 :(得分:3)
在查询中使用,
更改.
。
ISNULL(s_prijmy, 0.00)
我也会注意到
GetDecimal(34)
获得第35列,因为它是从零开始的......
使用:
GetDecimal(33)
第34栏。
检查here
答案 1 :(得分:2)
0,00
不是小数。尝试0.00
将其转换为查询中的小数。如果0.00
的类型为''
,请不要忘记将s_prijmy
放在单引号varchar
中。
试试这个
string sqlcom = "SELECT (ISNULL(s_prijmy, '0.00')), * FROM zajezd WHERE akce >= '" + txt_od.Text + "'AND akce <='" + txt_do.Text + "' AND rocnik='" + klientClass.Rocnik() + "'";
是的,因为我已经说过请尝试使用参数化查询。
答案 2 :(得分:2)
什么数据类型是s_prijmy?如果它是字符串,并且您想要返回字符串'0.00',那么执行
ISNULL(s_prijmy, '0.00')
如果是数字,并且您想要返回格式为0.00的数字,请执行
ISNULL(s_prijmy, cast(0 as decimal(3,2)))
如果s_prijmy具有2的更高精度,例如十进制(4,3),那么你将获得0.000
答案 3 :(得分:1)
尝试这种方式:
string sqlcom = "SELECT cast(ISNULL(s_prijmy, 0) as decimal(8,2)), * FROM zajezd WHERE akce >= '" + txt_od.Text + "'AND akce <='" + txt_do.Text + "' AND rocnik='" + klientClass.Rocnik() + "'";
答案 4 :(得分:1)
您可以在显示数据时格式化数据。
按原样选择数据
string sqlcom = "SELECT s_prijmy, .........
然后
var value = myreader.GetString(myreader.GetOrdinal("s_prijmy"));
value = string.IsNullOrEmpty(value)?"0,00":value;
现在您可以在Points.AddXY
答案 5 :(得分:1)
您必须在客户端更正您的演示文稿。看看public string ToString(string format)。还有here和here。