c #net连接器插入mysql系统datetime错误

时间:2012-12-07 13:30:18

标签: c# mysql datetime

我正在使用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是短日期时间。

感谢

3 个答案:

答案 0 :(得分:0)

使用dATE_SHIPMENTDateTimePicker.Text(等)将实际值作为DateTime.Parse,而不是添加(作为更广泛问题的单个示例)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的 nothing 以与数据库通信。

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

void CreateOrder(Order order)
{
    ...
}

然后用户界面:

var order = new Order();
order.Id = /* todo... */
/* ...for each property... */
CreateOrder(order);

答案 1 :(得分:0)

MySqlDbType.DateTime希望DateTime作为参数,而不是string

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

答案 2 :(得分: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