0

嘿,我正在尝试运行此查询:

command.UseSqlCommand("INSERT INTO DisplayOrders Values ('" + OrderId.Text + "','" + "(SELECT ProductId FROM Products WHERE ProductName =N'" + listBox1.Text + "')','" + listBox1.Text + "','" + OrderQuantity.Text + "','" + TotalCost.Text + "')");

现在command.UseSqlCommand只是运行查询,但我不断收到此错误: 'intel' 附近的语法不正确

(英特尔是“产品名称”(我从这里得到:

SELECT ProductId FROM Products WHERE ProductName =N'" + listBox1.Text + "'

编辑:这是命令的值,(在'intel'附近得到'不正确的语法')

INSERT INTO DisplayOrders 
Values ('2', '(SELECT ProductId FROM Products WHERE ProductName =N'Intel Quad Core i5 3470 3.2Ghz 6MB Tray')','Intel Quad Core i5 3470 3.2Ghz 6MB Tray','1','900')"
4

4 回答 4

3

正如其他人所说,您应该使用参数化查询来克服这个问题。但是要“按原样”回答您的问题...

您需要双引号关闭您的单引号。查看这一点的最佳方法是将其存储到字符串中并调试/写入以进行跟踪。如何在此处双重关闭查询的示例:如何使用单引号 sql server 2005 插入文本

按原样,您的查询字符串将包含如下内容:

INSERT INTO DisplayOrders Values ('1234','(SELECT ProductId FROM Products WHERE ProductName =N'Fred')'...

但它确实应该包含这样的内容(注意'''):

INSERT INTO DisplayOrders Values ('1234','(SELECT ProductId FROM Products WHERE ProductName =N'''Fred''')'...

否则,您将关闭INSERT ValuesnotSELECT语句。

于 2013-04-10T10:02:00.263 回答
2

只需删除 SELECT 语句周围的单引号

command.UseSqlCommand("INSERT INTO DisplayOrders Values ('" + OrderId.Text + "'," + 
         "(SELECT ProductId FROM Products WHERE ProductName =N'" + listbox.Text +"'), " +
         "'" + listBox1.Text + "','" + OrderQuantity.Text + "','" + TotalCost.Text + "')");

但是,如果您的任何列表框项目包含单引号,则此代码将失败。
我已经阅读了您关于 SQL 注入在这里不是问题的评论,但即使在学校作业中使用它也是一个好习惯。至少改成

string itemName = listBox1.Text.Replace("'", "''");
command.UseSqlCommand("INSERT INTO DisplayOrders Values ('" + OrderId.Text + "'," + 
         "(SELECT ProductId FROM Products WHERE ProductName =N'" + itemName +"'), " +
         "'" + itemName + "','" + OrderQuantity.Text + "','" + TotalCost.Text + "')");
于 2013-04-10T10:15:53.623 回答
0

需要更换这个

  command.UseSqlCommand("INSERT INTO DisplayOrders Values ('" + OrderId.Text + "'," + "(SELECT IdProduct FROM Products WHERE ProductName =N'" + listBox1.Text + "'),'" + listBox1.Text + "','" + OrderQuantity.Text + "','" + TotalCost.Text + "')");
于 2013-04-10T10:14:04.307 回答
-2
SELECT ProductId FROM Products WHERE ProductName =N'" + listBox1.Text + "'

将返回一个表,因此在插入语句中使用它是错误的。

而不是使用这个,单独执行这个命令然后获取返回值,然后单独执行插入语句

于 2013-04-10T10:03:55.390 回答