动态拼接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
這個問題有點不明確.比如你采用什麼樣的數據庫訪問組件.如:ORM,Sqlhelper.....等... 不過常見的處理有: string sqlWhere=""; //當文本框不為空時 if(!string.IsNullOrEmpty(txtA.text.Trim())) { sqlWhere += " And a=@A"; } ....... return Data.GetDataSetBySql("Select * From 表 Where 1=1 "+sqlWhere +" Order By Id Desc");
1 在后台代码中拼sql的条件,这个很简单 根据文本框是否为空来拼2 在数据库中判断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)
简单的写一下,你照着这个来就可以了,不过用了ifstring 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;
@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
不過常見的處理有:
string sqlWhere="";
//當文本框不為空時
if(!string.IsNullOrEmpty(txtA.text.Trim()))
{
sqlWhere += " And a=@A";
}
.......
return Data.GetDataSetBySql("Select * From 表 Where 1=1 "+sqlWhere +" Order By Id Desc");
这个如果不判断 你怎么知道sql是根据什么条件来查询的呢
如果有次方法 我倒是很想见识一下
这个如果不判断 你怎么知道sql是根据什么条件来查询的呢
如果有次方法 我倒是很想见识一下
(
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)
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;