项目中经常用DataTable在内存中存储并操作数据,在进行报表开发的时候,报表的各种过滤功能用这个内存表可以大现身手,但最近在使用过程中却遇到一个奇怪的现象,现将该问题及处理方法记录一下。这是在做护士站的执行单的时候遇到过的,我使用DataTable的Select方法根据条件对内存表进行过滤,但是偶尔会出现非预期结果,如:

 string strFilter = "处方号={0}";
strFilter = string.Format(strFilter, );
DataRow[] row = dsDrugList.Select(strFilter);

在dsDrugList中有处方号=123456的数据,但是最终的row没有得到处方号为123456,百思不得其解。

因此查阅MSDN:

获取 DataRow 对象的数组。

名称

说明

Select()

获取所有 DataRow 对象的数组。

Select(String)

按照主键顺序(如果没有主键,则按照添加顺序)获取与筛选条件相匹配的所有DataRow 对象的数组。

Select(String, String)

获取按照指定的排序顺序且与筛选条件相匹配的所有 DataRow 对象的数组。

Select(String, String, DataViewRowState)

获取与排序顺序中的筛选器以及指定的状态相匹配的所有 DataRow 对象的数组

重点看下一个参数的重载方法:Select(String)

按照主键顺序(如果没有主键,则按照添加顺序)获取与筛选条件相匹配的所有 DataRow 对象的数组。

微软自己的示例:

 private void GetRowsByFilter()
{
DataTable table = DataSet1.Tables["Orders"];
// Presuming the DataTable has a column named Date.
string expression;
expression = "Date > #1/1/00#";
DataRow[] foundRows; // Use the Select method to find all rows matching the filter.
foundRows = table.Select(expression); // Print column 0 of each returned row.
for(int i = ; i < foundRows.Length; i ++)
{
Console.WriteLine(foundRows[i][]);
}
}

嗯,并没有什么特别之处,晕乎了半小时。。。

最终MSDN中该方法的备注说明引起了我的思考。

若要创建 filterExpression 参数,请使用与应用于 DataColumn 类的 Expression 用来创建筛选器的属性值相同的规则。

难道我传递进去的过滤表达式与DataTable中的“属性值规则”不一样?但会是什么不一样呢,因此询问大师兄,并将我的怀疑告之,大师兄看了后建议我将条件转换为字符串试试,试了下过不如其然。

由于我的列“处方号”在数据库中是一个number类型,因此我通过filterExpression传递进去的参数没有加入引号,修改为如下即可完全正确select出期望的数据了。

如下('{0}'占位符加单引号):

  string strFilter = "处方号='{0}'";
strFilter = string.Format(strFilter, );
DataRow[] row = dsDrugList.Select(strFilter);

关于DataTable.Select方法偶尔无法正确查到数据的处理方法的更多相关文章

  1. oracle select into 的时候提示未找到数据

    ); begin '; --在select into 后面添加exception 错误处理机制 exception when no_data_found then version:= 'hhh '; ...

  2. 使用getJSON()方法异步加载JSON格式数据

    使用getJSON()方法异步加载JSON格式数据 使用getJSON()方法可以通过Ajax异步请求的方式,获取服务器中的数组,并对获取的数据进行解析,显示在页面中,它的调用格式为: jQuery. ...

  3. DataSource绑定DataTable.Select()显示system.data.DataRow问题解决的方法

    有时候我们须要在控件中绑定DataTable中设定条件过滤后的数据,此时,在winForm环境中,一些控件不能正确绑定并显示数据内容.这是由于DataTable.Select()返回的是DataRow ...

  4. SQL Server游标 C# DataTable.Select() 筛选数据 什么是SQL游标? SQL Server数据类型转换方法 LinQ是什么? SQL Server 分页方法汇总

    SQL Server游标   转载自:http://www.cnblogs.com/knowledgesea/p/3699851.html. 什么是游标 结果集,结果集就是select查询之后返回的所 ...

  5. [datatable]关于在DataTable中执行DataTable.Select("条件")返回DataTable的解决方法

    -- :09关于在DataTable中执行DataTable.Select("条件")返回DataTable的解决方法 在实际编程工程中,常常遇到这样的情况:DataTable并不 ...

  6. 在DataTable中执行DataTable.Select("条件")返回DataTable;

    转:http://blog.csdn.net/hcf_force/article/details/7779062 1.在DataTable中执行DataTable.Select("条件&qu ...

  7. 项目中遇到的 linq datatable select

    1如何使用DataTable.Select选出来的Rows生成新的DataTable?DataTable dt = 数据源;DataTable dtt = new DataTable();dtt=dt ...

  8. 在DataTable中执行DataTable.Select("条件")

     .在DataTable中执行DataTable.Select("条件")返回DataTable:  // <summary> // 执行DataTable中的查询返回 ...

  9. Datatable的查找和排序(Datatable.Select)

    Datatable  是一种常用的数据结构.数据类型有点类似于数据库中的表结构.在没有使用优秀的orm框架前,大部分的数据库的数据都是先变为Datatable 然后再通过代码转换变成 object. ...

随机推荐

  1. JAVA二叉树递归构造、二叉树普通遍历及递归遍历

    二叉树类: package com.antis.tree; public class BinaryTree { int data; //根节点数据 BinaryTree left; //左子树 Bin ...

  2. UVa 12265 - Selling Land

    链接: https://uva.onlinejudge.org/index.php?option=com_onlinejudge&Itemid=8&page=show_problem& ...

  3. 怎么解决深入学习PHP的瓶颈?

    PHP给学习者的感觉是:初学的时候很容易,但是学了2-3年,就深刻感觉遇到了瓶颈,很难深入,放弃又可惜.所谓“鸡肋,食之无味弃之可惜”的感觉很是贴切. 经常会有这种感觉:不学,看似也不后退:学了,好像 ...

  4. C# 控制台模拟序列化和反序列化

    序列化:将对象转换成二进制串的过程 反序列化:将序列化过程中产生的二进制串转换成对象的过程 作用:传输数据 using System; namespace WriteTextContent { [Se ...

  5. selenium处理table表格

    在UI自动化测试中经常会遇到表格的处理,下面是一点心得. 假设网页页面有一个表格,如何获取这个table的指定cell的值?你会说我们可以根据xpath定位到这个cell的行列,然后getText() ...

  6. Python 学习笔记(十)Python集合(一)

    回顾 int/float/str/list/tuple/dict 整数型和浮点型是不可变的,不是序列 字符串是不可变的,是序列 列表是可变的,是序列 元组是不可变的,是序列 字典是可变得,但不是序列 ...

  7. Spring入门第二课:Spring配置Bean的细节

    1.配置bean的作用域: 通过配置scope属性可以bean的作用域,参数有 prototype.request.session.singleton. 1)singleton为单例,IoC容器只会创 ...

  8. 模板——最小生成树kruskal算法+并查集数据结构

    并查集:找祖先并更新,注意路径压缩,不然会时间复杂度巨大导致出错/超时 合并:(我的祖先是的你的祖先的父亲) 找父亲:(初始化祖先是自己的,自己就是祖先) 查询:(我们是不是同一祖先) 路径压缩:(每 ...

  9. Redis与Python进行交互

    安装包 安装Redis的有3种方式https://github.com/andymccurdy/redis-py 第一种:进⼊虚拟环境,联⽹安装包redis pip install redis 第二种 ...

  10. Tomcat问题之 启动 Cannot find /usr/local/tomcat/bin/setclasspath.sh

    在linux启动startup命令报Cannot find /usr/local/tomcat/bin/setclasspath.sh  使用: unset CATALINA_HOME命令得以解决   ...