![](/img/trans.png)
[英]Insert/Update SQL DateTime From asp.net(C#) System.dateTime
[英]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.