2016-12-08 16 views
-1
string strQuery = "INSERT INTO [Order] (Quantity, Type, DateTime) 
values(" + qty + "," + type + "," + dtstmp.ToString("yyyy-mm-dd hh:mm:ss.fff") + ")"; 

SQLクエリ '12'SQL DateTime書式エラー

Exception thrown: 'System.Data.Odbc.OdbcException' in System.Data.dll 

近く

INSERT INTO [Order] (Quantity, Type, DateTime) values(1,'q',2016-44-08 12:44:39.128) 

不適切な構文エラーは、誰かが私には、この構文エラーを見つけ出す手助けすることはできますか?

+0

日が '「'と '」'内にあるべきで、また、あなたが同様の注入を気にする –

+0

使用MMを「YYYY-MM-DD」を持っています。あなたは 'mm'を使用しており、それはあなたに月の出力44を与えます。これを資本金MMに変更すると、それに対応する月が与えられます。 – Anoopkumar

+0

[パラメータ化されたクエリ](http://blog.codinghorror.com/give-me-parameterized-sql-or-give-me-death/)を常に使用してください。この種の文字列連結は、[SQL Injection](http://en.wikipedia.org/wiki/SQL_injection)攻撃のために開かれています。 **あなたの 'DateTime'値を文字列表現で**保存しないでください。 'dtstmp'を直接渡してください。 [間違ったデータタイプを選択する](「嫌な習慣」:http://sqlblog.com/blogs/aaron_bertrand/archive/2009/10/12/bad-habits-to-kick-using-the-wrong-data- type.aspx) –

答えて

0

datetime値は一重引用符で囲む必要があります。あなたのクエリがハッカーのための広い扉を開いているので、あなたの問題を解決しないであろうあなたの日付ストリングの前後に'を追加することによって、この

string strQuery = "INSERT INTO [Order] (Quantity, Type, DateTime) 
values(" + qty + "," + type + ",'" + dtstmp.ToString("yyyy-mm-dd hh:mm:ss.fff") + "')"; 
0

実際に簡単な修正をお試しください。このプレーンテキスト/連結文字列の代わりに、パラメータ化されたクエリを使用することをお勧めします。明らかにこの問題も修正されます。このためのコードは次のようになります。

string strQuery = "INSERT INTO [Order] (Quantity, Type, DateTime)Values(@qty,@type,@date)"; 
// create and open connection here 
using (SqlCommand cmdSQL = new SqlCommand(strQuery)) 
{ 
    // assign connection for this comnmand 
    cmdSQL.Parameters.Add("@qty", SqlDbType.Int).Value = qty; 
    cmdSQL.Parameters.Add("@type", SqlDbType.VarChar).Value = type; 
    cmdSQL.Parameters.Add("@date", SqlDbType.DateTime).Value = dtstmp; 
    cmdSQL.ExecuteNonQuery(); 
}