返回ISNULL十进制“0,00”

时间:2013-09-05 09:44:39

标签: c# sql sql-server winforms

您好我有这个查询,我想返回'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

6 个答案:

答案 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)。还有herehere