日期:2014-05-18  浏览次数:20586 次

我在网页上有3个textbox控件,这3个控件是输入查询的条件。那么我的sql语句应该如何写呢
我在网页上有3个textbox控件,这3个控件是输入查询的条件。那么我的sql语句应该如何写呢?有什么更简单的办法吗?这3个控件不一定都有值的?我不想用if条件来判断?各位有什么好的方法吗?谢谢了。

------解决方案--------------------
动态拼接sql,注意防SQL注入,给一段参考代码:

CREATE PROCEDURE [dbo].[Log_OperLog_GetOperLogCount]
@OperEmployeeId varchar(20),
@OperModuleId int,
……
AS
DECLARE @sql nvarchar(4000);
SET @sql = 'SELECT count(*) FROM Log_Oper 
WHERE 1=1'
+ case when @OperEmployeeId is not null then ' and OperEmployeeId=@OperEmployeeId' else '' end
……
EXEC sp_executesql 
@sql,
N'@OperEmployeeId varchar(20), @OperModuleId int, @OperObjectId varchar(1000), @OperTypeName varchar(20), @OperTimeStart datetime, @OperTimeEnd datetime', --必须要加'N'
@OperEmployeeId,
@OperModuleId,
……
GO

------解决方案--------------------
1 在后台代码中拼sql的条件,这个很简单 根据文本框是否为空来拼

2 在数据库中判断

SQL code


create Table Users
(
    id int,
    name nvarchar(20),
    age int
)

create proc sp_SGetUserInfo
(
  @Name nvarchar(20),
  @Age int
)
as
select 
    *
from
    Users
where
    (@Name='' or name=@Name)  --参数为空 就不执行了
and
    (@Age='' or age=@Age)

------解决方案--------------------
简单的写一下,你照着这个来就可以了,不过用了if
C# code

string str1=this.TextBox1.text.Trim().ToString();
string str2=this.TextBox2.text.Trim().ToString();
string str3=this.TextBox3.text.Trim().ToString();
//假设处理页为search.aspx
//你在按钮上的处理页写成:"search.aspx?str1="+str1+"&str2="+str2+"&str3="+str3
//下面是search.aspx页的部分代码

string s1,s2,s3;
string str1,str2,str3;
str1=Request.QueryString["str1"].ToString();
str2=Request.QueryString["str2"].ToString();
str3=Request.QueryString["str3"].ToString();
if(str1=="" || str1==null)
{
 s1="";
}
else
{
 s1=" and 字段名 like '"+str1+"'";
}
if(str2=="" || str2==null)
{
 s2="";
}
else
{
 s2=" and 字段名 like '"+str2+"'";
}
if(str3=="" || str3==null)
{
 s3="";
}
else
{
 s3=" and 字段名 like '"+str3+"'";
}
//然后把它们组合起来
string sql="select * from tablename where id<>0";
sql+=s1+s2+s3;