[已解决问题] 这段代码为什么不能正常运行?
提问时间: 2008-08-23 10:28
悬赏分:10 浏览:218 次

我做的是一个新闻搜索页面,根据标题或时间进行查询,因为标题和时间的sql语句不一样,所以我采用了两个sqlDataSource控件,当选择第标题单选项的时候,把sqlDataSource2作为GridView的数据源控件,当选择时间单选项的时候,把sqlDataSource1控件作为GridView的数据源控件,可是GridView中的数据总是为空,前提数据库里是有数据。

sqlDataSource2的SelectCommand如下:

            SelectCommand="SELECT [newsId], [title], [author], [fromWhere], [releasedTime] FROM [News] WHERE [title] LIKE '%@title%'"

sqlDataSource1的SelectCommand如下:
             SelectCommand="SELECT [newsId], [title], [author], [fromWhere], [releasedTime] FROM [News] WHERE [releasedTime] > '@releasedTime'"

protected void ButtonSearch_Click(object sender, EventArgs e)
    {
        if (RadioButtonListSearchBy.SelectedValue == "0")
        {
            GridViewNews.DataSourceID = "SqlDataSource2";          
            string selectString = SqlDataSource2.SelectCommand;
            GridViewNews.DataBind();
        }
        if (RadioButtonListSearchBy.SelectedValue == "1")
        {
            GridViewNews.DataSourceID = "SqlDataSource1";
            GridViewNews.DataBind();
        }
    }

现在我怀疑是不是GridView与sqlDataSource之间的互操作性原理我没有搞清楚,可是它们之间的代码是隐藏的,不可以调试,所以看不到代码的详细执行过程,请高人赐教,谢谢!

所有回答(3)
“WHERE [title] LIKE @title” @title=%标题% 我刚做了一个多重搜索,你参考一下(使用了一个小技巧,1=1)。 (除了下面的方法,使用sqldatasource的过滤功能也挺不错,在你的MSDN中输入: ms-help://MS.VSCC.v90/MS.MSDNQTR.v90.chs/dv_vwdcon/html/aff9e910-8460-4c12-a2e0-529dce65ec52.htm) protected string GetSelectCommand() { //SetSearchParams(); StringBuilder sb = new StringBuilder(); if(this.count!=null) sb.Append("SELECT TOP (@Count) FileID,Title,UploadUser,UploadTime,ModifyTime,CatalogID,KeyWords,UploadIP,FilePath,DisplayOrder,Size,FileType,Status FROM [FileInfo]"); else sb.Append("SELECT FileID,Title,UploadUser,UploadTime,ModifyTime,CatalogID,KeyWords,UploadIP,FilePath,DisplayOrder,Size,FileType,Status FROM [FileInfo]"); sb.Append(" WHERE (1=1)"); //} if (!string.IsNullOrEmpty(keyWord)) { if (this.isFullTextSearch) { sb.Append(" AND (Title LIKE @KeyWord OR KeyWords LIKE @KeyWord OR Description LIKE @Keyword)"); } else { sb.Append(" AND (Title LIKE @KeyWord OR KeyWords LIKE @KeyWord)"); } } if (cataID != 0) { sb.Append(" AND (CatalogID=@CatalogID)"); } if (!String.IsNullOrEmpty(fileType)) { sb.Append(" AND (FileType=@FileType)"); } if (upperFileSize != null) { sb.Append(" AND (Size<@UpperFileSize)"); } if (lowerFileSize != null) { sb.Append(" AND (Size>@LowerFileSize)"); } if (upperUploadTime != null) { sb.Append(" AND (UploadTime<@UpperUploadTime)"); } if (lowerUploadTime != null) { sb.Append(" AND (UploadTime>@lowerUploadTime)"); } if (!String.IsNullOrEmpty(userName)) { sb.Append(" AND (UploadUser LIKE @UploadUser)"); } sb.Append(" ORDER BY UploadTime"); sb.Append(" DESC"); return sb.ToString(); }
2个月前   回答者:天启 - 菜鸟二级
如果这么写...1=1 就会导致全表扫描...
2个月前   回答者:咸蛋超人 - 菜鸟二级
调试的时候,先把CommandText拿到查询分析器中查询一下,如有结果则说明sql语句没有问题.那么就是在绑定的问题了.MSDN中查看一下DataGridView的绑定实现.
2个月前   回答者:hackenliu - 菜鸟二级
评论
2个月前   爱上编程 :
你是说不允许'%@title%'这样的语法,是不是?在你的例子中好像没有%等模糊查询的符号,那么你怎么实现模糊查询呢?
2个月前   天启 :
对,我的意思是,%ff%应该出现在参数变量中,比如title="%" + "标题"+ "%"
2个月前   天启 :
也就是说@title中包含了%%,我前些天遇到这个问题时就是这么解决(遇到和你同样的问题),至于其他办法暂时我不知道。
2个月前   爱上编程 :
哦,谢谢你的回答!可是我用的是sqlDataSource数据源控件,它的参数在
<SelectParameters>
<asp:ControlParameter Name="releasedTime" Type="DateTime" ControlID="TextBoxContent" />
</SelectParameters>里,这怎么把%放到参数里去呢?
   您需要登录以后才能回答!
 

我要提问

我的问题


快到期问题



> 问题排行榜

相关内容

相关链接