DataView RowFilter語法[C#]


本實施例描述的語法DataView.RowFilter 表達。它顯示了如何使用轉義值的方法正確構建表達式字符串(不帶“ SQL注入”)。

列名

如果列名稱包含任何這些特殊字符~ ( ) # \ / = > < + - * % & | ^ ' " [ ],則必須將列名稱括在方括號內[]如果列名包含右括號]或反斜杠\,請使用反斜杠(\]\\將其轉義

[C#]

dataView.RowFilter = “ id = 10” ; //列名“ id”中沒有特殊字符 dataView.RowFilter = “ $ id = 10” ; //列名“ $ id”中沒有特殊字符 dataView.RowFilter = “ [#id] = 10” ; //列名“ #id”中的特殊字符“#” dataView.RowFilter = “ [[id \]] = 10” ; //列名“ [id]”中的特殊字符 

文字

字符串值用單引號引起來 ' '如果字符串包含單引號 ',則引號必須加倍。

[C#]

dataView.RowFilter = “名稱='約翰'”         //字符串值 dataView.RowFilter = “名稱='約翰'A'''” // //用單引號引起來的字符串 John'A '”  dataView.RowFilter = String .Format “ Name ='{0}'” John'A '” .Replace(“'”“”“))); 

數字值不包含在任何字符中。這些值應與不變或英語文化的結果int.ToString()或 float.ToString()方法相同

[C#]

dataView.RowFilter = “年份= 2008”           //整數值 dataView.RowFilter = “價格= 1199.9” //浮點值  dataView.RowFilter = String .Format CultureInfo .InvariantCulture.NumberFormat, “ Price = {0}”,1199.9f); 

日期值包含在尖括號內 # #日期格式與DateTime.ToString()不變或英語文化方法的結果相同 

[C#]

dataView.RowFilter = “ Date =#12/31/2008#”           //日期值(時間為00:00:00) dataView.RowFilter = “ Date =#2008-12-31#” //也支持此格式 dataView.RowFilter = “日期=#12/31/2008 16:44:58#” //日期和時間值  dataView.RowFilter = String .Format CultureInfo .InvariantCulture.DateTimeFormat,“ Date =#{0}#”新的 DateTime2008,12,31,16,44,58 )); 

或者,您可以將所有值括在單引號中' '這意味着您可以將字符串值用於數字或日期時間值。在這種情況下,將使用當前區域性將字符串轉換為特定值。

[C#]

dataView.RowFilter = “ Date = '12 / 31/2008 16:44:58'”  //如果當前區域性是英語 dataView.RowFilter = “ Date = '31 .12.2008 16:44:58'” //如果當前區域性是德國人  dataView.RowFilter = “ Price ='1199.90'” // //如果當前區域性是英語 dataView.RowFilter = “ Price ='1199,90'” //如果當前區域性是德語 

比較運算符

等於,不等於,更少,更大的運算符用於僅包含適合比較表達式的值。您可以使用這些運算符= <> < <= > >=

注:字符串比較是 文化的敏感,它使用的CultureInfo從DataTable.Locale 相關表的屬性(dataView.Table.Locale)。如果未顯式設置該屬性,則其默認值為DataSet.Locale(並且其默認值為當前系統區域性Thread.CurrentThread.CurrentCulture)。

[C#]

dataView.RowFilter = “ Num = 10”              //數字等於10 dataView.RowFilter = “ Date <#1/1/2008#” //日期小於1/1/2008 dataView.RowFilter = “名稱<> 'John'“ //字符串不等於' John'dataView.RowFilter = ” Name> ='Jo'“ //字符串比較 

運算符IN用於僅包括列表中的值。您可以將運算符用於所有數據類型,例如數字或字符串。

[C#]

dataView.RowFilter = “ Id IN(1、2、3)”                     //整數值 dataView.RowFilter = “價格IN(  1.0,9.9,11.5 )” //浮點值 dataView.RowFilter = “名稱IN('John', 'Jim','Tom')“ //字符串值 dataView.RowFilter = ”日期輸入(#12/31/2008#,#1/1/2009#)“ //日期時間值  dataView.RowFilter = “ Id NOT IN(1、2、3)” //不在列表中的值 

運算符LIKE用於僅包含與通配符匹配模式的值。通配符*或 %,它可以在模式的開頭,'*value'結尾'value*'或兩者都在'*value*'通配符在百通的中間'va*lue'不允許的

[C#]

dataView.RowFilter = “ Name        LIKE'j *'” //以'j' 開頭的 dataView.RowFilter = “ Name LIKE'%jo%'” //包含'jo'的值  dataView.RowFilter = “名稱 不像'j *'” //不以'j'開頭的值 

如果在LIKE子句模式包含任何這些特殊字符 * % [ ],這些字符必須用括號逃脫[ ]這樣 [*][%][[][]]

[C#]

dataView.RowFilter = “ Name LIKE'[*] *'”      //以'*' 開頭的 dataView.RowFilter = “ Name LIKE'[[] *'” // //以'['開頭的值 

下面的方法對LIKE子句中使用的文本值進行轉義。

[C#]

公共靜態字符串 EscapeLikeValue字符串 valueWithoutWildcards) { StringBuilder sb = new StringBuilder(); int i = 0; i <valueWithoutWildcards.Length; i ++) { char c = valueWithoutWildcards [i]; 如果(c == '*' || c == '%' || c == '[' || c == ']' sb.Append(“ [”).Append(c).Append(“]”); 否則(c == '\'' sb.Append(“''”); 其他 sb.Append(c); } 返回 sb.ToString(); } 

[C#]

//選擇所有以值字符串(在本例中為“ *”)開頭的
字符串 value = “ *” ; // dataView.RowFilter將是:“ Name LIKE'[*] *'” dataView.RowFilter = String .Format “ Name LIKE'{0} *'”EscapeLikeValue(value)); 

布爾運算符

布爾運算符ANDOR並且NOT被用來連接表達式。運算符NOT優先於AND運算符,並且優先於OR運算符。

[C#]

//運營商,擁有優先級高於OR運算符,括號需要 dataView.RowFilter = “城市= '東京' AND(年齡<20或年齡> 60)” ; //以下示例執行相同的 dataView.RowFilter = “ City <>' Tokyo'AND City <>'Paris'” ; dataView.RowFilter = “沒有城市='東京'而沒有城市='巴黎'” ; dataView.RowFilter = (城市=“東京”或城市=“巴黎”)” dataView.RowFilter = “城市不在('東京','巴黎')” ; 

算術和字符串運算符

算術運算符是加+,減-,乘*,除 /和模%

[C#]

dataView.RowFilter = “母親年齡-<20歲”//母親年輕的人 dataView.RowFilter = “年齡%10 = 0” ; //十年生日的人 

還有一個字符串運算符 串聯 +

親子關系參照

甲  父表可以在表達式中使用父列名與被引用Parent.的前綴。在A柱 子表可以使用兒童列名與引用 Child.前綴。

對子列的引用必須在聚合函數中,因為子關系可能返回多行。例如,表達式SUM(Child.Price)返回子表中與父表中的行相關的所有價格的總和。

如果一個表具有多個子關​​系,則前綴必須包含關系名稱。例如,表達式Child(OrdersToItemsRelation).Price 使用名為OrdersToItemsRelation的關系引用子表中的Price列。

匯總功能

支承有下列聚合函數SUM, COUNTMINMAXAVG (平均), STDEV統計標准偏差)和 VAR(統計方差)。

本示例顯示在單個表上執行的聚合函數。

[C#]

//選擇具有高於平均工資數據的人 View.RowFilter = “ Salary> AVG(Salary)” ; 

以下示例顯示了在具有父子關系的兩個表上執行的聚合函數。假設有帶有父子關系的表Orders和Items。

[C#]

//選擇具有5個以上項目的訂單 dataView.RowFilter = “ COUNT(Child.IdOrder)> 5” ; //選擇總價(商品總價)大於或等於$ 500的 訂單dataView.RowFilter = “ SUM(Child.Price)> = 500” ; 

功能

還支持以下功能。詳細說明可以在這里找到DataColumn.Expression

  • CONVERT –將特定的表達式轉換為指定的.NET Framework類型
  • LEN –獲取字符串的長度
  • ISNULL –檢查表達式,然后返回檢查的表達式或替換值
  • IIF –根據邏輯表達式的結果獲取兩個值之一
  • TRIM –刪除所有前導和尾隨空白字符,例如\ r,\ n,\ t,,'
  • SUBSTRING –從字符串中的指定點開始獲取指定長度的子字符串


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM