日期:2014-05-17  浏览次数:20720 次

请问,DataTable.Compute方法
DataTable.Compute 方法:http://msdn.microsoft.com/zh-cn/library/system.data.datatable.compute.aspx


string strConn = "server = '(local)';database=Person;integrated security = true";
string strSQL = "SELECT * FROM 客户表"; 
SqlDataAdapter da = new SqlDataAdapter(strSQL, strConn);
DataTable dt = new DataTable("新表");
da.Fill(dt);
int i_个数 = (int)dt.Compute("COUNT(*)","电子邮件 IS NOT NULL");
Console.WriteLine(i_个数);
Console.ReadKey();


此代码,把数据填充到DataTable ,然后调用Compute方法查询电子邮件不为空的总数目,
红色代码为什么报错:“聚合参数中的语法错误: 需要具有可能的“Child”限定符的单个列参数”

如果改成COUNT(姓名)就不报错,这是为什么,不允许用“*”吗?

------解决方案--------------------
COUNT(*)不行,没有指定是哪列,没法统计
------解决方案--------------------
探讨
DataTable.Compute 方法:http://msdn.microsoft.com/zh-cn/library/system.data.datatable.compute.aspx


string strConn = "server = '(local)';database=Person;integrated security = true";
string strSQL = ……

------解决方案--------------------
指定列,不然没法统计
------解决方案--------------------
在创建表达式时,使用 ColumnName 属性来引用列
计算使用基于SQL的语法,但它不是一个完整的SQL实现。 COUNT(*)是不被支持的。所以要指定具体的列
------解决方案--------------------
C# code

dt.Select("电子邮件 is not null").Count()