查询语句很简单
select * from Books where BookName like '%学习%'
在查询分析其中一切正常,在网页中查询,有的能找到有的找不到,明明有的记录就是查不到
不知道什么原因
另外,系统是这样的.net2.0+sqlserver 2000,数据库是从excel文件中导过来的

解决方案 »

  1.   

    问题未必在查询语句。你的数据从生成查询语句到执行查询、读取数据、显示数据,这经历了一个漫长的过程,每一步都可能出问题。
    欢迎大家来我的博客作客:http://blog.csdn.net/aafshzj/
    我正在写一系列关于AAF组件框架的文章。该框架能对开发工作提供很多帮助,并极大地提高开发效率。希望大家看一看并提出宝贵建议。
      

  2.   

    SqlDataReader Dr;
            Connection.Open();
           SqlCommand command = new SqlCommand("queryByName", Connection);
            command.CommandType = CommandType.StoredProcedure; 
            SqlParameter myParameter = new SqlParameter();
           myParameter.ParameterName = "@BookName";
            myParameter.SqlDbType = SqlDbType.NVarChar;
            myParameter.Direction = ParameterDirection.Input;
            myParameter.Value = "%" + txtSearch.Text.Trim() + "%";
            command.Parameters.Add(myParameter);
            Dr = command.ExecuteReader();
            while (Dr.Read())
            {
                gvSearchResult.DataSource = Dr;
                gvSearchResult.DataBind();
            }
            Dr.Close();
      

  3.   

    少了单引号
    myParameter.Value = "'%" + txtSearch.Text.Trim() + "%'";
      

  4.   

    怎么用datareader做数据源?
    当你dr.read()只读了一条语句,当然在你的gvSearchResult中只有条信息。
    你看是不是这个问题。
    数据源请采用dataset,datatable,arraylist等。
      

  5.   

    yusongkun(九道轮回),用reader是可以的,能得到但有的情况下得不到
      

  6.   

    你用SQL SERVER的事件查看器看一下客户端发过来哪些SQL语句,然后在查询分析器里面执行一个这个SQL语句,看一下结果。事件查看器很有用的。
      

  7.   

    myParameter.Value = "%" + txtSearch.Text.Trim() + "%";
    没有看到你存储过程中如何写
    但我建议模糊匹配不要写到这里,要在存储过程中写
      

  8.   

    while (Dr.Read())
            {
                gvSearchResult.DataSource = Dr;
                gvSearchResult.DataBind();
            }
    这里的问题
      

  9.   

    szhuk(小佳),谢谢你的提示,我看了事件探察器,查询时调用的存储过程如下:
    exec queryByName @BookName = N'%地名%'
    在查询分析器中正常,但是网页中还是不行
      

  10.   

    问题找到了,的确是datareader的问题,但并不是datareader不能绑定,而是我的语句中少了第一次绑定,也就是说进入循环之前如果找到匹配结果的话,dr此时已经读了第一条匹配数据,dr.read()之后就是下一条了,所以在循环之前先bind一下
    Dr = command.ExecuteReader();
    gvSearchResult.DataSource = Dr;
    gvSearchResult.DataBind();
    while (Dr.Read())
    {
    gvSearchResult.DataBind();
    }
    这样就没有问题了,原来只注意看结果的不同,没有发现只有当匹配数据项只有一条的时候,才会出这个问题,已开始就用dataset的话就不会出现这个问题了,本来想用dr能够节省点资源,不过我要试试看两者效率相差有多大。
    经过大家的讨论,我把问题解决了,也学到了一些新东西,谢谢。
      

  11.   

    这样试试看
         Dr = command.ExecuteReader();
         Dr.Close();
         gvSearchResult.DataSource = Dr;
         gvSearchResult.DataBind();