用C#访问oracle数据库。我用的是vs2005自带的数据源导航功能。直接托拽上面的表,用来显示和修改,非常方便。但是,有时候,我想根据一些用户动态输入的值来进行表的搜索(dataSet中表的搜索创建),比如根据用户的一个textBox的值搜索表的内容(在C#中的字串形如:"select * from table1 where id = '"+textBox.Text +"'"),这是我用字串的方式用adapter可以实现搜索,但是,这样显示和更改保存等等的代码都要自己写,不利于开发速度。而这时候我又不知道怎么用导航功能实现(因为导航上给的配置只是些“select * from table1 where id = '1'”这种固定形式的,和我的要求有出入)。不知道导航到底能不能实现这样的功能?如果能,请说明(尽量详细,我是初学者),如果不能,这个时候应该应用什么样的功能或者什么样的形式的代码编程呢?我感觉不应该是满页都是commandString = "select ..."这种形式吧?这种形式非常不方便,不利于管理,代码更新和更改和编写速度都非常慢。望不吝赐教,谢谢!

解决方案 »

  1.   

    可以的,你在设置sqldatasource的时候在configure the select statement 中选择第一个选项:specify a custom sql statement or stored procedure 就可以了,不过,一般的网站开发不会去用,这不是你感觉什么方不方便,你说将数据操作的代码写在类文件中不方便维护和更新代码,那你想想,要是一个站点有100个页,每个页都有2到3个datasource,如果要重构的话,你要重新写多少呢?而且你一个控件一个控件的去改,你怎么保证你的业务逻辑啊?
      

  2.   

    首先呢,对于写代码和直接托拽,我感觉没什么不同代码实现都是一样的只是前者是控件,后者是代码而已。
    另外,关于重构的问题,既然两者没有什么区别,代码可以实现的重构你在更改dataSet一样可以实现(dataSet就是一个类啊,只是功能稍稍多了点,并且不用你自己写"select ..." or "update ..." or "delete ... "等等代码而已),你说的100页重构(我用的是WinForm)我暂时没有遇到,不过,既然用类可以做的,更改dataSet类(一个自动生成,一个自己生成)也可以实现啊,为什么dataSet就要更改两三百次呢?你是不是认为我要把每个页面(界面)都放上全新的dataSet?好像么啥必要吧。我再体会下,不过procedure那个我再试试,我用的function多些。C#的配置中要选择什么select,update,insert,delete的procedure还没搞清啥意思再看看其他人咋说~