0

我有一个查询,它只检索不匹配或不包含字段中可用关键字的Description字段记录。所以匹配的不应该出现在 GridView 中,而只有不匹配的。我试图在 GridView 中显示 SQL 查询的结果,但是我得到了匹配的结果,这不是我的要求。Table 1KeywordsTable 2

我尝试在 SQL Server 中运行 SQL 查询,它工作得非常好。即使在我的网络应用程序中它也可以正常工作,但前提是我在Like语句之后明确指定关键字。但我希望它跨越所有KeywordsTable2. 这是我的代码。

conn.Open()
For Each row As GridViewRow In Me.GridView1.Rows

    For i As Integer = 0 To GridView2.Rows.Count - 1
        Dim Records1 As String = GridView2.Rows(i).Cells(0).Text
        Dim cmd = New SqlCommand("Select DISTINCT Description From DB.dbo.Table1 " +
                                 "WHERE NOT EXISTS (Select * From [DB].dbo.Table2 WHERE " + 
                                 "Table1.Description LIKE '%' +TABLE2.Keywords + '%')", conn)

        DA.SelectCommand = cmd
        DA.Fill(dt)
        GridView3.DataSource = dt
        GridView3.DataBind()
        cmd.ExecuteNonQuery()
        cmd.Dispose()
        DA.Dispose()
        dt.Clear()
        dt.Dispose()
    Next
Next

GridView1有 Table1 的数据 ( The Description) GridView2有 Table2 的数据 ( The Keywords) GridView3有查询的结果

但是,如前所述,我仍然得到匹配的。查询的格式是否有问题,是否缺少某些内容或格式不正确?任何建议或想法将不胜感激。

4

2 回答 2

1

那不应该是:

WHERE Table1.Description LIKE @Grid)"

cmd.Parameters.AddWithValue("@Grid", "%" + GridView2.Rows(i).Cells(0).Text.ToString() + "%")
于 2012-12-07T14:56:41.727 回答
0

更好的解决方案是在存储过程中执行此操作并传递 @Grid 参数。恕我直言

但是,要具体回答您的问题,这应该有效

For i As Integer = 0 To GridView2.Rows.Count - 1
    Dim Records1 As String = GridView2.Rows(i).Cells(0).Text
    Dim cmd = New SqlCommand("Select DISTINCT Description From DB.dbo.Table1 " +
                             "WHERE NOT EXISTS (Select * From [DB].dbo.Table2 WHERE " + 
                             "Table1.Description LIKE "
                             "'%" + GridView2.Rows(i).Cells(0).Text.ToString() + "%')", conn)
    DA.SelectCommand = cmd
    DA.Fill(dt)
    GridView3.DataSource = dt
    GridView3.DataBind()
    cmd.ExecuteNonQuery()
    cmd.Dispose()
    DA.Dispose()
    dt.Clear()
    dt.Dispose()
Next
于 2012-12-07T16:58:09.793 回答