簡體   English   中英

ExecuteNonQuery','附近的語法不正確

[英]ExecuteNonQuery Incorrect syntax near ','

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類型,席位存儲為int,DateNTime存儲為DateTime。 有人可以幫我弄這個嗎?

提前致謝

日期也需要報價:

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

但這是非常危險的代碼。 您確實應該對此類參數使用參數化查詢!

如果用戶在“標題”文本框中輸入如下內容,則會遇到麻煩:

一些文本”,1、1,“ 20100101”); 刪除表dbo.Orders--

並且您在同一天被解雇。

錯誤很可能在這里:

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

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

  1. 不要將您的值放入SQL逗號(了解有關SQL注入的信息)
  2. 了解有關參數以及如何傳遞參數的信息
  3. 永遠不要依賴於依賴於文化的日期時間格式...(了解ISO8601或ODBC)

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

這既可以保護您免受sql注入攻擊,又可以修復語法錯誤:

該代碼可能應該對您有用,盡管它是在此處編寫的,但我並未對其進行測試:

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();
    }
}

嘗試使用以下

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();

即使在修改之后,如果您遇到錯誤,也請告訴標題,座席,付款,日期NTime的數據類型

您也有格式日期部分。

    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();

暫無
暫無

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

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