当前位置: 移动技术网 > IT编程>开发语言>.net > asp.net SqlParameter如何根据条件有选择的添加参数

asp.net SqlParameter如何根据条件有选择的添加参数

2017年12月12日  | 移动技术网IT编程  | 我要评论

蒂法h小游戏,nod32账号,佛伊泰克

sqlparameter带参数的增删改查语句,可以防止注入.有时候写sql语句的时候会根据方法传进来的参数来判断sql语句中where条件的参数.

一般方法

dal层方法
复制代码 代码如下:

public userinfo getall(userinfo a)
{
string strsql = "select id,name,code,password from [tb].[dbo].[user] where 1=1";
strsql += " and [id]=@id";
strsql += " and [name]=@name";
strsql += " and [code]=@code";
strsql += " and [password]=@password";
sqlparameter[] parameters = {
new sqlparameter("@id", a.id)
new sqlparameter("@name", a.name)
new sqlparameter("@code", a.code),
new sqlparameter("@password", a.password)
};
sqldatareader reader = sqlhelper.executereader(strsql, parameters);
userinfo hc = new userinfo();
while(reader.read())
{
hc.id = reader.getint32(reader.getordinal("id"));
hc.name = reader.getstring(reader.getordinal("name"));
hc.code = reader.getstring(reader.getordinal("code"));
hc.password = reader.getstring(reader.getordinal("password"));
}
reader.close();
return hc;
}

现在想根据集合userinfo内属性来添加sqlparameter参数

方法如下

dal层方法
复制代码 代码如下:

public userinfo getall(userinfo a)
{
string strsql = "select id,name,code,password from [tb].[dbo].[user] where 1=1";
if (a.id>0) strsql += " and [id]=@id";
if (!string.isnullorempty(a.name)) strsql += " and [name]=@name";
if (!string.isnullorempty(a.code)) strsql += " and [code]=@code";
if (!string.isnullorempty(a.password)) strsql += " and [password]=@password";
list<sqlparameter> parametertemp = new list<sqlparameter>();
if (a.id > 0) parametertemp.add(new sqlparameter("@id", a.id));
if (!string.isnullorempty(a.name)) parametertemp.add(new sqlparameter("@name", a.name));
if (!string.isnullorempty(a.code)) parametertemp.add(new sqlparameter("@code", a.code));
if (!string.isnullorempty(a.password)) parametertemp.add(new sqlparameter("@password", a.password));
sqlparameter[] parameters = parametertemp.toarray();//toarray()方法将 list<t> 的元素复制到新数组中。

sqldatareader reader = sqlhelper.executereader(strsql, parameters);
userinfo hc = new userinfo();
while (reader.read())
{
hc.id = reader.getint32(reader.getordinal("id"));
hc.name = reader.getstring(reader.getordinal("name"));
hc.code = reader.getstring(reader.getordinal("code"));
hc.password = reader.getstring(reader.getordinal("password"));
}
reader.close();
return hc;
}

dbutility层sqlhelper
复制代码 代码如下:

public sqldatareader executereader(string query, params sqlparameter[] parameters)
{
sqlconnstring = getconnect2();
sqlconnstring.open();
sqlcommand sqlcmd = new sqlcommand();
sqlcmd.connection = sqlconnstring;
sqlcmd.commandtext = query;
//sqlcmd.parameters.addrange(parameters);//addrange()不能传空参数组
//params 的意思就是允许传空参数组
foreach (sqlparameter item in parameters)
{
sqlcmd.parameters.add(item);
}
sqldatareader dr;
try
{
dr = sqlcmd.executereader(commandbehavior.closeconnection);
return dr;
}
catch (exception ee)
{
sqlconnstring.close();
throw ee;
}
}

如对本文有疑问,请在下面进行留言讨论,广大热心网友会与你互动!! 点击进行留言回复

相关文章:

验证码:
移动技术网