查询SQL数据库并将结果存储在变量VB.Net中
我正在尝试使用文本框字段查询SQL数据库,并从数据库中检索一列并将其存储在变量中,这样我就可以在我站点的其他位置使用它。我的web表单要求用户输入一些项目,例如名称和邮政编码查询SQL数据库并将结果存储在变量VB.Net中,sql,vb.net,Sql,Vb.net,我正在尝试使用文本框字段查询SQL数据库,并从数据库中检索一列并将其存储在变量中,这样我就可以在我站点的其他位置使用它。我的web表单要求用户输入一些项目,例如名称和邮政编码 Public sub getdata() Dim strEmailAddress As String = Nothing Dim dt As New DataTable Dim da As New dbConn da.strSQL = " select top 1 [email add
Public sub getdata()
Dim strEmailAddress As String = Nothing
Dim dt As New DataTable
Dim da As New dbConn
da.strSQL = " select top 1 [email address] from [zipcode] " _
& " where [zip code] = '" & strZipCode & "'" _
& " order by [email address] asc"
dt = da.getDt
If dt.Rows.Count > 0 Then
If Not IsDBNull(dt.Rows(0)(0).ToString) Then
strEmailAddress = dt.Rows(0)(0).ToString
End If
End If
End Sub
我的数据库有3列;电子邮件地址、邮政编码和id。我需要输入表单来查询数据库并返回与用户输入的“邮政编码”匹配的“电子邮件地址”
我理解SQL SELECT语句,并且连接字符串是正确的。我的查询正在运行,我似乎不知道如何将返回的“电子邮件地址”存储在变量中。任何帮助都将不胜感激
Dim strconnection As String, strSQL As String, strZipCheck As String
Dim objconnection As OleDbConnection = Nothing
Dim objcmd As OleDbCommand = Nothing
Dim RREmail As String = Nothing
Dim zipQuery As String = zipCodeBox.Text
'connection string
strconnection = "provider=SQLOLEDB;Data Source=XXX.XXX.XXX.XXX;Initial Catalog=XXXXXXX;User ID=XXXX;Password=XXXXXXXX;"
objconnection = New OleDbConnection(strconnection)
objconnection.ConnectionString = strconnection
'opens connection to database
objconnection.Open()
strSQL = "SELECT [EMAIL ADDRESS] FROM ZIPCODEDATA WHERE [ZIP CODE] = @ZIP CODE "
objcmd = New OleDbCommand(strSQL, objconnection)
RREmail = CType(objcmd.ExecuteScalar(), String)
lblRREmail.Text = RREmail
objconnection.Close()
虽然其他评论确实指出了您的语法的特殊缺陷,但我想进一步讨论存储变量的问题。除非调用存储过程并需要输出参数,否则通常不使用参数化连接。相反,这里是我经常做的创建数据库连接并获得结果的步骤 首先,我创建了一个名为dbConn的公共类,这样我就不必写一百万遍了
Imports System.Data.SqlClient
Public Class dbConn
Public Property strSQL As String
Private objConn As SqlClient.SqlConnection = _
New SqlClient.SqlConnection("Data Source=(local)\dev;Initial Catalog=testDataBase;Persist Security Info=False;Integrated Security = true;")
Public Function getDt() As DataTable
Dim Conn As New SqlClient.SqlConnection
Dim da As SqlClient.SqlDataAdapter
Dim dt As New DataTable
Try
objConn.Open()
da = New SqlClient.SqlDataAdapter(strSQL, objConn)
da.Fill(dt)
da = Nothing
objConn.Close()
objConn = Nothing
Catch ex As Exception
objConn.Close()
objConn = Nothing
End Try
Return dt
End Function
End Class
然后从另一个类(假设它的形式为1)调用该函数以获取返回给我的datatable。在这种情况下,我选择Top1来保存您的理智,以防每个邮政编码有多个电子邮件地址
Public sub getdata()
Dim strEmailAddress As String = Nothing
Dim dt As New DataTable
Dim da As New dbConn
da.strSQL = " select top 1 [email address] from [zipcode] " _
& " where [zip code] = '" & strZipCode & "'" _
& " order by [email address] asc"
dt = da.getDt
If dt.Rows.Count > 0 Then
If Not IsDBNull(dt.Rows(0)(0).ToString) Then
strEmailAddress = dt.Rows(0)(0).ToString
End If
End If
End Sub
从那里,您可以在设置strEmailAddress后在sub内使用它,或者您可以将字符串声明作为公共字符串声明移动到sub之外的其他位置使用它,或者您可以创建其他类,例如带有strEmailAddress的公共属性的email类,以便将其传递给其他人,等等
我希望里面有些东西能帮助你理解如何处理你的问题 您在哪里指定邮政编码参数?正如Goose所暗示的,您必须调用
objcmd.Parameters.AddWithValue(“@zip”,zipQuery)
或类似的方法来设置邮政编码参数。这样看来,您的代码已经实现了您想要的功能。请注意,如果用户输入的邮政编码无效怎么办?该查询仍将检索NULL,您不允许这样做。此外,如果您希望@zip_code作为您的参数名,则参数名中不能有空格。另外,请注意,我建议在创建表时避免在列名中使用空格,因为它更容易处理。我知道这是一年前发布的,但我还想指出,任何清理代码(如objConn.Close
)都应该放在Finally
块中。如果在关闭SQL连接的行之前抛出异常,它将不会关闭它。最后将它放入将允许它运行关闭行,即使抛出异常也是如此。