2016-05-17 105 views
-1
sqlCommand1 = new SqlCommand("INSERT INTO dbo.Orders(Title,Seats,Payment,DateNTime)"+ 
      "VALUES ('"+ movieName+"',"+numTickets+",'"+creditCardType+"',"+DateTime.Now+")", sqlConnection1); 
     sqlCommand1.Connection.Open(); 
     sqlCommand1.ExecuteNonQuery(); 
     sqlCommand1.Connection.Close(); 

不知道這段代碼有什麼問題。標題和付款存儲爲nvarchar類型,Seats爲int,DateNTime爲DateTime。 有人可以幫助我嗎?ExecuteNonQuery','附近語法不正確

預先感謝日期

+3

使用參數化查詢,而不是將字符串連接成sql語句。這將保護你免受SQL注入攻擊,並解決你的語法錯誤問題。 –

+0

哪個RDBMS(供應商和版本)?他們都有一個函數來獲取當前時間(例如SQL Server中的GETDATE())... – Shnugo

+0

您可以調試此語句並在此處發佈「sqlCommand1」變量中的內容嗎? –

回答

2

需要報價,以及:

,'" + DateTime.Now.ToString("yyyyMMdd") + "')" 

但是,這是你知道很危險的代碼。你真的應該使用參數化查詢這樣的事情!

您將有麻煩,如果用戶在標題文本像這樣進入:

some text', 1, 1, '20100101'); drop table dbo.Orders--

而在同一天你被解僱了。

+0

可能是OP需要那裏的時間... – Shnugo

+0

@Shnugo,可能是,他會簡單地改變,我希望:) –

+0

@GiorgiNakeuri工作!謝謝!那時候呢?因爲它只顯示日期。如果我想查看日期和時間,是否需要寫「yyyyMMddHHmm」?類似的東西? – Jadenkun

0

嘗試使用以下

sqlCommand1 = new SqlCommand("INSERT INTO dbo.Orders(Title,Seats,Payment,DateNTime)"+ 
      "VALUES ('"+ movieName+"',"+numTickets+",'"+creditCardType+"','"+DateTime.Now+"')", sqlConnection1); 
     sqlCommand1.Connection.Open(); 
     sqlCommand1.ExecuteNonQuery(); 
     sqlCommand1.Connection.Close(); 
即使是修改後

,如果你得到錯誤,請告訴標題,座位,支付的數據類型,DateNTime

1

很可能錯誤就出在這裏:

... ,"+DateTime.Now+")" 

您必須確保DateTime.Now的字符串表達式在SQL中可解析。

  1. 不要把你的價值觀到SQL comman(閱讀有關SQL注入)
  2. 閱讀有關參數以及如何通過他們
  3. 從不依靠文化相關的日期時間格式...(閱讀關於ISO8601或ODBC)
0

你也有格式日期部分。

sqlCommand1 = new SqlCommand("INSERT INTO dbo.Orders(Title,Seats,Payment,DateNTime)"+ 
     "VALUES ('"+ movieName+"',"+numTickets+",'"+creditCardType+"','"+DateTime.Now.ToString("yyyyMMdd")+"')", sqlConnection1); 
    sqlCommand1.Connection.Open(); 
    sqlCommand1.ExecuteNonQuery(); 
    sqlCommand1.Connection.Close(); 
1

猜測這是從c#代碼調用的,您應該使用參數而不是將字符串連接到sql語句中。

這都將保護你免受sql injection攻擊和修復你的語法錯誤:

此代碼也許應該爲你工作,雖然這是寫在這裏,我沒有測試:

using (var sqlConnection1 = new SqlConnection("ConnectionString")) 
{ 
    using (var sqlCommand1 = new SqlCommand("INSERT INTO dbo.Orders(Title,Seats,Payment,DateNTime)" + 
    "VALUES (@movieName, @numTickets, @creditCardType, @DateTime.Now)", sqlConnection1)) 
    { 
     sqlCommand1.Parameters.Add("@movieName", SqlDbType.VarChar).Value = movieName; 
     sqlCommand1.Parameters.Add("@numTickets", SqlDbType.VarChar).Value = numTickets; 
     sqlCommand1.Parameters.Add("@creditCardType", SqlDbType.Int).Value = creditCardType; 
     sqlCommand1.Parameters.Add("@movieName", SqlDbType.DateTime).Value = DateTime.Now; 

     sqlCommand1.Connection.Open(); 
     sqlCommand1.ExecuteNonQuery(); 
    } 
}