簡體   English   中英

C#網絡連接器插入MySQL系統日期時間錯誤

[英]c# net connector insert into mysql system datetime error

我正在使用mysql net連接器,並且我想插入一些數據,但沒有datetime,但有日期時間,但它給出了錯誤。 我的代碼是

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是短日期時間。

謝謝

代替添加(作為一個更廣泛的問題的單個示例) 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 一無所知的單獨方法與數據庫進行對話。

UI的另一種方法是使用類型化的成員構建對象並將其傳遞給:

void CreateOrder(Order order)
{
    ...
}

然后,UI執行以下操作:

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

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

使用DateTime.Parse(oRDER_DATEDateTimePicker.Text)DateTime.ParseExact(oRDER_DATEDateTimePicker.Text, format) ,其中format是所選日期的自定義格式。 它可以是"yyyy-DD-MM"或您想要或需要的其他任何名稱。

您的查詢中似乎有一些錯別字:

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

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM