【问题标题】:Returning on ISNULL decimal "0,00"返回 ISNULL 十进制“0,00”
【发布时间】:2013-09-09 02:06:21
【问题描述】:

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

【问题讨论】:

  • 虽然不是答案,但我应该指出,您应该使用参数,不要将 SQL 字符串与您想要的值连接。
  • 我记得有些人给了你一些关于使用SqlParameterCollection.AddWithValue的建议(以避免SQL injection),但你仍然使用string concatenation
  • 你对价值和它的表现感到困惑。

标签: c# sql sql-server winforms


【解决方案1】:

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

ISNULL(s_prijmy, 0.00)

我还要注意

GetDecimal(34) 

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

用途:

GetDecimal(33) 

第 34 列。

查看here

【讨论】:

    【解决方案2】:

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

    试试这个

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

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

    【讨论】:

    • 我已经编辑了我的问题,您可以检查一下吗?我尝试了您的建议,但仍然遇到同样的异常。
    【解决方案3】:

    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

    【讨论】:

    • 感谢您的回答:s_prijmy 是: numeric(10, 2)
    • 然后使用 ISNULL(s_prijmy, cast(0 as decimal(3,2)))
    • 谢谢,但还是遇到了同样的异常。
    【解决方案4】:

    试试这个方法:

    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() + "'";
    

    【讨论】:

      【解决方案5】:

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

      按原样选择数据

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

      然后

      var value = myreader.GetString(myreader.GetOrdinal("s_prijmy"));
      
      value =  string.IsNullOrEmpty(value)?"0,00":value;
      

      现在您可以在Points.AddXY 中使用上述值

      【讨论】:

        【解决方案6】:

        您必须在客户端更正您的演示文稿。看看public string ToString(string format)。还有herehere

        【讨论】:

          猜你喜欢
          • 2018-05-16
          • 2020-03-28
          • 2011-11-20
          • 1970-01-01
          • 2020-01-08
          • 2021-06-04
          • 2016-02-24
          • 1970-01-01
          • 1970-01-01
          相关资源
          最近更新 更多