在应使用条件的上下文(在 'ORDER' 附近)中指定了非布尔类型的表达式。

xianxian123xian 2012-06-13 10:13:35
string sql = "WHERE 1=1";
if (ConfigParam.Keyword != "")
{
txtKey.Text = ConfigParam.Keyword;
sql += " and m.UserName like '%" + ConfigParam.Keyword + "%'";
}
if (ConfigParam.StatusFlag>0)
{
DropDownList1.SelectedValue = ConfigParam.StatusFlag.ToString();
sql += " and mo.StatusFlag = " + ConfigParam.StatusFlag;
}



protected void btnSearch_Click(object sender, EventArgs e)
{

Response.Redirect("manage.aspx?StatusFlag=" + DropDownList1.SelectedValue + "&Keyword=" + txtKey.Text);
}



exec('SELECT mo.ID FROM MemberOrder mo
LEFT JOIN Member m ON m.ID = mo.UserID '+@Keywords+' ORDER BY mo.ID DESC')
...全文
489 9 打赏 收藏 转发到动态 举报
写回复
用AI写文章
9 条回复
切换为时间正序
请发表友善的回复…
发表回复
Chyan 2012-06-13
  • 打赏
  • 举报
回复
orz 你keywords那个参数断点追一下里面的值。如果只是一个关键字的话那你的sql拼出来肯定是不对的!
xianxian123xian 2012-06-13
  • 打赏
  • 举报
回复
[Quote=引用 5 楼 的回复:]
引用 4 楼 的回复:

引用 3 楼 的回复:
关键@Keywords这个变量的值是什么???


@Keywords变量值是传过来的sql语句

那你就看看传过来的sql是什么?符合sql的语法嘛?
[/Quote]

当 if (ConfigParam.Keyword != "")
{
txtKey.Text = ConfigParam.Keyword;
sql += " and m.UserName like '%" + ConfigParam.Keyword + "%'";
}
if (ConfigParam.StatusFlag>0)
{
DropDownList1.SelectedValue = ConfigParam.StatusFlag.ToString();
sql += " and mo.StatusFlag = " + ConfigParam.StatusFlag;
}
当这2个值都传过去会报错,只输关键字或者只搜索状态不报错
xianxian123xian 2012-06-13
  • 打赏
  • 举报
回复
存储过程LTER PROCEDURE [dbo].[UP_MemberOrder_GetList]
@PageSize int = 10, -- 页尺寸
@PageIndex int = 1, -- 页码
@Keywords nvarchar(50), -- 关键词
@Type nvarchar(50)
AS
declare @allcount int

create table #t
(
id int ,
id1 int IDENTITY (1, 1) NOT NULL
)

if @Type='memberorder'
begin
insert into #t(id)
exec('SELECT mo.ID FROM MemberOrder mo
LEFT JOIN Member m ON m.ID = mo.UserID '+@Keywords+' ORDER BY mo.ID DESC')


set @allcount = @@ROWCOUNT

select b.*
from #t a,MemberOrder b
where a.id1 between str(@pagesize*(@PageIndex-1)+1) and str(@pagesize*@PageIndex)
and a.id = b.id
order by a.id1

select @allcount Total
drop table #t
end
xianxian123xian 2012-06-13
  • 打赏
  • 举报
回复
页面层
string sql = "WHERE 1=1";
if (ConfigParam.Keyword != "")
{
txtKey.Text = ConfigParam.Keyword;
sql += " and m.UserName like '%" + ConfigParam.Keyword + "%'";
}
if (ConfigParam.StatusFlag>0)
{
DropDownList1.SelectedValue = ConfigParam.StatusFlag.ToString();
sql += " and mo.StatusFlag = " + ConfigParam.StatusFlag;
}


int total = 0;
int PageIndex = ConfigParam.Page;
int PageSize = grid.PageSize;
GK2010.BLL.MemberOrder bll = new GK2010.BLL.MemberOrder();
List<GK2010.Model.MemberOrder> models = bll.GetList(PageSize, PageIndex, sql, "memberorder", out total);
AspNetPager1.PageSize = PageSize;
AspNetPager1.RecordCount = total;
grid.DataKeyNames = "id".Split(',');
grid.DataSource = models;
grid.DataBind();

bll
public List<Model.MemberOrder> GetList(int PageSize, int PageIndex, string Keywords, string Type, out int totalRows)
{
DataSet ds = mc.GetList(PageSize, PageIndex, Keywords, Type, out totalRows);
return DataTableToList(ds.Tables[0]);
}
public DataSet GetList(int PageSize, int PageIndex, string Keywords, string Type, out int totalRows)
{
SqlParameter[] parameters = {
new SqlParameter("@PageSize", SqlDbType.Int),
new SqlParameter("@PageIndex", SqlDbType.Int),
new SqlParameter("@Keywords", SqlDbType.VarChar,50),
new SqlParameter("@Type", SqlDbType.VarChar,50),
};
parameters[0].Value = PageSize;
parameters[1].Value = PageIndex;
parameters[2].Value = Keywords;
parameters[3].Value = Type;
DataSet ds = DbHelperSQL.RunProcedure("UP_MemberOrder_GetList", parameters, "ds");
totalRows = 0;
if (ds.Tables.Count > 0)
{
totalRows = int.Parse(ds.Tables[1].Rows[0]["Total"].ToString());
}

return ds;
}

EnForGrass 2012-06-13
  • 打赏
  • 举报
回复
[Quote=引用 4 楼 的回复:]

引用 3 楼 的回复:
关键@Keywords这个变量的值是什么???


@Keywords变量值是传过来的sql语句
[/Quote]
那你就看看传过来的sql是什么?符合sql的语法嘛?
xianxian123xian 2012-06-13
  • 打赏
  • 举报
回复
[Quote=引用 3 楼 的回复:]
关键@Keywords这个变量的值是什么???
[/Quote]

@Keywords变量值是传过来的sql语句
EnForGrass 2012-06-13
  • 打赏
  • 举报
回复
关键@Keywords这个变量的值是什么???
人生无悔 2012-06-13
  • 打赏
  • 举报
回复

--如果你使用exec,就把你的sql拼結好了再往裡傳,像你上面的寫法
declare @sql nvarchar(max),@Keywords nvarchar(200)
select @Keywords='....'
select @sql='SELECT mo.ID FROM MemberOrder mo
LEFT JOIN Member m ON m.ID = mo.UserID '+@Keywords+' ORDER BY mo.ID DESC'
exec(@sql)
--或者你使用sp_executesql,這個可以帶參
bdmh 2012-06-13
  • 打赏
  • 举报
回复
@Keywords是什么东西,肯定拼接后sql语句有问题,显示出来看看

62,268

社区成员

发帖
与我相关
我的任务
社区描述
.NET技术交流专区
javascript云原生 企业社区
社区管理员
  • ASP.NET
  • .Net开发者社区
  • R小R
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告

.NET 社区是一个围绕开源 .NET 的开放、热情、创新、包容的技术社区。社区致力于为广大 .NET 爱好者提供一个良好的知识共享、协同互助的 .NET 技术交流环境。我们尊重不同意见,支持健康理性的辩论和互动,反对歧视和攻击。

希望和大家一起共同营造一个活跃、友好的社区氛围。

试试用AI创作助手写篇文章吧