ASP.NET的数据库显示问题

有这么段代码:publicvoidgvBind(){stringsql="select*fromGoodswherei=1";if(ddlKind.SelectedInd... 有这么段代码:
public void gvBind()
{
string sql = "select * from Goods where i=1 ";
if (ddlKind.SelectedIndex > 0)
{
sql += " and class='" + ddlKind.SelectedValue.Trim() + "' ";
}
if (txtName.Text.Trim().Length > 0)
{
sql += " and Name like '%" + txtName.Text.Trim() + "%' ";
}
sql += " order by class,name ";
DataTable dt = new DatabaseHelper().Select(sql);
gvGoodsInfo.DataSource = dt;
gvGoodsInfo.DataBind();
}
我想问最前面的“where 1=1”是什么意思?
这里的Goods表定义如下:
展开
 我来答
百度网友e8e2dc0
2011-04-08 · 超过10用户采纳过TA的回答
知道答主
回答量:28
采纳率:0%
帮助的人:31.3万
展开全部
你的程序上面写的是 i=1啊。如果是i=1的话,就难以理解了。
如果是1=1的话,就比较好理解。你的程序应该是一个组合查询
可以按照班级和名字来查询,这种组合查询一般有一个特点:
可以有0到多个查询条件。如果填了就进行查询,如果没填,就不
进行查询。所以你无法知道你是第几个插入SQL语句的条件。如果
你是第一个条件,那么前面就不要加 and ,如果不是第一个,那么前面
就需要加 and,对于这种情况,如果要按情况一种一种分开写是比较
麻烦的。所以可以在最开始加入一个不影响结果的条件,这样,你的
所有的条件都不是第一个条件了,所以所有条件前面都要加 and 了。
加入的条件可以使1=1,当然也可以是2=2。只要结果是真就行了。
另外,对于模糊查询,其实可以不必判断是否填了值,直接判断就是了。
其实你上面的代码可以修改变得更加简单的,当然代码看起来简单了,
数据库的查询速度其实是降低了的,如可以修改为:
public void gvBind()
{
// 由于是模糊查询,为空的话不影响查询值
string sql = "select * from Goods where Name like '%" + txtName.Text.Trim() + "%' ";
if (ddlKind.SelectedIndex > 0)
{
sql += " and class='" + ddlKind.SelectedValue.Trim() + "' ";
}
sql += " order by class,name ";
DataTable dt = new DatabaseHelper().Select(sql);
gvGoodsInfo.DataSource = dt;
gvGoodsInfo.DataBind();
}
这段代码和你的代码效果是一样的。
liubo654472902
2011-04-08 · TA获得超过125个赞
知道答主
回答量:69
采纳率:0%
帮助的人:82.1万
展开全部
where 1=1 本身没有什么意思,但是在 拼接sql语句 时就很重要了;起到衔接语句的作用
例如你上面的代码中当两个if条件都为假 不执行时,语句就会变成
select * from Goods where 1=1 order by class,name 了,如果要是没有1=1就变成
select * from Goods where order by class,name了就会报错了
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
木易杨328
2011-04-08
知道答主
回答量:29
采纳率:0%
帮助的人:19.4万
展开全部
前面人回答很清楚了啊 说作用大 也大 说作用小 也小 看你用在什么地方啊
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
收起 更多回答(1)
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

下载百度知道APP,抢鲜体验
使用百度知道APP,立即抢鲜体验。你的手机镜头里或许有别人想知道的答案。
扫描二维码下载
×

类别

我们会通过消息、邮箱等方式尽快将举报结果通知您。

说明

0/200

提交
取消

辅 助

模 式