【问题标题】:Incorrect decimal value: for column mysql十进制值不正确:对于列 mysql
【发布时间】:2014-10-07 18:26:28
【问题描述】:

我有一个应用程序可以将数据插入和更新到我的 MySQL 数据库中。插入数据就像一个魅力,但是当我尝试更新数据时,我收到以下异常:

Incorrect decimal value: '1,5' for column 'NumberOfHour' at row 1

这是我用于更新的代码:

public void updateRecord(int activityID, string description, int projectID, int customerID, int hourID, int employeeID, int departmentID, int superviserID, string fixedFlex, string employeeType, decimal NumberOfHour, DateTime date, int CallID)
{

        MySqlConnection conn = new MySqlConnection("database=hourregistration;server=193.78.140.90;username=Hour");

        conn.Open();
        using (MySqlCommand cmd = new MySqlCommand(string.Format("UPDATE activity SET Description='{0}',ProjectID='{1}',CustomerID='{2}',HourID='{3}',EmployeeID='{4}',DepartmentID='{5}',SuperviserID='{6}',FixedFlex='{7}',EmployeeType='{8}',NumberOfHour='{9}',Date='{10}',CallID='{11}' WHERE ActivityID='{12}';", description, projectID, customerID, hourID, employeeID, departmentID, superviserID, fixedFlex, employeeType, NumberOfHour, date.ToString("yyyy-MM-dd"), CallID, activityID),conn))
        {
            cmd.ExecuteNonQuery();
        }
}

当我更新没有十进制值的数据时(例如:5)它很好,但是当我尝试使用逗号时(例如:5,1)我收到异常..

这里是创建表语句:

CREATE TABLE `activity` (
  `ActivityID` int(10) unsigned NOT NULL AUTO_INCREMENT,
  `Description` varchar(100) DEFAULT NULL,
  `ProjectID` int(10) unsigned NOT NULL,
  `CustomerID` int(10) unsigned DEFAULT NULL,
  `HourID` varchar(1) NOT NULL DEFAULT '4',
  `EmployeeID` int(10) unsigned NOT NULL,
  `DepartmentID` int(10) unsigned DEFAULT NULL,
  `SuperviserID` int(10) unsigned DEFAULT NULL,
  `FixedFlex` varchar(10) DEFAULT NULL,
  `EmployeeType` varchar(45) DEFAULT NULL,
  `NumberOfHour` decimal(10,2) DEFAULT '0.00',
  `Date` date DEFAULT NULL,
  `External` tinyint(1) DEFAULT '0',
  `CallID` int(10) DEFAULT '0',
  PRIMARY KEY (`ActivityID`) USING BTREE
) ENGINE=InnoDB AUTO_INCREMENT=54325 DEFAULT CHARSET=latin1 AVG_ROW_LENGTH=20 ROW_FORMAT=FIXED;

【问题讨论】:

  • 你能告诉我们你的活动表的创建表语句吗?
  • @Matt 当然,看看我的编辑:)

标签: c# mysql insert-update


【解决方案1】:

我使用了这个 FILTER_FLAG_ALLOW_FRACTION

$value_in_usd=filter_input(INPUT_POST,'value_in_usd',FILTER_SANITIZE_NUMBER_FLOAT,FILTER_FLAG_ALLOW_FRACTION);

在 INSERT 中使用的 $value_in_usd 变量

【讨论】:

    【解决方案2】:

    我自己解决了。当我更改 MySQL 上的数据类型,然后在 DataSet 中更改它时,就会发生这种情况。我找到的解决方案是删除数据集中的列,然后再次添加相同的列,但使用 TableAdapter 中的“配置”菜单项。

    希望对你有用

    【讨论】:

      【解决方案3】:

      您可以将逗号替换为点。 (我认为问题出在格式上)

      string a = sum.Text;
      

      a = a.Replace(",", ".");

      sum.Text = a;

      【讨论】:

        【解决方案4】:

        我认为问题出在格式上。您正在尝试添加“1,5” - 尝试使用“1.5”。你能用点代替逗号吗?

        【讨论】:

        • 当我将“1,5”更改为“1.5”时,最终值为“15.00”
        • 如何将其更改为 15.00?
        • 好吧,当我将 1.5 插入数据库然后查看数据库中的行时,值是 15.00
        • 如果您将“1.5”作为字符串值传递,您可以尝试 SQL 查询吗?它应该将其正确添加到 SQL 中。
        • 出于某种原因,这行得通。字符串值有效,但十进制值无效。好吧,我只使用一个字符串;)谢谢!
        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2022-10-01
        • 2022-12-03
        • 2018-11-19
        • 1970-01-01
        • 1970-01-01
        • 2020-05-16
        相关资源
        最近更新 更多