0

我正在使用 mysql 网络连接器,我想插入一些数据,没有日期时间它可以工作,但有日期时间它会出错。我的代码是;

da.InsertCommand = new MySqlCommand("INSERT INTO orders( VALUES('',@ORDER_DATE, @DATE_SHIPMENT, @PRODUCT_ID, @QUANTITY, @CUSTOMER_ID, @INVOICE_FEE, @PROD_TYPE, @BRAND, @MODEL, @PRICE, @VAT)", cs);
da.InsertCommand.Parameters.Add("ORDER_DATE", MySqlDbType.DateTime).Value = oRDER_DATEDateTimePicker.Text;
da.InsertCommand.Parameters.Add("DATE_SHIPMENT", MySqlDbType.DateTime).Value = dATE_SHIPMENTDateTimePicker.Text;
da.InsertCommand.Parameters.Add("PRODUCT_ID", MySqlDbType.Int32).Value = pRODUCT_IDTextBox.Text;
da.InsertCommand.Parameters.Add("QUANTITY", MySqlDbType.Decimal).Value = qUANTITYTextBox.Text;
da.InsertCommand.Parameters.Add("CUSTOMER_ID", MySqlDbType.Int32).Value = textiD.Text;
da.InsertCommand.Parameters.Add("INVOICE_FEE", MySqlDbType.VarChar).Value = comboBoxfee.Text;
da.InsertCommand.Parameters.Add("PROD_TYPE", MySqlDbType.VarChar).Value = pROD_TYPETextBox.Text;
da.InsertCommand.Parameters.Add("BRAND", MySqlDbType.VarChar).Value = bRANDTextBox.Text;
da.InsertCommand.Parameters.Add("MODEL", MySqlDbType.VarChar).Value = mODELTextBox.Text;
da.InsertCommand.Parameters.Add("PRICE", MySqlDbType.Decimal).Value = pRICETextBox.Text;
da.InsertCommand.Parameters.Add("VAT", MySqlDbType.Decimal).Value = vATTextBox.Text;


cs.Open();
da.InsertCommand.ExecuteNonQuery();
cs.Close();

错误是:您的 SQL 语法有错误;检查与您的 MySQL 服务器版本相对应的手册,以在 'VALUES('','0007-12-2012 00:00:00', '0007-12-2012 00:00:00 附近使用正确的语法

我猜我的日期时间格式没有被mysql识别,在我的winform oRDER_DATEDateTimePicker.Text 和dATE_SHIPMENTDateTimePicker.Text 是短日期时间。

谢谢

4

3 回答 3

0

您的查询中似乎有一些拼写错误:

da.InsertCommand = new MySqlCommand("INSERT INTO orders( VALUES('',@ORDER_DATE, @DATE_SHIPMENT, @PRODUCT_ID, @QUANTITY, @CUSTOMER_ID, @INVOICE_FEE, @PROD_TYPE, @BRAND, @MODEL, @PRICE, @VAT)", cs);
                                                      ^^^     ^^

VALUES在和之间放一个空格(,并去掉 后面的括号orders

da.InsertCommand = new MySqlCommand("INSERT INTO orders VALUES ('',@ORDER_DATE, @DATE_SHIPMENT, @PRODUCT_ID, @QUANTITY, @CUSTOMER_ID, @INVOICE_FEE, @PROD_TYPE, @BRAND, @MODEL, @PRICE, @VAT)", cs);

其次,(正如其他人所提到的),您没有使用正确的 DateTime 格式。MySQL 将接受DateTime.Parse作为输入,但它也应该接受以下格式的字符串:

yyyy-MM-dd HH:mm:ss
于 2012-12-07T13:48:59.203 回答
0

而不是添加 (作为更广泛问题的单个示例) dATE_SHIPMENTDateTimePicker.Text,使用DateTime.Parse(etc) 将实际值作为 a DateTime,并添加:

var when = DateTime.Parse(dATE_SHIPMENTDateTimePicker.Text);
da.InsertCommand.Parameters.Add(
   "DATE_SHIPMENT", MySqlDbType.DateTime).Value = when;

这同样适用于所有参数;整数、日期、小数等。事实上,在同一个方法中简单地使用数据库代码(命令等)和 UI 代码(文本框)告诉我有些事情是非常错误的:理想情况下,你可以通过某个方法来获得它输入参数:

void CreateOrder(int foo, string bar, DateTime baz, decimal blop, ...)
{
   ...
}

UI 的工作是将人工输入转化为对其他层有意义的真实值,例如您的数据访问代码。

正确完成后,UI 将处理解析,然后调用一个对 UI一无所知的单独方法与数据库对话。

另一种方法是让 UI 构建具有类型成员的对象并将其传递:

void CreateOrder(Order order)
{
    ...
}

然后用户界面会:

var order = new Order();
order.Id = /* todo... */
/* ...for each property... */
CreateOrder(order);
于 2012-12-07T13:34:01.583 回答
0

MySqlDbType.DateTime想要DateTime作为参数,而不是string.

使用DateTime.Parse(oRDER_DATEDateTimePicker.Text)DateTime.ParseExact(oRDER_DATEDateTimePicker.Text, format)其中格式是您选择的日期的自定义格式。它可以是"yyyy-DD-MM"你想要或需要的任何其他东西。

于 2012-12-07T13:36:30.840 回答