在开发一款软件,用到了 MyS中的 DataView 查询。查询后判断视图是否有返回值,找了好久,终于找到了他的 DataView XX.Count 参数。
string table = String.Format("`Database` WHERE `XX` = ‘{0}‘;", XX); DataView dv = mysqlUtile.MysqlDataAdapter(table); if (dv.Count==0) { ... } }
原文网址:
DataView类用来表示定制的DataTable的视图。DataTable和DataView的关系是遵循著名的设计模式--文档/视图模式,其中DataTable是文档,而Dataview是视图。
在任何时候,你都可以有多个基于相同数据的不同的视图。更重要的是,你可以对每一个具有自己一套属性、方法、事件的视图作为独立的对象进行处理。这也代表了相对ADO一个巨大的飞跃。
创建DataView
public DataView(DataTable);
DataView只有同已经存在的、很可能是非空的DataTable对象连接后才可用。通常,这个连接在构造时就指定了。
DataView dv;dv = new DataView(theDataSet.Tables["Employees"]);
但是,你也可以先创建一个新的视图,然后再用Table属性同表相关联。
DataView dv = new DataView();dv.Table = theDataSet.Tables["Employees"];
DataView构造函数使你由DataTable中得到一个DataView对象。如果需要,反之亦可。事实上,DataTable对象的DefaultView属性返回一个该表的DataView对象。
DataView dv = dt.DefaultView;
一旦你有了DataView对象,你可以利用它的属性来建立你希望用户见到的数据行集。一般,你可以使用下列属性:
RowFilter
Sort
前者可以定制视图中可见数据应匹配的规则。而后者通过表达式来进行排序。当然你可以使用这两者的任意组合。
设置过滤 RowFilter是一个可读写的属性,用来读取和设置表过滤的表达式。
你可以用列名,逻辑和数字运算符和常量的任意合法组合组成表达式。以下是一些例子:
dv.RowFilter = "Country = ‘USA‘";dv.RowFilter = "EmployeeID >5 AND Birthdate < #1/31/82#"
dv.RowFilter = "Description LIKE ‘*product*‘"
让我们来看一下过滤器的基本规则和运算符。
过滤字符串是表达式的逻辑连接。可以用AND,OR,NOT来连接成一个较短的表达式,也可以使用圆括号来组成子句,指定优先的运算。
通常包含列名的子句同字母、数字、日期或另一个列名进行比较。这里,可以使用关系运算符和算术运算符,如>=, <, >, +, *, % (取模)等等。
如果要选取的行并不能方便地通过算术或逻辑运算符表达,你可以使用IN操作符。以下代码显示如何选取一个随机行:
你也可以使用通配符*和%,它们同LIKE运算符一起使用时显得更有用。它们都表示任意数量的字符,可以相互替代使用。
请注意,如果在LIKE子句中已经有了*或%字符,你必须用方括号将其括起,以免歧义。如果很不幸,字符串中方括号本身也存在了,那么它也必须用将本身括起。这样,匹配语句会如下所示:
通配符只允许在过滤字符串的开头或结尾处使用,而不能在字符串中间出现。例如,下列语句会产生运行时错误:
字符串必须以单引号括起,而日期型必须以#符号括起。字符型值可以使用小数点和科学计数法。
RowFilter也支持聚合函数,如SUM, COUNT, MIN,MAX, and AVG。如果表中没有数据行,那么函数将返回NULL。
在介绍RowFilter表达式的最后,让我们讨论三个很便利的函数:Len,IIF和Substring。
正如其名,Len()返回特定表达式的长度。该表达式可以是一个列名,也可以是其他合法的表达式。
Substring()返回指定的表达式自特定位置开始,,特定长度的字符子串。
我最喜欢用的是IIF(),它按照逻辑表达式的值有一到两个值。IIF是IF-THEN-ELSE语句的紧凑表达。语法如下:
通 过该函数,可以建立非常复杂的过滤字符串。例如,假定你从SQL Server的Northwind数据库中取得Employees表,下列表达式可以选出那些employeeID小于6且lastname为偶数个字符和employeeID大于6且lastname为奇数个字符的员工。