• 全部
  • C#综合技术
  • C#互联网桌面应用
  • AppLauncher
  • WinForm&WPF
  • C#开发新技术
  • 问答

怎样实现在搜索结果中继续查找

hcz000 2003-11-12 11:13:55
搜索结果只存到临时表(不在数据库中建立表)

假设已有adapter和conn以及数据库中的表mydb(ID,Name),dataGrid1
//第一次搜索到的结果存到dt中
DataTable dt=new DataTable();
sql="select * from mydb where ID like'%1001'";
dapter=new OracleDataAdapter(sql,conn);
adapter.Fill(dt);
dataGrid1.DataSoure=dt;

//要想第二次在第一次的基础上继续搜索(如ID 包含11001的项) 我原设想

sql1=String.Format("select * from {0} where ID like '%11001'",dt);
dapter1=new OracleDataAdapter(sql1,conn);
adapter1.Fill(dt);//或存入新定义的dt1

语法应该没错,可是总是提示错误的表名(是不是dt一定要是数据库中的表才行)
不知道不在数据库中建一个表来保存结果,能不能实现继续搜寻的功能
请指教
...全文
70 点赞 收藏 7
写回复
7 条回复
切换为时间正序
当前发帖距今超过3年,不再开放新的回复
发表回复
wenson 2004-02-12
建立临时表是个好办法,对于winform程序在内存中建立datatable对象,填充数据,是完全可以的。但是像google那种所有引擎就不知道怎么弄得了,我现在正在写一个组合查询的东西,来网上和大家交流一下,msn: zxh_pro@hotmail.com
回复
sea026 2003-11-14
使用 RowFilter 属性,您可以根据行的列值来指定行的子集。有关 RowFilter 属性的有效表达式的更多信息,请参见有关 DataColumn 类的 Expression 属性的参考信息。
如果要返回对数据的特定查询的结果(而不是提供数据子集的动态视图)以实现最佳性能,请使用 DataView 的 Find 或 FindRows 方法,而不是设置 RowFilter 属性。设置 RowFilter 属性会使数据的索引被重新生成,从而增加应用程序的系统开销并降低性能。最好将 RowFilter 属性用于其中的绑定控件显示筛选结果的数据绑定应用程序。Find 和 FindRows 方法会利用当前的索引,而不需要重新生成索引。有关 Find 和 FindRows 方法的更多信息,请参见搜索 DataView。
回复
sea026 2003-11-14
.NET Framework 开发员指南

搜索 DataView请参见
使用 DataView 查看数据 | 创建和使用 DataView | DataTable 类 | DataView 类
语言
C#

Visual Basic

全部显示
使用 DataView 的 Find 和 FindRows 方法,您可以按照行的排序关键字值来对行进行搜索。Find 和 FindRows 方法中的搜索值是否区分大小写取决于基础 DataTable 的 CaseSensitive 属性。搜索值必须完全匹配现有排序关键字值才能返回结果。

Find 方法返回一个整数,该整数表示匹配搜索条件的 DataRowView 的索引。如果多个行匹配搜索条件,则只返回第一个匹配 DataRowView 的索引。如果未找到匹配项,Find 将返回 -1。

若要返回匹配多个行的搜索结果,可以使用 FindRows 方法。FindRows 的工作方式与 Find 方法类似,不同的只是 FindRows 返回引用 DataView 中所有匹配行的 DataRowView 数组。如果未找到匹配项,DataRowView 数组将为空。

若要使用 Find 或 FindRows 方法,必须通过将 ApplyDefaultSort 设置为 true 或通过使用 Sort 属性来指定排序顺序。如果未指定排序顺序,则将引发异常。

Find 和 FindRows 方法将一个值数组用作输入,该数组的长度与排序顺序所包含的列数相匹配。在对单个列进行排序的情况下,可以传递单个值。对于包含多个列的排序顺序,可传递一个对象数组。请注意,当对多个列进行排序时,对象数组中的值必须匹配在 DataView 的 Sort 属性中指定的列的顺序。

以下代码显示对具有单个列排序顺序的 DataView 调用的 Find 方法。

[Visual Basic]
Dim custView As DataView = New DataView(custDS.Tables("Customers"), "", _
"CompanyName", DataViewRowState.CurrentRows)

Dim rowIndex As Integer = custView.Find("The Cracker Box")

If rowIndex = -1 Then
Console.WriteLine("No match found.")
Else
Console.WriteLine("{0}, {1}", _
custView(rowIndex)("CustomerID").ToString(), _
custView(rowIndex)("CompanyName").ToString())
End If

[C#]
DataView custView = new DataView(custDS.Tables["Customers"], "",
"CompanyName", DataViewRowState.CurrentRows);

int rowIndex = custView.Find("The Cracker Box");

if (rowIndex == -1)
Console.WriteLine("No match found.");
else
Console.WriteLine("{0}, {1}",
custView[rowIndex]["CustomerID"].ToString(),
custView[rowIndex]["CompanyName"].ToString());

如果 Sort 属性指定多个列,则必须按 Sort 属性指定的顺序为每个列传递包含搜索值的对象数组,如以下代码示例所示。

[Visual Basic]
Dim custView As DataView = New DataView(custDS.Tables("Customers"), "", _
"CompanyName, ContactName", _
DataViewRowState.CurrentRows)

Dim foundRows() As DataRowView = custView.FindRows(New object() {"The Cracker Box", "Liu Wong"})

If foundRows.Length = 0 Then
Console.WriteLine("No match found.")
Else
Dim myDRV As DataRowView
For Each myDRV In foundRows
Console.WriteLine("{0}, {1}", myDRV("CompanyName").ToString(), myDRV("ContactName").ToString())
Next
End If

[C#]
DataView custView = new DataView(custDS.Tables["Customers"], "",
"CompanyName, ContactName",
DataViewRowState.CurrentRows);

DataRowView[] foundRows = custView.FindRows(new object[] {"The Cracker Box", "Liu Wong"});

if (foundRows.Length == 0)
Console.WriteLine("No match found.");
else
foreach (DataRowView myDRV in foundRows)
Console.WriteLine("{0}, {1}", myDRV["CompanyName"].ToString(), myDRV["ContactName"].ToString());

请参见
使用 DataView 查看数据 | 创建和使用 DataView | DataTable 类 | DataView 类

发送有关此主题的意见

© 2001-2002 Microsoft Corporation。保留所有权利。

回复
brightheroes 2003-11-14
其实你还不如就用sql直接再选呢
回复
hcz000 2003-11-14
怎麽没人回答啊 是不是太简单了
回复
hcz000 2003-11-12
我的意思是只用内存表能不能实现?谢谢
回复
brightheroes 2003-11-12
建立表可以,你就做一个creat table的sql语句就可以了

回复
相关推荐
发帖
C#
创建于2007-09-28

10.5w+

社区成员

.NET技术 C#
申请成为版主
帖子事件
创建了帖子
2003-11-12 11:13
社区公告

让您成为最强悍的C#开发者