比如原来的表A 有1,2,3,4列。
换为新的表B 有a,b,c,d,e列。
其中a对应1,b对应4...(就是说两个表的大体结构不变,但是列名,表名 或者数据库名都变了)如何实现不影响客户端 来跟换数据库内容。
(方法是写在webservices服务器端的)

解决方案 »

  1.   

    如果是通过webservices来做中间层的话就简单多了。
    直接更新webservices
      

  2.   

    1楼的能说清楚点吗 就是用webservices来做。
      

  3.   

    webservice对外公布的方法只要不更改,只是修改你底层的业务逻辑和数据访问,当然客户端就不会有影响了
      

  4.   

    只需要修改业务逻辑层并更新webService 即可。
      

  5.   

    因为你是通过webservice作为中间层来进行对数据库的操作的,
    所以只要修改其中对应的接口内部方法即可。
      

  6.   


            /// <summary> 执行查询返回查询结果集
            /// </summary>
            /// <param name="sSql">查询语句</param>
            /// <returns>查询结果集</returns>
            [WebMethod]
            public DataTable DBPlatFormExecuteReaderBySQL(string sSql)
    服务器这边的参数是 SQL语句,在客户端已经定义死了,现在把表换了 在不该客户段的前提下 有什么办法那?
      

  7.   

    public DataTable DBPlatFormExecuteReaderBySQL(string sSql)客户端已经调用这个接口了,那就不能改这个接口的名称以及其参数了。
    你现在只能改DBPlatFormExecuteReaderBySQL里面的具体实现过程
      

  8.   

    比如DBPlatFormExecuteReaderBySQL里原来是:
    select * from tabA
    现在可以改成:
    select * from tabB
      

  9.   

    但是 已经把SQL语句在客户端写死了,那怎没办那?
      

  10.   

    就是说 原来的表是A,select * from A;
    现在把表换成B,但是还是 select * from A;
    用什么方法才使查询的结果还是原来的值那?
      

  11.   

    设计上有问题,既然已经用了webservice做中间层了,怎么还在客户端写死。如果只是因为SQL语句的话也好办。
    public DataTable DBPlatFormExecuteReaderBySQL(string sSql) 中的sSql放着不动
    在方法体内重写写SQL语句,那样客户端调用也没事,反正不执行客户端传来的SQL.
      

  12.   

    怎么重写SQL语句那,不知道对方传过来的SQL语句。没办法重写啊
      

  13.   

    你的客户端代码修改下:select * from 视图
      

  14.   


    如果客户端传过来的是 select * from tableA传过来后,并不执行它,而是对它进行重写,将它变成 select * from tableB
    然后再去执行。。
      

  15.   

    从客户端直接传过来sql语句?
    一看就知道楼主根本没有采用分层开发,客户端应该是要传一个与数据库操作无关的对象给逻辑层由逻辑层与数据库打交到
      

  16.   

    做个映射吧,把所有字段和表名统统对应一下。
    然后过滤sql语句
      

  17.   

    就是用三层 好像没办法解决这个问题啊。
    比如原来表A有一列是列名是 test。
    现在列名改成testone.用原来的查询就不能查询到结果了。
      

  18.   

    例如 string strsql = "select DepId from Usersgorup where UserId=@UserId";
                cmd = new SqlCommand(strsql, conn);
                cmd.Parameters.Add("@UserId", SqlDbType.Int).Value = users.UserId;users.UserId 是数据层传过来的参数。
    但是原来的表 的DepId 名字改变了 就没办法查到了结果了。
    怎没才能实现 列名改了还能查到一样的结果那
      

  19.   

    我用视图的方法是create view 视图名(视图列名1,视图列名2,)
    as
    select 列名 from 数据库表这样就能实现数据库列名在换 也能查询出来同样的结果了。叫我们实现这个功能,主要是因为我们现在用的数据 不是很稳定,可能这段时间用自己摘录的数据,而以后可能别的公司把更详细的数据库开放给我们 就要换数据库了。 不能保证两个数据库什么都一样 可能有细微的差别 所以要实现这个功能