【问题标题】:populate listbox from sql db where 3 fields meet textbox values从 sql db 填充列表框,其中 3 个字段满足文本框值
【发布时间】:2014-07-15 08:02:11
【问题描述】:

我正在尝试从 sql 数据库返回列表框中的行。我只希望返回 3 个字段与文本框值匹配的行。目前,如果在 3 个文本框中的任何一个中键入任何内容,列表框将返回所有行。如果没有输入任何内容,则不会显示任何内容(该部分是预期/正确的行为)。 我的代码是:

  Private Sub tireselect_Load(sender As Object, e As EventArgs) Handles MyBase.Load
    m_cn.ConnectionString = "Data Source=localhost;Initial Catalog=tires;Integrated Security=True"
    m_cn.Open()
    'Dim con As New SqlConnection()
    'Dim cmd As String = "Select brand, model, width, aspect, rim, retail from dbo.tires"
    Dim sqltext = "SELECT [ID] ,[brand] ,[model] ,[cost] ,[retail] ,[width] ,[aspect] ,[rim] FROM [tires].[dbo].[tires]"
    Using sqlCon = New SqlConnection("Data Source=localhost;Initial Catalog=tires;Integrated Security=True")
        sqlCon.Open()


        Dim cmd = New SqlCommand(sqltext, sqlCon)
        cmd.Parameters.AddWithValue("@tirewidth", (Int(TireLookup.txtWidth.Text)))
        cmd.Parameters.AddWithValue("@tireaspect", (Int(TireLookup.txtAspect.Text)))
        cmd.Parameters.AddWithValue("@tirerim", (Int(TireLookup.txtRim.Text)))
        cmd.ExecuteNonQuery()
    End Using

    Dim m_da As New SqlDataAdapter("SELECT [ID] ,[brand] ,[model] ,[cost] ,[retail] ,[width] ,[aspect] ,[rim] FROM [tires].[dbo].[tires] where [width]=tirelookup.txtwidth.text AND [aspect]=tirelookup.txtwidth.text AND [rim]=tirelookup.txtrim.text", m_cn)
    Dim myDataSet As New DataSet()
    m_da.Fill(myDataSet, "dbo.tires")
    Dim myDataTable As DataTable = myDataSet.Tables(0)
    Dim tempRow As DataRow
    For Each tempRow In myDataTable.Rows
        ListBox1.Items.Add(tempRow("brand"))
        ListBox2.Items.Add(tempRow("model"))
        ListBox3.Items.Add(tempRow("width") & " / " & tempRow("aspect") & " / " & tempRow("rim"))
        ListBox4.Items.Add("$ " & tempRow("retail") & "   Tire ID=" & (tempRow("ID") - 1))
    Next
End Sub

【问题讨论】:

  • 您没有正确使用您的参数,并且您的操作顺序有缺陷。您需要在where 子句中将@parameter 添加到您的sql 中。不知道为什么你需要两个 sql 语句。
  • 我应该注释掉哪些 SQL 语句? (我对编程很陌生)
  • 根据您的问题,我建议您只需要带有where 子句的那个(第二个)。根据@RobFarley 的建议更新where 子句。
  • 我已经添加了参数,但现在我根本没有得到任何结果。我非常感谢我收到的所有帮助!提前感谢大家的帮助!

标签: sql sql-server vb.net listbox


【解决方案1】:

你需要像这样改变你的谓词:

  where [width]=@tirewidth 
  AND [aspect]=@tireaspect
  AND [rim]=@tirerim

【讨论】:

  • 我已经尝试过了,现在我根本没有得到结果。 :(
  • 您应该能够像这样在 SQL Server Management Studio 中运行查询:DECLARE @tirewidth varchar(50) = 'somevalue'; DECLARE @tireaspect varchar(50) = 'somevalue'; DECLARE @tirerim varchar(50) = 'somevalue'; SELECT [ID] ,[brand] ,[model] ,[cost] ,[retail] ,[width] ,[aspect] ,[rim] FROM [tires].[dbo].[tires] where [width]=@tirewidth AND [aspect]=@tireaspect AND [rim]=@tirerim;。检查数据类型应该是什么,并首先在 Management Studio 中工作。然后希望您能更好地了解您的 VB 代码中的问题。
  • YYYAAAYYYY!!!!!这样可行!现在,如果我可以让它在我的代码中工作。感觉就像我有两组代码,我不确定如何“手术”删除我不需要的那组。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2016-08-18
  • 1970-01-01
  • 1970-01-01
  • 2017-12-26
  • 1970-01-01
相关资源
最近更新 更多