嵌套插入错误

Nested Insert Into Errors

我创建了这个 Insert Into SQL 查询,它从 table 课程中获取信息,其中包含课程 ID 的文本框与任何课程相匹配。我已经测试了这个查询的工作原理,因为它 returns 数据网格视图中的正确值。

查询的第二部分应该是从用户输入信息的文本框中获取学号和学名。然后把这个转入Less/Studtable.

此 table 有以下专栏

Lesson Name     Lesson ID        Student ID        Student Name      Optional?

我不需要担心可选列,因为它是一个还不需要的复选框,下面是当前不起作用的查询。它 returns 出现以下错误:

Incorrect Syntax near '/'
Incorrect Syntax near 'Test Student Name'

“ ”中的第二个错误始终包含来自学生姓名文本框的信息。

INSERT INTO Less/Stud ([LessonName],[Lesson ID],[Student ID],[Student Name]) 
    SELECT LessonName, LessonID 
    FROM Lessons
    WHERE ClassID ='" + txtClassID.Text + "' 
    AND (SELECT [Student ID], [StudentName] 
    '" + txtStuId.Text + "', '" + txtName.Text + "' "

您需要将所有四列插入到外部 select:

INSERT INTO Less/Stud ([LessonName],[Lesson ID],[Student ID],[Student Name]) 
    SELECT LessonName, LessonID, '" + txtStuId.Text + "', '" + txtName.Text + "' "
    FROM Lessons
    WHERE ClassID ='" + txtClassID.Text + "' 

"Less/Stud" 是你的 table 名字吗?我建议把它放在引号中,因为 / 似乎混淆了数据库。

WHERE 子句似乎也不完整。子选择正在开始,但从未完成。

你也应该只把你真正想要插入数据的字段放在第一行。由于您只在 SELECT 子句中提供了 2 个值,因此您无法定义要插入的 4 个字段。

编辑:根据您的说明,原来您想将文本框中的值插入到学生 ID 和学生姓名字段中。我已经更改了我建议的查询以反映这一点。我无法对此进行测试,所以我可能会有一些不匹配的引号,但我认为它应该是这样的:

"INSERT INTO [Less/Stud] ([LessonName],[Lesson ID],[Student ID],[StudentName]) 
SELECT LessonName
, LessonID
,  '" + txtStuId.Text + "'
, '" + txtName.Text + "' 
FROM Lessons
WHERE ClassID ='" + txtClassID.Text + "' "

您可能需要考虑使用 String.Format() 方法将文本框值放入 SQL 字符串中。我个人认为这样字符串会更具可读性。它看起来像这样:

var yourQuery = String.Format(
            "INSERT INTO [Less/Stud] ([LessonName],[Lesson ID],[Student ID],[StudentName]) SELECT LessonName, LessonID, '{0}', '{1}' FROM Lessons WHERE ClassID ='{2}' "
            , txtStuId.Text
            , txtName.Text
            , txtClassId.Text
            );

将 SQL 语句本身分成多行也可能是个好主意,尤其是对于更长 and/or 更复杂的语句。

您的查询有两个错误。

  1. 如果您的 table 是 Less/Stud 那么您必须用方括号调用 table 名称,例如 [Less/Stud]

  2. 您的 Insert 查询有 4 列,但您的 SELECT 查询只有 2 列。那也必须改变。

最重要的是,您的查询很容易受到 SQL 注入。尝试使用 parameterized 查询。