asp.net SqlParameter如何根據(jù)條件有選擇的添加參數(shù)
更新時(shí)間:2014年06月06日 10:25:35 作者:
有時(shí)候?qū)憇ql語(yǔ)句的時(shí)候會(huì)根據(jù)方法傳進(jìn)來(lái)的參數(shù)來(lái)判斷sql語(yǔ)句中where條件的參數(shù),下面有個(gè)示例,大家可以參考下
SqlParameter帶參數(shù)的增刪改查語(yǔ)句,可以防止注入.有時(shí)候?qū)憇ql語(yǔ)句的時(shí)候會(huì)根據(jù)方法傳進(jìn)來(lái)的參數(shù)來(lái)判斷sql語(yǔ)句中where條件的參數(shù).
一般方法
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;
}
現(xiàn)在想根據(jù)集合UserInfo內(nèi)屬性來(lái)添加SqlParameter參數(shù)
方法如下
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> 的元素復(fù)制到新數(shù)組中。
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()不能傳空參數(shù)組
//params 的意思就是允許傳空參數(shù)組
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;
}
}
一般方法
DAL層方法
復(fù)制代碼 代碼如下:
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;
}
現(xiàn)在想根據(jù)集合UserInfo內(nèi)屬性來(lái)添加SqlParameter參數(shù)
方法如下
DAL層方法
復(fù)制代碼 代碼如下:
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> 的元素復(fù)制到新數(shù)組中。
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
復(fù)制代碼 代碼如下:
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()不能傳空參數(shù)組
//params 的意思就是允許傳空參數(shù)組
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;
}
}
相關(guān)文章
解決DropDownList總是選中第一項(xiàng)的方法
這篇文章主要介紹了解決DropDownList總是選中第一項(xiàng)的方法,DropDownList下拉框服務(wù)器控件是最常用的控件之一,雖然使用方便,但也會(huì)出現(xiàn)奇怪的錯(cuò)誤,感興趣的小伙伴們可以參考一下2015-10-10
asp.net 長(zhǎng)文章通過(guò)設(shè)定的行數(shù)分頁(yè)
長(zhǎng)文章通過(guò)設(shè)定的行數(shù)來(lái)實(shí)現(xiàn)分頁(yè)的代碼。2009-12-12
設(shè)置ASP.NET頁(yè)面的運(yùn)行超時(shí)時(shí)間詳細(xì)到單個(gè)頁(yè)面及站點(diǎn)
這篇文章主要介紹了如何設(shè)置ASP.NET頁(yè)面的運(yùn)行超時(shí)時(shí)間,包括全局超時(shí)時(shí)間、單個(gè)站點(diǎn)超時(shí)時(shí)間、單個(gè)頁(yè)面請(qǐng)求超時(shí)時(shí)間,需要的朋友可以參考下2014-06-06
一個(gè)簡(jiǎn)單的文件MD5碼自動(dòng)計(jì)算比較器(附源碼)
一直在玩 WOW ,發(fā)現(xiàn)網(wǎng)上的 MD5 計(jì)算工具都沒(méi)有自動(dòng)比較功能,每次下載更新計(jì)算后,都要自己一個(gè)一個(gè)字母核對(duì),比較麻煩。 最近開始學(xué)習(xí) C# ,用 .NET ,做了一個(gè)簡(jiǎn)單的文件MD5碼自動(dòng)計(jì)算比較器。2013-02-02
.NET 6開發(fā)TodoList應(yīng)用之實(shí)現(xiàn)全局異常處理
因?yàn)樵陧?xiàng)目中,會(huì)有各種各樣的領(lǐng)域異?;蛳到y(tǒng)異常被拋出來(lái),那么在Controller里就需要進(jìn)行完整的try-catch捕獲,并根據(jù)是否有異常拋出重新包裝返回值。有沒(méi)有辦法讓框架自己去做這件事呢?本文將為大家介紹如何實(shí)現(xiàn)全局異常處理,需要的可以參考一下2021-12-12
asp.net 獲取TreeView中第一個(gè)選中的節(jié)點(diǎn)
今天做的項(xiàng)目中有一個(gè)要獲取TreeView中第一個(gè)選中的節(jié)點(diǎn),當(dāng)然子節(jié)點(diǎn)己包含checkbox以前做過(guò),用的時(shí)候又不知道怎么做了,花了點(diǎn)時(shí)間又寫了一下,記錄下來(lái),以備下次用.2010-03-03
asp.net獲得數(shù)據(jù)控件事件索引并獲取其中值總結(jié)
asp.net獲得數(shù)據(jù)控件事件索引并獲取其中值總結(jié),需要的朋友可以參考下。2011-11-11

