所以我有一个标签显示用户的用户名。我已使用此值返回其ID,然后我将其附加到标签上。我使用execute scalar来执行此操作,因为我不确定如何在标签上获取单个值。
这很好用。然后我使用标签中的ID并将其放在另一个表中。我可以做两次,然后页面崩溃说......
“子查询返回的值超过1。当子查询跟随=,!=,<,< =,>,> =或子查询用作表达式时,不允许这样做。”
但是我不明白。我不从页面上的第二个表格中提取任何内容。我不知道为什么它会影响它。我觉得我已经尝试了一切。取出将ID发布到标签的行可以让页面运行,但我需要它。
Label2.Text = User.Identity.Name
Dim connetionString As String
Dim cnn As SqlConnection
Dim cmd As SqlCommand
Dim sql As String
connetionString = "Data Source=(LocalDB)\v11.0;AttachDbFilename=|DataDirectory|\FYPMS_DB.mdf;Integrated Security=True"
sql = "SELECT SupID FROM Supervisor WHERE (Email = @Email)"
cnn = New SqlConnection(connetionString)
Try
cnn.Open()
cmd = New SqlCommand(sql, cnn)
cmd.Parameters.Add(New SqlParameter("@Email", User.Identity.Name))
Dim supid1 As Int32 = Convert.ToInt32(cmd.ExecuteScalar())
cmd.Dispose()
cnn.Close()
Label1.Text = supid1.ToString
Catch ex As Exception
MsgBox("Can not open connection ! ")
End Try
End Sub
答案 0 :(得分:0)
这应该为您返回第一个结果。此外,对于诸如连接,命令和读取器之类的对象使用块也是一个好主意。
Using cn = New SqlConnection("Data Source=(LocalDB)\v11.0;AttachDbFilename=|DataDirectory|\FYPMS_DB.mdf;Integrated Security=True")
cn.Open()
Using cmd = New SqlCommand("SELECT SupID FROM Supervisor WHERE Email = @Email", cn)
cmd.Parameters.AddWithValue("@Email", User.Identity.Name)
Using dr = cmd.ExecuteReader
If dr.Read Then
Label1.Text = CInt(dr("SupID"))
End If
End Using
End Using
End Using
答案 1 :(得分:0)
如果您不确定该表中的同一封电子邮件有多行,则可以将查询更改为以下内容,这对您executescalar
有效。
SELECT TOP 1 SupID FROM Supervisor WHERE (Email = @Email)
答案 2 :(得分:0)
非常抱歉!但是,你是对的!在后台还有另一个查询,我从未注意到它影响了所有这些。很抱歉