我已创建此Insert Into SQL查询,它从表课程中获取包含课程ID的文本框与任何课程相匹配的信息。我已经测试了此查询的工作原理,因为它将正确的值返回到./ / p>中的数据网格视图
查询的第二部分应该从用户输入信息的文本框中获取学生ID和学生姓名。然后将其传输到Less / Stud表中。
此表格包含以下列
Lesson Name Lesson ID Student ID Student Name Optional?
我不需要担心Optional列,因为这是一个不需要的复选框,下面是当前不起作用的查询。它返回以下错误:
Incorrect Syntax near '/'
Incorrect Syntax near 'Test Student Name'
&#39>内的第二个错误'始终包含学生姓名文本框中的信息。
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 + "' "
答案 0 :(得分:1)
您需要将所有四列插入外部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 + "'
答案 1 :(得分:0)
“Less / Stud”是你的桌名吗?我建议把它放在引号中,因为/似乎混淆了数据库。
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语句本身分解为多行也可能是一个好主意,特别是对于更长和/或更复杂的语句。
答案 2 :(得分:0)
您的查询中有两个错误。
如果您的表格为Less/Stud
,那么您必须使用方括号调用表格名称,例如[Less/Stud]
您的Insert
查询有4列,但您的SELECT
查询只有2列。那也必须改变。
最重要的是,您的查询很容易出现SQL注入。尝试使用parameterized查询。