0

私はmysqlネットコネクタを使用していて、いくつかのデータを挿入したいのですが、datetimeなしでは機能しますが、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 構文にエラーがあります。near 'VALUES('','0007-12-2012 00:00:00 ', '0007-12-2012 00:00:00

私のwinform oRDER_DATEDateTimePicker.TextとdATE_SHIPMENTDateTimePicker.Textは短い日時です。

ありがとう

4

3 に答える 3

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
于 2012-12-07T13:48:59.203 に答える
0

MySqlDbType.DateTimeDateTimeパラメータとして望んでいて、 ではありませんstring

使用DateTime.Parse(oRDER_DATEDateTimePicker.Text)またはDateTime.ParseExact(oRDER_DATEDateTimePicker.Text, format)フォーマットは、選択した日付のカスタム フォーマットです。それは、"yyyy-DD-MM"あなたが望む、または必要とするものであれば何でもかまいません。

于 2012-12-07T13:36:30.840 に答える
0

(より広い問題の 1 つの例として) を追加する代わりに、(etc) をdATE_SHIPMENTDateTimePicker.Text使用して実際の値を として取得し、それを追加します。DateTime.ParseDateTime

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 について何も知らない別のメソッドを呼び出してデータベースと通信します。

もう 1 つの方法は、UI が型指定されたメンバーを使用してオブジェクトを作成し、それを渡すことです。

void CreateOrder(Order order)
{
    ...
}

次に、UI は次のことを行います。

var order = new Order();
order.Id = /* todo... */
/* ...for each property... */
CreateOrder(order);
于 2012-12-07T13:34:01.583 に答える