所以这是我的代码如下。
qry = "SELECT * FROM `tblsubjects` WHERE `GRADELEVEL` = " & lblgrade.Text & " AND `SUBJECTNAME` <> (SELECT `SUBJECTNAME` FROM `tblschedule` WHERE `SECTIONNAME` = '" & lblsect.Text & "')"
它来自于vb应用程序。我认为错误来自查询。我正在制作一个调度系统。在该查询中,我试图加载尚未在该等级级别上安排的主题和部分到组合框。但是当我尝试在此部分添加更多计划时,会出现该错误。
enter image description here 这是我在这个函数上的完整代码:
Private Sub subjectload()
con = New MySqlConnection
con.ConnectionString = "server=localhost;user id=root;password='';database=kccbeslis"
If DataGridView.Rows.Count > 0 Then
Try
con.Open()
qry = "SELECT * FROM `tblsubjects` WHERE `GRADELEVEL` = " & lblgrade.Text & " AND `SUBJECTNAME` <> (SELECT `SUBJECTNAME` FROM `tblschedule` WHERE `SECTIONNAME` = '" & lblsect.Text & "')"
cmd = New MySqlCommand(qry, con)
rdr = cmd.ExecuteReader
While rdr.Read
Dim subname = rdr.GetString("SUBJECTNAME")
cbsubject.Items.Add(subname)
End While
con.Close()
Catch ex As Exception
MessageBox.Show(ErrorToString)
End Try
Else
Try
con.Open()
qry = "SELECT * FROM `tblsubjects` WHERE `GRADELEVEL` = " & lblgrade.Text & ""
cmd = New MySqlCommand(qry, con)
rdr = cmd.ExecuteReader
While rdr.Read
Dim subname = rdr.GetString("SUBJECTNAME")
cbsubject.Items.Add(subname)
End While
con.Close()
Catch ex As Exception
MessageBox.Show(ErrorToString)
End Try
End If
End Sub
帮帮我吧!
答案 0 :(得分:1)
子查询SELECT
SUBJECTNAME FROM
tblschedule WHERE
SECTIONNAME = '" & lblsect.Text & "'
会产生超过1条记录。您正在使用&lt;&gt;而不是in,使用Not In子句并尝试。
答案 1 :(得分:0)
是的,这导致您的子查询返回多于1条记录,<>
运算符需要标量值和值列表。您应该使用NOT IN
运算符
AND `SUBJECTNAME` NOT IN (SELECT `SUBJECTNAME` FROM `tblschedule` WHERE `SECTIONNAME` = '" & lblsect.Text & "')
顺便说一句,你知道你发布的代码非常容易受到 SQL Injection 的攻击。您应该考虑使用参数化查询来避免相同的问题。
答案 2 :(得分:0)
看来你的子选择(SELECT subjectname FROM tblscheduler where ..)有多个时间表,并且具有相同的&#39; sectionname&#39;你提供,因此返回超过1行。
您确定每个tblschedule条目的sectionname列是唯一的吗?尝试计数和分组,看看你是否有多条记录;
List<cli::array<String^>^>^ ls = gcnew List<cli::array<String^>^>();
您可以尝试替换&lt;&gt;如果你需要多行,请使用NOT IN。
答案 3 :(得分:0)
使用NOT IN而不是&lt;&gt;
qry =&#34; SELECT * FROM tblsubjects WHERE GRADELEVEL =&#34; &安培; lblgrade.Text&amp; &#34; AND SUBJECTNAME NOT IN(选择SUBJECTNAME来自tblschedule,其中SECTIONNAME =&#39;&#34;&amp; lblsect.Text&amp;&#34;&#39;)&#34;