Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/asp.net/37.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Asp.net 无法获取要在网格视图中显示的SQL查询的正确结果_Asp.net_Sql_Sql Server_Vb.net_Vb.net 2010 - Fatal编程技术网

Asp.net 无法获取要在网格视图中显示的SQL查询的正确结果

Asp.net 无法获取要在网格视图中显示的SQL查询的正确结果,asp.net,sql,sql-server,vb.net,vb.net-2010,Asp.net,Sql,Sql Server,Vb.net,Vb.net 2010,我有一个查询,它只检索表1的描述字段的记录,这些记录与表2中的关键字字段中的关键字不匹配或不包含关键字。所以匹配的不应该出现在GridView中,而应该只出现不匹配的。我试图在GridView中显示SQL查询的结果,但是我得到了匹配的结果,这不是我的要求 我试着在SQLServer中运行SQL查询,结果非常好。即使在我的web应用程序中,它也可以正常工作,但前提是我在Like语句之后明确指定关键字。但我希望它能覆盖表2中的所有关键字。这是我的密码 conn.Open() For Each row

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

我试着在SQLServer中运行SQL查询,结果非常好。即使在我的web应用程序中,它也可以正常工作,但前提是我在
Like
语句之后明确指定关键字。但我希望它能覆盖
表2中的所有
关键字。这是我的密码

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
包含表1中的数据(
说明
GridView2
包含来自Tabel2的数据(
关键字
GridView3
包含查询结果

然而,正如前面所说,我仍然得到了那些匹配的。查询的格式是否有问题,是否缺少或以错误的格式写入?如果您有任何建议或想法,我们将不胜感激

这不应该是:

WHERE Table1.Description LIKE @Grid)"

cmd.Parameters.AddWithValue("@Grid", "%" + GridView2.Rows(i).Cells(0).Text.ToString() + "%")

更好的解决方案是从存储过程中执行此操作,并传递@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

还是一样。尝试了许多方法仍然无法找出问题您是否将发送到服务器的查询与您使用Sql profiler手动尝试的查询进行了比较?如果我删除
'%'+@Grid+'%'
并将其替换为
'%Orange%',我的web应用程序中的查询将正常工作,
GridView3`将包含来自
表1的所有结果
丢弃带有
橙色
字样的结果。但是这个
@Grid
不起作用,这就是为什么我建议使用Sql Profiler来比较实际发送到服务器的内容。一开始,使用“%”++@Grid++“%”看起来您将得到一个类似“%”+Orange++“%”的查询。换句话说,查询似乎将包含额外的撇号和加号。@Chris Dunaway,那么在SQL SERVER 2008中哪里可以找到SQL Profiler?我猜您正在使用SQL SERVER Management Studio。在这种情况下,探查器位于“工具”菜单中。