悬赏分: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之间的互操作性原理我没有搞清楚,可是它们之间的代码是隐藏的,不可以调试,所以看不到代码的详细执行过程,请高人赐教,谢谢!
|
“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();
} 如果这么写...1=1 就会导致全表扫描... 调试的时候,先把CommandText拿到查询分析器中查询一下,如有结果则说明sql语句没有问题.那么就是在绑定的问题了.MSDN中查看一下DataGridView的绑定实现. |
|
2个月前 爱上编程 : 你是说不允许'%@title%'这样的语法,是不是?在你的例子中好像没有%等模糊查询的符号,那么你怎么实现模糊查询呢? |
|
2个月前 天启 : 对,我的意思是,%ff%应该出现在参数变量中,比如title="%" + "标题"+ "%" |
|
2个月前 天启 : 也就是说@title中包含了%%,我前些天遇到这个问题时就是这么解决(遇到和你同样的问题),至于其他办法暂时我不知道。 |
|
2个月前 爱上编程 : 哦,谢谢你的回答!可是我用的是sqlDataSource数据源控件,它的参数在 <SelectParameters> <asp:ControlParameter Name="releasedTime" Type="DateTime" ControlID="TextBoxContent" /> </SelectParameters>里,这怎么把%放到参数里去呢? |