CSDN首页 空间 新闻 论坛 Blog 下载 读书 网摘 搜索 .NET Java 视频 接项目 求职 在线学习 买书 程序员 通知
不看会后悔的Windows XP之经验谈 简单快捷DIY实用家庭影院
CSDN社区
搜索 收藏 打印 关闭
CSDN社区 >  .NET技术 >  VB.NET

高级查询问题:查询结果的列数可选,查询条件可选,数据库是SQL2000,用vb.net怎么实现,望大虾教我!!

楼主perukelzhx(一块臭豆腐)2005-05-28 16:58:04 在 .NET技术 / VB.NET 提问

要求:数据库是SQL2000,查询结果的列数可选,查询条件可选,最后用vb.net实现。  
   
  关键在于查询结果的列数以及查询条件都是变动的,不知道如何实现,望大虾教我!!  
  问题点数:40、回复次数:20Top

1 楼lzmtw(水如烟)回复于 2005-05-28 17:08:03 得分 0

以前做过,要不要一大段列出来然后你来整理Top

2 楼lzmtw(水如烟)回复于 2005-05-28 17:11:50 得分 30

哈,代码太长了.还是说说思路吧.Top

3 楼perukelzhx(一块臭豆腐)回复于 2005-05-28 17:11:57 得分 0

好的,谢谢!!  
  有例子最好了!Top

4 楼perukelzhx(一块臭豆腐)回复于 2005-05-28 17:13:16 得分 0

有思路也行  
  lzmtw(水如烟)   ,请讲!Top

5 楼lzmtw(水如烟)回复于 2005-05-28 17:15:04 得分 0

查询无非是这样的:  
  SELECT   ()   FROM   ()   WHERE   (),()表示可选.如果你指定了表,那方便得多,我原来的是任意的,所以代码长了好多.这里不考虑多表查询.当然变通一下,做一个视图就可以简化成上面的格式.Top

6 楼lzmtw(水如烟)回复于 2005-05-28 17:16:24 得分 0

选列出的字段,那是简单的事,这里也不说了.有点头疼的是WHERE.Top

7 楼lzmtw(水如烟)回复于 2005-05-28 17:18:22 得分 0

WHERE有两种考虑,一是查询NULL的,二是不查询NULL而查询个别字段特定值的.Top

8 楼lzmtw(水如烟)回复于 2005-05-28 17:19:49 得分 0

非NULL的查询主要有LIKE,IN,BETWEEN   INTop

9 楼lzmtw(水如烟)回复于 2005-05-28 17:21:00 得分 0

当然,你还可以考虑大于,小于,NOT   等等的组合.Top

10 楼lzmtw(水如烟)回复于 2005-05-28 17:21:32 得分 0

<Serializable()>   Public   Class   QueryInfo  
          Private   Shared   SelectString1   As   String   =   "{0}   IS   {1}"  
          Private   Shared   SelectString2   As   String   =   "{0}   LIKE   {1}"  
          Private   Shared   SelectString3   As   String   =   "{0}   IN   ({1})"  
          Private   Shared   SelectString4   As   String   =   "{0}   BETWEEN   {1}   AND   {2}"  
   
   
          Private   Shared   SelectString   As   String  
          Private   Shared   ConvertValue1   As   String  
          Private   Shared   ConvertValue2   As   String  
          Public   Shared   Function   GetData(ByVal   Data   As   QueryData,   ByVal   Way   As   QueryWay)   As   String  
                  Select   Case   Way  
                          Case   QueryWay.指定  
                                  If   Data.FirstValue.ToLower.IndexOf("null")   <>   -1   Then  
                                          SelectString   =   SelectString1  
                                  Else  
                                          SelectString   =   SelectString3  
                                  End   If  
                          Case   QueryWay.模糊  
                                  If   Data.FirstValue.ToLower.IndexOf("null")   <>   -1   Then  
                                          SelectString   =   SelectString1  
                                  Else  
                                          If   Data.FieldDataType   =   LzmTW.Common.SqlValueStringClass.DataType.字符   Then  
                                                  SelectString   =   SelectString2  
                                          Else  
                                                  SelectString   =   SelectString3  
                                          End   If  
                                  End   If  
                          Case   QueryWay.间隔  
                                  SelectString   =   SelectString4  
                                  ConvertValue2   =   GetValue(Data.FieldDataType,   Data.LastValue)  
                  End   Select  
                  ConvertValue1   =   GetValue(Data.FieldDataType,   Data.FirstValue)  
                  Return   String.Format(SelectString,   Data.FieldName,   ConvertValue1,   ConvertValue2)  
          End   Function  
          Private   Shared   Function   GetValue(ByVal   FieldDataType   As   LzmTW.Common.SqlValueStringClass.DataType,   ByVal   Value   As   String)   As   String  
                  If   Value   Is   Nothing   Then   Return   Nothing  
                  Dim   tmp   As   String  
                  If   Value.ToLower.IndexOf("null")   <>   -1   OrElse   Value.IndexOfAny(New   Char()   {"'"c,   "#"c})   <>   -1   Then  
                          tmp   =   Value  
                  Else  
                          tmp   =   LzmTW.Common.SqlValueStringClass.Convert(Value,   FieldDataType,   True)  
                  End   If  
                  Return   tmp  
          End   Function  
  End   Class   '对查询字段据其数据类型进行处理Top

11 楼perukelzhx(一块臭豆腐)回复于 2005-05-28 17:22:06 得分 0

where后面的条件有多个   ,实际情况是它们的任意组合,就是这个条件表达式不好写  
  Top

12 楼lzmtw(水如烟)回复于 2005-05-28 17:22:38 得分 0

<Serializable()>   Public   Enum   QueryWay  
          全部  
          模糊  
          间隔  
          指定  
  End   Enum   '查询方式Top

13 楼lzmtw(水如烟)回复于 2005-05-28 17:23:57 得分 0

我原来的程序分得好细.现在在找Top

14 楼lzmtw(水如烟)回复于 2005-05-28 17:26:44 得分 0

这个思路是关键.明白了这个,其它的只是它的应用而矣.  
   
  #Region   "针对数据类型转换查询指定值的Sql表示形式"  
          Public   Class   SqlValueStringClass  
                  Public   Shared   Function   Convert(ByVal   Value   As   String,   ByVal   Column   As   DataColumn,   ByVal   IsCommix   As   Boolean)   As   String  
                          Return   Convert(Value,   GetDataType(Column.DataType.Name.ToLower),   IsCommix)  
                  End   Function  
                  Public   Shared   Function   GetColumnType(ByVal   Column   As   DataColumn)   As   DataType  
                          Dim   tmpType   As   DataType  
                          Select   Case   Column.DataType.Name.ToLower  
                                  Case   "string"  
                                          tmpType   =   DataType.字符  
                                  Case   "date"  
                                          tmpType   =   DataType.日期  
                                  Case   "datetime"  
                                          tmpType   =   DataType.日期  
                                  Case   "boolean"  
                                          tmpType   =   DataType.逻辑  
                                  Case   Else  
                                          tmpType   =   DataType.数字  
                          End   Select  
                          Return   tmpType  
                  End   Function  
                  Public   Shared   Function   GetDataType(ByVal   DataTypeString   As   String)   As   DataType  
                          Dim   tmpType   As   DataType  
                          Select   Case   DataTypeString.ToLower  
                                  Case   "string"  
                                          tmpType   =   DataType.字符  
                                  Case   "date"  
                                          tmpType   =   DataType.日期  
                                  Case   "datetime"  
                                          tmpType   =   DataType.日期  
                                  Case   "boolean"  
                                          tmpType   =   DataType.逻辑  
                                  Case   Else  
                                          tmpType   =   DataType.数字  
                          End   Select  
                          Return   tmpType  
                  End   Function  
                  Public   Shared   Function   Convert(ByVal   Value   As   String,   ByVal   DataTypeString   As   String)   As   String  
                          Return   Convert(Value,   GetDataType(DataTypeString))  
                  End   Function  
                  Public   Shared   Function   Convert(ByVal   Value   As   String,   ByVal   DataTypeString   As   String,   ByVal   IsCommix   As   Boolean)   As   String  
                          Return   Convert(Value,   GetDataType(DataTypeString),   IsCommix)  
                  End   Function  
                  Public   Shared   Function   Convert(ByVal   Value   As   String,   ByVal   ValueType   As   DataType,   ByVal   IsCommix   As   Boolean)   As   String  
                          If   IsCommix   Then  
                                  Dim   tmp   As   String()   =   Value.Split(New   Char()   {","c})  
                                  Dim   ts(tmp.Length   -   1)   As   String  
                                  Dim   i   As   Integer   =   0  
                                  For   Each   s   As   String   In   tmp  
                                          ts(i)   =   ConVert(s,   ValueType)  
                                          i   +=   1  
                                  Next  
                                  Return   String.Join(",",   ts)  
                          Else  
                                  Return   ConVert(Value,   ValueType)  
                          End   If  
                  End   Function  
                  Public   Shared   Function   Convert(ByVal   Value   As   String,   ByVal   ValueType   As   DataType)   As   String  
                          Dim   tmp   As   String  
                          Select   Case   ValueType  
                                  Case   DataType.字符  
                                          tmp   =   String.Format("'{0}'",   Value)  
                                  Case   DataType.数字  
                                          tmp   =   Value  
                                  Case   DataType.日期  
                                          tmp   =   String.Format("#{0}#",   Value)  
                                  Case   DataType.逻辑  
                                          tmp   =   Value  
                          End   Select  
                          Return   tmp  
                  End   Function  
                  Public   Enum   DataType  
                          字符  
                          逻辑  
                          日期  
                          数字  
                  End   Enum  
          End   Class  
  #End   Region  
  Top

15 楼lzmtw(水如烟)回复于 2005-05-28 17:27:51 得分 0

哈,其它的不说了吧.我也不知道怎么说下去好.Top

16 楼perukelzhx(一块臭豆腐)回复于 2005-05-28 17:28:34 得分 0

代码好长,正在看  
  呵呵,谢谢!Top

17 楼hello_sjn(孟剑倪)回复于 2005-05-28 17:30:22 得分 10

获得列lie=5  
  获得条件1   t1=***  
                  2   t2=***  
                  3   t3=***    
                  .......  
  sql1="select   top   列数   *   form   表   where   1=1"  
  if   t1<>""then   sql1=sql&"and   条件1='"&   t1   &"'"  
  if   t2<>""then   sql1=sql&"and   条件2='"&   t2   &"'"  
  ..................  
     
  Top

18 楼perukelzhx(一块臭豆腐)回复于 2005-05-28 17:42:07 得分 0

hello_sjn(孟剑倪)   :  
  我设想的要查询的字段是由用户任意选择的   ,是变动的   ,你的意思我没看懂。Top

19 楼perukelzhx(一块臭豆腐)回复于 2005-05-28 17:45:41 得分 0

hello_sjn(孟剑倪)   :where条件我明白Top

20 楼perukelzhx(一块臭豆腐)回复于 2005-05-28 22:21:10 得分 0

现在还不想结帖,大家快发表意见啊!Top

相关问题

  • 行转固定列数的SQL查询(类交叉表)
  • VB中SQL查询问题!!!
  • vb使用sql 查询
  • VB+ACCESS+SQL查询问题
  • 请问如何获得查询sql数据库中的一个表的列数
  • 如何用SQL语句查询一个数据表中所有列数据???
  • 关于VB和SQL查询的问题
  • 一个SQL语句如何用程序判断它的列数??只查询一个表可以自动取出列数,而象下面的语句...
  • sql语句:如何查询某列数值(int)按照数值的大小来排列?
  • 求一个单表查询的sql(结果的列要能动态改变,列数不固定......)

关键词

  • sql2000
  • vb.net
  • 查询
  • 字段
  • selectstring
  • tmptype
  • 可选
  • convertvalue
  • fielddatatype
  • queryway

得分解答快速导航

  • 帖主:perukelzhx
  • lzmtw
  • hello_sjn

相关链接

  • CSDN .NET频道
  • .NET类图书
  • C#类图书
  • .NET类源码下载

广告也精彩

反馈

请通过下述方式给我们反馈
反馈
提问
网站简介|广告服务|VIP资费标准|银行汇款帐号|网站地图|帮助|联系方式|诚聘英才|English|问题报告
北京创新乐知广告有限公司 版权所有, 京 ICP 证 070598 号
世纪乐知(北京)网络技术有限公司 提供技术支持
Copyright © 2000-2008, CSDN.NET, All Rights Reserved
GongshangLogo