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