關於Oracle的動態查詢

2021-06-06 20:14:10 字數 2208 閱讀 8384

本來想用儲存過程實現動態查詢,但是我們直接拼接的sql還是無法避免sql注入攻擊,並且不能使用繫結變數。思前想後還是寫了個dynamicsql的類用來實現動態拼接sql。具體的怎麼拼接通過實體的特性來實現。這個類代替我們原先的parameterclass類,用來實現動態查詢。

下面大致說下特性的使用:

view code

[datamember]

public string s_st

///

/// 冊本號

///

[datamember]

public string s_ch

///

/// 使用者編號

///

[datamember]

public string s_cid

///

/// 客戶編號

///

///

/// 戶名

///

///

/// 位址

///

寫完entity後呼叫dynamicsql的gettable方法就可以了。注意**中的datamember特性是標識實體是wcf的資料成員可以不要,使用也沒有問題。最終的檢驗**也可以用特性實現。

呼叫方法表現層:

private void btnsearch_click(object sender, eventargs e)

;datatable dt = bw.fuhedj_chaxun(dto);

bw.close();

}應用層:

///

/// 複核登記查詢

///

///

///

public datatable fuhedj_chaxun(entity.biaowugl.fuhedjsearchdto dto)

下面是部分**的實現,寫的比較倉卒,應該會有bug,碰到問題在修改了:

view code

namespace csms2.service

///

/// 獲取引數

///

///

///

///

private static oracleparameter getoracleparameter(t dto, out string wheresql)

}oracleparameter storedparams = new oracleparameter[length];

int j = 0;

for (int i = 0; i < dto.gettype().getproperties().length; i++)

else if (p.propertytype == typeof(int))

else if (p.propertytype == typeof(decimal))

else if (p.propertytype == typeof(datetime))

if (op == operater.like)

m.value = p.getvalue(dto, null) + "%";

else

m.value = p.getvalue(dto, null);

storedparams[j] = m;

j++;}}

if (wheresql.length > 0)

wheresql = " where" + wheresql.substring(4);

return storedparams;

}///

/// 獲取列名

///

///

///

///

/// 獲取列名

///

///

///

///

/// 獲取實體對應的表名

///

///

///

///

view code

namespace csms2.entity

///

/// 中文列名

///

public string columnname

public operater operater

}///

/// 操作類

///

public enum operater

}

關於Spring Data Jpa 動態查詢

通常來說 的後台管理系統對於資料的查詢需要提供多種查詢條件,並且要求在使用者任意的選擇條件進行查詢 這種情況下後端需要通過不同的條件組合對資料庫進行查詢,mybatis的標籤能夠很好地實現這個功能 只需要在if標籤中對引數進行判空,非空則拼接where 條件即可。但是對於spring data jp...

關於動態sql的子查詢

工作中遇到了乙個查詢需求,想查出來的資料結構是這樣的 list selectstudentinfo student的結構是這樣的 public class student public class report 可以用以下動態sql完成 studentmap type student id prop...

oracle關於模糊查詢的問題

以前模糊查詢使用的是 like 例如 schema kmh qc select v.unitprice,v.unit,v.storage,v.stationeryname,v.stationeryid,v.modelsize,v.classname,v.classid from v wjqc sto...