2012-12-07 37 views
0

我使用MySQL網絡連接器,我想插入一些數據,沒有日期時間它的工作,但 與日期時間它會給出錯誤。我的代碼是 ;c#網絡連接器插入到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語法錯誤; ('','0007-12-2012 00:00:00','0007-12-2012 00:00:00

請查看與您的MySQL服務器版本對應的手冊

我想我的日期時間格式不被識別的MySQL,在我的winform oRDER_DATEDateTimePicker.Text和dATE_SHIPMENTDateTimePicker.Text短日期時間。

感謝

回答

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搭建與類型的成員的對象,並通過在:

void CreateOrder(Order order) 
{ 
    ... 
} 

然後,UI的作用:

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

MySqlDbType.DateTime希望DateTime作爲參數,而不是string

使用DateTime.Parse(oRDER_DATEDateTimePicker.Text)DateTime.ParseExact(oRDER_DATEDateTimePicker.Text, format)格式是您選擇日期的自定義格式。它可以是"yyyy-DD-MM"或任何你想要或需要的東西。

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