使用vb.net插入mysql时错误的十进制值

时间:2019-05-10 07:27:14

标签: mysql vb.net

早安!希望有人可以帮助我,提前。我想使用vb.net将1,000,500.00(从文本框输入)插入mysql数据库,但出现此错误(列'Amount at row 1'的十进制值'1,000,500.00'不正确)

==插入代码==

Query = "INSERT INTO tbl_bills(payee_id,DueDate,Amount,account_id) values 
('" + payee_ID_EnterBills + "','" & cmbbx_EBdueDate.Value.ToString("yyyy-MM-dd") & "','" & txtbx_EBamount.Text & " ', '" + account_ID_EnterBills + "')"

注意:1,000,500.00 ----用户在(txtbx_EBamount)文本框中输入

==我的创建表语句==

CREATE TABLE `tbl_bills` (
  `bills_id` int(6) NOT NULL AUTO_INCREMENT,
  `payee_id` int(3) DEFAULT NULL,
  `DueDate` date DEFAULT NULL,
  `Amount` decimal(10,2) DEFAULT NULL,
  `account_id` int(3) DEFAULT NULL,
  `bill_Status_id` smallint(1) DEFAULT '1',
  PRIMARY KEY (`bills_id`),
  KEY `FK_tbl_bills` (`payee_id`),
  KEY `FK_tbl_bills2` (`account_id`),
  KEY `FK_tbl_bills_2` (`bill_Status_id`),
  CONSTRAINT `FK_tbl_bills` FOREIGN KEY (`payee_id`) REFERENCES `tbl_payee` (`payee_id`),
  CONSTRAINT `FK_tbl_bills2` FOREIGN KEY (`account_id`) REFERENCES `tbl_account` (`account_id`),
  CONSTRAINT `FK_tbl_bills_2` FOREIGN KEY (`bill_Status_id`) REFERENCES `tbl_billingstatus` (`bill_status_id`)
) ENGINE=InnoDB AUTO_INCREMENT=10 DEFAULT CHARSET=latin1

1 个答案:

答案 0 :(得分:0)

执行sql命令的唯一正确方法不是通过字符串串联,而是希望服务器可以理解您传递的数据。正确的方法是通过如下所示的参数化查询。

Dim amount as Decimal

if decimal.TryParse(txtbx_EBamount.Text, amount) Then

   Query = "INSERT INTO tbl_bills(payee_id,DueDate,Amount,account_id) 
            values (@identer,@duedate,@amountm @idaccount)"
   Dim cmd As MySqlCommand = new MySqlCommand(Query, connection)
   cmd.Parameters.Add("@identer", MySqlDbType.Int32).Value = payee_ID_EnterBills
   cmd.Parameters.Add("@duedate", MySqlDbType.Date).Value = cmbbx_EBdueDate.Value
   cmd.Parameters.Add("@amountm", MySqlDbType.Decimal).Value = amount
   cmd.Parameters.Add("@idaccount", MySqlDbType.Int32).Value = account_ID_EnterBills
   cmd.ExecuteNonQuery()
else
   ' Message for invalid input in txtbx_EBamount
End If

请注意,通过这种方式,您可以在查询文本中为每个占位符创建参数,而这些参数恰好指定了数据类型。当然,您需要将参数的Value属性设置为预期数据类型的变量。因此,例如,我不知道您的 cmbbx_EBdueDate.Value 是否包含日期或字符串。在后一种情况下,您应该将该字符串转换为日期并将该日期设置为值。