当前位置: 首页 > 编程笔记 >

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

侯焱
2023-03-14
本文向大家介绍asp.net SqlParameter如何根据条件有选择的添加参数,包括了asp.net SqlParameter如何根据条件有选择的添加参数的使用技巧和注意事项,需要的朋友参考一下
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; 
} 
} 
 类似资料:
  • 问题内容: 我有一个名为@status的变量,该变量在此select语句之前设置: 我只想选择if列,否则我想为shipwith选择null。我该如何完成? 问题答案:

  • 我有一个数据集 是否有任何方法可以确保,如果不同的的下一个值小于中的值,那么它应该在 列中执行加法。 下面是我期待的结果 所以基本上我寻求一个解决方案,对于每个唯一的< code>field_pointpath,如果它遇到一个小于前一个值的值,那么它应该将前一个值与下一个值相加。 if <代码>值[i 1]

  • 我有三张桌子 表A 我需要根据传递的参数将TableA连接到TableB或TableC。ie 我尝试了以下查询 但是,这是给语法错误。有人能帮忙吗? 解决方案:

  • 我试图弄清楚如何根据java系统属性是否为given/set向记录器添加一个appender。 假设我有这样一个基本配置: 例如,我知道我可以在给定属性(“loglevel”)上使级别动态化(如果没有给定属性,则默认为“info”): 我看了筛选器的文档,我想不出来。当然,如果过滤器是正确的方法的话。

  • 我有一个包含一些行的表。表数据来自循环。在这里,我需要根据复选框的选择添加新列。假设我选中了产品,一个新的表标题将创建为产品,以及表标题下方的空白行,再次,如果我取消选中,创建的列将被删除。新列应该在添加按钮之前创建。下面是代码https://stackblitz.com/edit/angular-table-focus