日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程语言 > asp.net >内容正文

asp.net

ASP.NET三层架构之不确定查询参数个数的查询

發布時間:2024/4/17 asp.net 25 豆豆
生活随笔 收集整理的這篇文章主要介紹了 ASP.NET三层架构之不确定查询参数个数的查询 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

在做三層架構的時候,特別是對表做查詢的時候,有時候并不確定查詢條件的個數,比如查詢學生表:有可能只輸入學號,或者姓名,或者性別,總之查詢條件的參數個數并不確定,下面是我用List實現傳值的代碼:

附圖如下:

在這里附上數據庫的表結構:

CREATE TABLE Student(
??????? StuId??????? VARCHAR(6) PRIMARY KEY,
??????? StuName?? VARCHAR(10) NOT NULL,
??????? MajorId???? INT NOT NULL,
??????? Sex?????????? VARCHAR(2) NOT NULL DEFAULT '男',
??????? Birthdate???SMALLDATETIME NOT NULL,
?????? ?Credit??????? FLOAT,
??????? Remark???? VARCHAR(200)
)

------------------------------------------------------------------------------------------------

程序代碼如下:

Model層----------------------------------------------包含兩個類------------------------

------------------表的實體類Student-----------------

?? public class Student
??? {
??????? private string stuId;?
??????? public string StuId
??????? {
??????????? get { return stuId; }
??????????? set { stuId = value; }
??????? }

??????? private string stuName;

??????? public string StuName

??????? {

??????????? get { return stuName; }

??????????? set { stuName = value; }

??????? }

??????? private int majorId;

??????? public int MajorId

??????? {

??????????? get { return majorId; }

??????????? set { majorId = value; }

??????? }

??????? private string sex;

??????? public string Sex

??????? {

??????????? get { return sex; }

??????????? set { sex = value; }

??????? }

??????? private DateTime birthdate;

??????? public DateTime Birthdate

??????? {

??????????? get { return birthdate; }

??????????? set { birthdate = value; }

??????? }

??????? private float credit;

??????? public float Credit

??????? {

??????????? get { return credit; }

??????????? set { credit = value; }

??????? }

??????? private string remark;

??????? public string Remark

??????? {

??????????? get { return remark; }

??????????? set { remark = value; }

??????? }

??? }

------------------Condition主要用于傳遞參數,這個類也可以定義在別的地方-------------------

public class Condition
??? {
??????? public string paramName { get; set; }
??????? public string paramValue { get; set; }
??????? public ConditionOperate Operation { get; set; }

??????? //?查詢所用到的運算操作符
??????? public enum ConditionOperate : byte
??????? {
??????????? Equal,?????????? // 等于
??????????? NotEqual,???? ?// 不等于
??????????? Like,??????????? ?// 模糊查詢
??????????? Lessthan,????? // 小于等于
??????????? GreaterThan? // 大于
??????? }
??? }

?

---------------------DAL層-----------------------------------------------------------------

------------------DBHelper類---------------------------------------------

public class DBHelper

??? {

??????? private SqlConnection conn;

??????? private SqlCommand cmd;

??????? private SqlDataAdapter sda;

??????? private DataSet ds;

??????? public DBHelper()

??????? {

??????????? conn = new SqlConnection(ConfigurationManager.ConnectionStrings["key"].ConnectionString);

??????? }

??????? // 不帶參數的查詢

??????? public DataSet GetResult(string sql, CommandType type)

??????? {

??????????? cmd = new SqlCommand(sql, conn);

??????????? sda = new SqlDataAdapter(cmd);

??????????? conn.Close();

??????????? ds = new DataSet();

??????????? sda.Fill(ds, "student");

??????????? return ds;

??????? }

?????? // 帶參數的查詢

??????? public DataSet GetResult(string sql, CommandType type, params SqlParameter[] paras)

??????? {

??????????? cmd = new SqlCommand(sql, conn);

??????????? if (type == CommandType.StoredProcedure)

??????????? {

??????????????? cmd.CommandType = CommandType.StoredProcedure;

??????????? }

??????????? cmd.Parameters.AddRange(paras);

??????????? sda = new SqlDataAdapter(cmd);

??????????? conn.Close();

??????????? ds = new DataSet();

??????????? sda.Fill(ds, "student");

??????????? return ds;

??????? }

??? }

?

-----------------------------對Student表操作類

public class StudenDAL

??? {

??????? public DataSet GetStudent(List<Condition> condition)

??????? {

??????????? DataSet ds = new DataSet();

??????????? DBHelper db = new DBHelper();

??????????? string sql = "select * from student";

??????????? // 如果帶查詢語句帶參數

??????????? if (condition.Count > 0)

??????????? {

??????????????? sql += SqlString(condition);

??????????????? ds = db.GetResult(sql, CommandType.Text, SqlParas(condition));

??????????? }

??????????? else

??????????? {

??????????????? ds = db.GetResult(sql, CommandType.Text);

??????????? }

??????????? return ds;

??????? }

----------------------以下兩個可以寫成一個類,以便如果有多張表時,可以實現代碼的復用----------------------------------

??????? // 獲取查詢參數

??????? public SqlParameter[] SqlParas(List<Condition> cond)

??????? {

??????????? List<SqlParameter> paras = new List<SqlParameter>();

??????????? for (int i = 0; i < cond.Count; i++)

??????????? {

??????????????? SqlParameter para = new SqlParameter("@" + cond[i].paramName, cond[i].paramValue);

??????????????? if (cond[i].Operation == Condition.ConditionOperate.Like)

??????????????? {

??????????????????? para.SqlValue = "%" + cond[i].paramValue + "%";

??????????????? }

??????????????? paras.Add(para);

??????????? }

??????????? return paras.ToArray();

??????? }

??????? // 獲取SQL查詢語句的where子句

??????? public string SqlString(List<Condition> cond)

??????? {

??????????? string sqlWhere = string.Empty;

??????????? List<string> where = new List<string>();

??????????? // 數組元素的順序應該與ConditionOperate枚舉值順序相同

??????????? string[] operateType = { " = ", " <> ", " Like ", " <= ", " >= " };

??????????? for (int i = 0; i < cond.Count; i++)

??????????? {

??????????????? int index = (int)cond[i].Operation;

??????????????? where.Add(string.Format("{0}" + operateType[index] + "{1}", cond[i].paramName, "@" + cond[i].paramName));

??????????? }

??????????? sqlWhere = " where " + string.Join(" and ", where.ToArray());

??????????? return sqlWhere;

??????? }

??? }

?

------------------------------BLL層---------------------------

public class StudentBLL
??? {
??????? private readonly StudenDAL stuDal = new StudenDAL();
??????? public DataSet GetStudent(List<Condition> condition)
??????? {
??????????? return stuDal.GetStudent(condition);
??????? }
??? }

------------------------------UI層,查詢按鈕的單擊事件-------------------------------------

protected void btnSearch_Click(object sender, EventArgs e)

??? {

??????? Condition condition;

??????? StudentBLL stu = new StudentBLL();

??????? List<Condition> list = new List<Condition>();

??????? if (txtId.Text!="")

??????? {

??????????? condition = new Condition()

??????????? {

??????????????? paramName = "stuId",

??????????????? paramValue = txtId.Text,

??????????????? Operation = Condition.ConditionOperate.Equal

??????????? };

??????????? list.Add(condition);

??????? }

??????? if (txtName.Text!="")

??????? {

??????????? condition = new Condition()

??????????? {

??????????????? paramName = "stuName",

??????????????? paramValue = txtName.Text,

??????????????? Operation = Condition.ConditionOperate.Equal

??????????? };

??????????? list.Add(condition);

??????? }

??????? if (txtSex.Text != "")

??????? {

??????????? condition = new Condition()

??????????? {

??????????????? paramName = "Sex",

??????????????? paramValue = txtSex.Text,

??????????????? Operation = Condition.ConditionOperate.Equal

??????????? };

??????????? list.Add(condition);

??????? }

??????? GridView1.DataSource = stu.GetStudent(list);

??????? GridView1.DataBind();

??? }

轉載于:https://www.cnblogs.com/ianunspace/p/3448524.html

總結

以上是生活随笔為你收集整理的ASP.NET三层架构之不确定查询参数个数的查询的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。

主站蜘蛛池模板: 成人欧美视频 | 成人影视在线播放 | 99re这里只有精品在线观看 | 成人免费版欧美州 | 国产不卡视频一区二区三区 | 成人网av| 国产色a| 青青草国产精品 | 国产a一区二区三区 | 亚洲天堂2016 | 影音先锋每日资源 | 欧美在线视频网 | 真实的国产乱xxxx在线 | 欧美视频一区二区三区四区在线观看 | 日韩美女少妇 | 天堂中文在线观看 | 丁香花电影高清在线阅读免费 | 夜色88v精品国产亚洲 | 天天想你在线观看完整版电影高清 | 顶级尤物极品女神福利视频 | 偷拍精品一区二区三区 | 中文字幕二 | 亚洲区一区 | 日韩五码电影 | 中文字幕亚洲无线码在线一区 | 中文字幕最新 | 波多野42部无码喷潮在线 | 欧美亚洲中文精品字幕 | 小sao货水好多真紧h无码视频 | 人妖和人妖互交性xxxx视频 | 干干干操操操 | 成人免费福利视频 | 激情中文字幕 | 亚洲男人的天堂网 | 亚洲一区二区在线 | 成人福利小视频 | 青草视频在线播放 | 欧美中文 | 三级欧美韩日大片在线看 | 国产精品福利电影 | 国产片在线播放 | 无码人妻av一区二区三区波多野 | 人妻无码久久精品人妻 | 双腿张开被9个男人调教 | 99久久婷婷国产综合精品青牛牛 | 成年人福利网站 | 肉丝美脚视频一区二区 | 四季av一区二区 | 美女被男人c | julia在线播放88mav | 日本wwwxxxx| 手机在线永久免费观看av片 | a级片免费网站 | 河北彩花av在线播放 | 中文字幕无码人妻少妇免费 | 久成人 | 少妇被躁爽到高潮无码文 | 亚洲免费自拍 | 无码人妻少妇色欲av一区二区 | 一级网站在线观看 | 久久亚洲av永久无码精品 | 婚后打屁股高h1v1调教 | 午夜男人影院 | 黄色av成人 | 破处视频在线观看 | 一级片在线| 国产精品一区二区三区在线免费观看 | 日韩不卡免费视频 | 国产精品无码永久免费不卡 | 一级国产片 | 农村妇女毛片精品久久久 | 国产亚洲精品成人a | 国产第一区第二区 | 黄频在线 | 亚洲尤物在线 | 阿v天堂2018 俄罗斯丰满熟妇hd av色吧 | 呦呦视频在线观看 | 日本免费一区二区视频 | 午夜爽爽影院 | 欧美日韩极品 | jizzjizz在线播放 | 国产无遮挡一区二区三区毛片日本 | 欧洲一区二区在线观看 | 99热这里有 | 爱爱视频在线看 | 国产成人在线视频播放 | 黑人高潮一区二区三区在线看 | 国内外成人在线视频 | www插插插 | 不卡国产视频 | 成人777| 亚洲精品久久久狠狠狠爱 | 成年人91视频 | 污污视频在线免费观看 | 在线免费播放av | 韩国美女主播跳舞 | 国产九色av | 日韩黄色网页 | 国产尻逼视频 |