项目中经常用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. PHP 判断常量,变量和函数是否存在

    判断变量是否被定义:defined() if (defined('CONST_NAME')) { //do something } 判断变量是否存在:isset() ,注意变量未声明或声明时赋值为NU ...

  2. 本地测试时修改localhost为自己网站的域名的方法(转载)

    做网站的,在本地测试时,所用的地址基本上都是localhost 或者直接用IP地址:127.0.0.1 如果仅仅是用来测试网站内部的程序代码之类的当然没问题,但是如果我们还要测试网站上添加的广告或者统 ...

  3. JS中的prototype (转载)

    JS中的prototype   JS中的phototype是JS中比较难理解的一个部分 本文基于下面几个知识点: 1 原型法设计模式 在.Net中可以使用clone()来实现原型法 原型法的主要思想是 ...

  4. 商品数量编辑按钮3D效果动画

    .move-enter-active transition:all 0.4s linear transform:rotate(180deg).move-leave-active transition: ...

  5. Coursera机器学习基石 第2讲:感知器

    第一讲中我们学习了一个机器学习系统的完整框架,包含以下3部分:训练集.假设集.学习算法 一个机器学习系统的工作原理是:学习算法根据训练集,从假设集合H中选择一个最好的假设g,使得g与目标函数f尽可能低 ...

  6. [转]MFC子线程更改图像数据后更新主窗口图像显示方法

    程序思路是由外部的输入输出控制卡发出采集图像信号,之后相机采集图像得到图像数据指针,接收图像数据指针创建成图像最后显示到MFC对话框应用程序的Picture Control控件上,同时,为了标定相机位 ...

  7. RabbitMQ + topic发送消息+python

    接口使用两个queue监听信息,且有两个测试环境,所以需要向mq中发送测试数据: python使用pika包:Pika is a RabbitMQ (AMQP-0-9-1) client librar ...

  8. HDU 2092 (将表达式变成一元二次方程形式)

    传送门: http://acm.hdu.edu.cn/showproblem.php?pid=2092 整数解 Time Limit: 1000/1000 MS (Java/Others)    Me ...

  9. Spring MVC 框架

    一.SpringMVC基础入门,创建一个HelloWorld程序 1.首先,导入SpringMVC需要的jar包. 2.添加Web.xml配置文件中关于SpringMVC的配置 <!--conf ...

  10. Rem实现自适应布局

    rem布局的目的是为了让我们可以用同一份代码,适应不同的移动终端(rem:就是css单位) 1.项目入口html文件<meta name="viewport" content ...