ExecuteNonQuery'附近的语法不正确,'

时间:2016-05-17 09:57:37

标签: sql

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。 有人可以帮我这个吗?

提前致谢

5 个答案:

答案 0 :(得分:2)

还需要日期报价:

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

但是你知道这是非常危险的代码。你真的应该使用参数化查询来做这些事情!

如果用户在“标题”文本框中输入以下内容,您将遇到麻烦:

  

一些文字',1,1,' 20100101'); drop table dbo.Orders -

你被解雇了一天。

答案 1 :(得分:1)

错误很可能就在这里:

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

您必须确保DateTime.Now的字符串表达式在SQL中是可解析的。

  1. 不要将您的值放入SQL命令(阅读SQL注入)
  2. 了解参数以及如何传递参数
  3. 永远不要依赖文化相关的日期时间格式......(阅读关于ISO8601或ODBC)

答案 2 :(得分:1)

猜测这是从c#代码中调用的,你应该使用参数而不是将字符串连接成sql语句。

这样可以保护您免受std::weak_ptr攻击并修复语法错误:

这段代码可能适合你,虽然它写在这里,我没有测试它:

var allRows = document.getElementById('destination').rows;
    for(var i=0; i< allRows.length; i++) {
        if (allRows[i].cells.length > 0) {
            allRows[i].deleteCell(-1);// logic to remove the last column
            allRows[i].deleteCell(0);// logic to remove the first column of the modified table.     
      } 
}

答案 3 :(得分: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();

即使在修改之后,如果您收到错误,请告诉标题,席位,付款,日期时间的数据类型

答案 4 :(得分: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();