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表定义如下: 展开
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表定义如下: 展开
展开全部
你的程序上面写的是 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();
}
这段代码和你的代码效果是一样的。
如果是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();
}
这段代码和你的代码效果是一样的。
展开全部
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了就会报错了
例如你上面的代码中当两个if条件都为假 不执行时,语句就会变成
select * from Goods where 1=1 order by class,name 了,如果要是没有1=1就变成
select * from Goods where order by class,name了就会报错了
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
展开全部
前面人回答很清楚了啊 说作用大 也大 说作用小 也小 看你用在什么地方啊
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询