当从SQL数据库加载表单时,我试图将最后一行的选定列中的值放入标签1和标签2中。我的代码无法正常工作。我怎样才能做到这一点? 我的代码在这里:
Private Sub getvalue()
Dim strConn = "server= PANKAJ\SQLEXPRESS; database = pankaj billing software; integrated security=true"
Dim sqlConn = New SqlConnection(strConn)
sqlConn.Open()
Dim sqlcmd As New SqlCommand("select 22ktrate, 21ktrate from ratedata where max(rateid) = @rateid", sqlConn)
Dim myreader As SqlDataReader
myreader = sqlcmd.ExecuteReader()
myreader.Read()
If myreader.HasRows Then
Label1.Text = myreader.Item("22ktrate")
Label2.Text = myreader.Item("21ktrate")
End If
sqlConn.Close()
End Sub
答案 0 :(得分:2)
我注意到的最大问题是没有设置@rateid
参数。
Private Sub getvalue()
Dim conn As String = "server= PANKAJ\SQLEXPRESS; database = pankaj billing software; integrated security=true"
Dim sql As String = "select [22ktrate], [21ktrate] from ratedata where max(rateid) = @rateid"
Using sqlConn As New SqlConnection(conn), _
sqlcmd As New SqlCommand(sql, sqlConn)
'This was missing. You need to know what to set for 1234 here.
'I suggest adding it as argument to the method.
sqlcmd.Parameters.Add("@rateid", SqldbType.Int).Value = 1234
sqlConn.Open()
Using myreader As SqlDataReader = sqlcmd.ExecuteReader()
If myreader.Read() Then
Label1.Text = myreader("22ktrate").ToString()
Label2.Text = myreader("21ktrate").ToString()
End If
End Using
End Using
End Sub
我也对代码进行了其他结构更改,您应该遵循这种新模式。问题中的原始代码有几个不太明显的问题,这些问题最终可能导致面向用户的问题,例如,如果引发异常,则无法关闭连接。
最后,我在评论中看到了这一点:
我只想从SQL数据库的最后一行选择两个列值
该select语句中没有ORDER BY子句。如果没有ORDER BY子句,则行的顺序是不确定的,并且Sql Server可以自由地以您认为方便的任何顺序为您提供行。 “最后一行”没有有意义的定义。如果这很重要,则必须在sql语句中添加ORDER BY子句...此时,最好反转顺序,而只记录 first 记录,而不是迭代整个结果集。如果没关系...最好还是走第一行而不是遍历整个集合。无论哪种情况,您都可以在SQL命令中添加TOP 1-如果甚至有可能有多个记录与max(rateid)
相匹配。
答案 1 :(得分:0)
实际上,我可以看到您已经在使用阅读器来检查它是否具有行。 读者阅读后,只需设置最后一个值即可。
这假设您的SQL查询的Order by
是正确的(asc
或desc
)
更改此部分: myreader = sqlcmd.ExecuteReader()
myreader.Read()
If myreader.HasRows Then
Label1.Text = myreader.Item("22ktrate")
Label2.Text = myreader.Item("21ktrate")
End If
sqlConn.Close()
到
While myreader.Read()
Label1.Text = myreader.Item("22ktrate")
Label2.Text = myreader.Item("21ktrate")
End While
sqlConn.Close()