今天鬱悶了半天,當查詢數據列表時候由於數據庫沒有判斷是否爲空,已導致查詢語句不通過,想了一種方法,希望對你們也有所幫助昂!
用戶表名稱: SysUser ;給其起了一個別名:u
員工表名稱: BasicEmployee: 給其起了一個別名:e
分別按照用戶名稱,用戶類型,是否凍結:查詢用戶表的數據:
select u.*,e.Name as RealName from
(select * from SysUser where IsDelete=0
and (@UserName is null or UserName=@UserName)
and (@UserType is null or UserType=@UserType)
and (@IsUse is null or IsUse=@IsUse)) u left join BasicEmployee e on u.EmployeeID=e.EmployeeID
這樣就可以瞭如果@UserName 爲空值的時候 那麼在後臺使用的時候就可以給@UserName=null 如果文本框有值也就是說@UserName數據不爲空,@UserName=這個文本框的值;
以下是這個例子:
1 在dal 層中:
/// <summary>
/// 用字符串拼接的形式,讀取分頁的數據
/// </summary>
/// <param name="pageSize">分頁大小</param>
/// <param name="pageIndex">當前頁碼</param>
/// <param name="rowCount">數據條數</param>
/// <param name="orderField">排序字段</param>
/// <param name="prms">條件字典表</param>
/// <returns></returns>
public DataSet GetPaging(int pageSize, int pageIndex, ref int rowCount, string orderField, Dictionary<string, object> prms)
{
DB dbUtil = DB.GetInstance();
StringBuilder sb = new StringBuilder();
sb.Append("select u.*,e.Name as RealName from (select * from SysUser where IsDelete=0 and (@UserName is null or
UserName=@UserName) and (@UserType is null or
UserType=@UserType) and (@IsUse is null or
IsUse=@IsUse))");
sb.Append(" u left join BasicEmployee e on u.EmployeeID=e.EmployeeID");
Database db = this.CreateDatabase();
//獲取數據條數
DbCommand cmdCount = dbUtil.GetDbCommandDataCount(db, sb.ToString());
db.AddInParameter(cmdCount, "@UserName", DbType.String, prms["@UserName"]);
db.AddInParameter(cmdCount, "@UserType", DbType.Int32, prms["@UserType"]);
db.AddInParameter(cmdCount, "@IsUse", DbType.Int32, prms["@IsUse"]);
rowCount = Convert.ToInt32(db.ExecuteScalar(cmdCount));
//獲取分頁數據
DbCommand cmdPaging = dbUtil.GetDbCommandPaging(db, sb.ToString(), pageSize, pageIndex, rowCount, orderField);
db.AddInParameter(cmdPaging, "@UserName", DbType.String, prms["@UserName"]);
db.AddInParameter(cmdPaging, "@UserType", DbType.Int32, prms["@UserType"]);
db.AddInParameter(cmdPaging, "@IsUse", DbType.Int32, prms["@IsUse"]);
//執行命令獲取數據
return db.ExecuteDataSet(cmdPaging);
}
BLL中:
/// <summary>
/// 用字符串拼接的形式,讀取分頁的數據
/// </summary>
/// <param name="pageSize">分頁大小</param>
/// <param name="pageIndex">當前頁碼</param>
/// <param name="rowCount">數據條數</param>
/// <param name="orderField">排序字段</param>
/// <param name="prms">條件字典表</param>
public DataSet GetPaging(int pageSize, int pageIndex, ref int rowCount, string orderField, Dictionary<string, object> prms)
{
return dal.GetPaging(pageSize, pageIndex, ref rowCount, orderField, prms);
}
前臺調用字典表數據:
public Dictionary<string, object> GetPagingUser()
{
dic.Clear();
string realname = this.txtRealName.Text.Trim();
string usertype = this.ddlUserType.SelectedValue;
string isuser=this.rblIsUse.SelectedValue ;
if (this.txtUserName.Text.Trim().Length == 0)
{
dic.Add("@UserName", null);
}
else
{
dic.Add("@UserName", this.txtUserName.Text.Trim());
}
if (usertype =="-1")
{
dic.Add("@UserType", null);
}
else
{
dic.Add("@UserType", usertype);
}
if(isuser=="-1")
{
dic.Add("@IsUse", null);
}
else
{
dic.Add("@IsUse", isuser);
}
return dic;
}