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

C#断开式数据库连接的DataView数据筛选的问题
dv.RowFilter = string.Format("DATENAME(MONTH,日期)='{0}'", 1);  //筛选语句
按道理表达式的值会是我时间的月份和1比较,但是出现异常了我不知道为什么  
异常信息是  【表达式包含未定义的函数调用 DATENAME()】
菜鸟求解
数据库 c#

------解决方案--------------------
楼主我个人觉得 dataview 是对datatable内的数据进行筛选,而不是数据库

------解决方案--------------------
dv.RowFilter = string.Format("MONTH(日期)='{0}'", 1);
这样行吗
------解决方案--------------------
RowFilter 不支持 数据库里某些函数,你只能用其他方式来解决
如,你在查询的时候,就把月份作为附加的一列选出来(把此列在界面隐藏),然后用这列来过滤
------解决方案--------------------
两个概念.
数据库查找,可以使用数据库相关函数.
而dataview 中的筛选,有自己相应的函数继规则,筛选条件一般直接使列名称=??这样的格式
------解决方案--------------------
RowFilter 不支持DATENAME这个函数

这里有比较年的代码,你可以参考它修改下:
bigDT.DefaultView.RowFilter = "CONVERT(SUBSTRING(CONVERT(date_posted, 'System.String'), 5, 4), 'System.Int32')=2012";

代码来自:
http://stackoverflow.com/questions/9201816/add-rowfilter-condition-for-datetime-year-only-check
------解决方案--------------------
RowFilter不是dataview的筛选吗,怎么能对数据库进行操作
------解决方案--------------------
DataColumn.Expression 并不完全等同sql,他有自己的规定

这些具体规定可以去看msdn
http://msdn.microsoft.com/zh-cn/library/system.data.datacolumn.expression%28v=vs.80%29.aspx
------解决方案--------------------
引用:
引用:
楼主我个人觉得 dataview 是对datatable内的数据进行筛选,而不是数据库但是我觉得执行语句和数据库有差别吗?


datename() 是数据库里的函数 dataview里 有这个函数吗