【问题标题】:How to save a decimal number from c# to sql如何将十进制数从c#保存到sql
【发布时间】:2013-10-30 00:51:51
【问题描述】:

当我尝试将十进制数从 c# 保存到 sql 数据库时遇到问题。首先,我将字符串转换为十进制,当我尝试将该十进制保存到 sql 数据库时出现问题。例如,如果我尝试保存 3.24,在数据库中它显示为 324.00,这是代码的一部分,请帮助...我已经尝试将类型从十进制更改为数字,而不是 convert.ToDecima decimal.Parse

        decimal cijena_uzine = Convert.ToDecimal(textBox1.Text, CultureInfo.InvariantCulture.NumberFormat);

        try
        {
            spremi_cijenu_obroka.Open();
            cmd = new SqlCommand("Update Vrsta_Obroka set cijena="+ cijena_uzine + " where Šifra_Obroka=1 ;", spremi_cijenu_obroka);

【问题讨论】:

  • textBox1 中的文字是什么?
  • 请将您的代码重写为SSCCE。对字符串进行硬编码,在某处打印出cijena_uzine 的值,这样您就可以看到小数点是什么字符串,然后将其写入数据库。
  • 需要更多信息,但我怀疑您的转换并未提供您认为的数字。
  • 跑题了,但是像这样编码 - 你正在为 SQL 注入攻击敞开大门!使用参数化查询。
  • 可能是您的 ui 设置正确,但使用逗号作为小数点,并且在翻译中丢失了。您的输入字段看起来像 10,56 还是 10.56?

标签: c# sql sql-server decimal


【解决方案1】:

我只是猜测,但您输入的数字可能为3,24,并以逗号作为小数点分隔符(欧洲大多数国家都这样做)。

当您使用 CultureInfo.InvariantCulture.NumberFormat 时,这将转换为 324

将您的代码更改为以下以使用您的文化:

decimal cijena_uzine = Convert.ToDecimal(textBox1.Text, System.Globalization.CultureInfo.CurrentCulture);

【讨论】:

  • 好电话。一旦你提到它,我就尝试了decimal.Parse("3,00"),它实际上返回了 300(在我的文化中)。 (虽然 IMO 应该导致解析错误,因为逗号不在正确的位置)
  • 它不起作用...还是一样,我在输入数字之前尝试了 3,24 和 3.24 结果是一样的:(
  • 那么你调试的时候cijena_uzine的值是多少呢?
  • @KirkWoll 逗号是千位分隔符,这就是它返回它的原因。
  • @Szymon,是的,我知道。 :) 但是虽然1,000 是合法的,但1,00 看起来好像不知道逗号(“千”)分隔符的用途。 ;)
【解决方案2】:

我将变量保留为字符串,它以某种方式工作......

string cijena_uzine = textBox1.Text;             
        try
        {
            spremi_cijenu_obroka.Open();
            cmd = new SqlCommand("Update Vrsta_Obroka set cijena=" +cijena_uzine + " where Šifra_Obroka=1 ;", spremi_cijenu_obroka);

【讨论】:

    猜你喜欢
    • 2014-05-02
    • 1970-01-01
    • 2020-01-05
    • 2017-05-15
    • 1970-01-01
    • 2019-03-27
    • 1970-01-01
    • 2012-04-19
    • 2015-01-20
    相关资源
    最近更新 更多