早安!希望有人可以帮助我,提前。我想使用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
答案 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 是否包含日期或字符串。在后一种情况下,您应该将该字符串转换为日期并将该日期设置为值。