1

您好,我有这个查询,我想返回 '0,00' 而不是 '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
4

6 回答 6

3

在您的查询中更改,为。.

ISNULL(s_prijmy, 0.00)

我还要注意

GetDecimal(34) 

获得第 35 列,因为它是从零开始的...

采用:

GetDecimal(33) 

第 34 列。

在这里检查

于 2013-09-05T09:45:45.427 回答
2

0,00不是小数。尝试0.00在查询中将其转换为小数。如果是类型,不要忘记加上0.00单引号。''s_prijmyvarchar

试试这个

string sqlcom = "SELECT (ISNULL(s_prijmy, '0.00')), * FROM zajezd WHERE akce >= '" + txt_od.Text + "'AND akce <='" + txt_do.Text + "' AND rocnik='" + klientClass.Rocnik() + "'";

是的,正如我已经说过的,请尝试使用参数化查询。

于 2013-09-05T09:47:21.807 回答
2

s_prijmy 是什么数据类型?如果它是字符串,并且你想返回一个字符串 '0.00' 然后做

 ISNULL(s_prijmy, '0.00')

如果它是数字,并且您想返回格式为 0.00 的数字,则执行

ISNULL(s_prijmy, cast(0 as decimal(3,2)))

如果 s_prijmy 的精度大于 2,例如 decimal(4,3),那么您将得到 0.000

于 2013-09-05T09:52:18.843 回答
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() + "'";
于 2013-09-05T09:46:02.267 回答
1

您可以在显示数据时对其进行格式化。

按原样选择数据

string sqlcom = "SELECT s_prijmy, .........

然后

var value = myreader.GetString(myreader.GetOrdinal("s_prijmy"));

value =  string.IsNullOrEmpty(value)?"0,00":value;

现在您可以在Points.AddXY

于 2013-09-05T09:55:40.643 回答
1

您必须在客户端更正您的演示文稿。查看公共字符串 ToS​​tring(string format)。还有这里这里

于 2013-09-05T09:58:47.957 回答