我想做一个关于数据库存取的程序。
要求:
1。支持C/S和B/S。
2。客户端永远也不能知道数据库的结构和访问数据库。
3。客户端可以得到数据库的相关数据及操作,但是要根据身份操作有权限的部份。而这些只能在服务端实现,不能在客户端验证客户。以上的难点只是在C/S方面,因为这来就是asp的默认权限,B/S根本不用处理也行,只不过如果这样处理后,把B/S弄成C/S,可以把生成HTML的任务和读取数据的任务为开来,也是一件很好的事。请教一下高手,有什么好建议和有什么好文章或教程可以参考。

解决方案 »

  1.   

    我原来做过的C/S结构程序,楼主可以参考一下
    底层做两个类
    一个是数据库访问类
    一个是sql语句的模版类,按权限要求成几部分,并且做sql模版参数替换(正则表达式实现)和参数过滤
    客户端界面产生一个sql语句编号请求及相关参数给服务端
    服务端验证权限通过后,执行相应的sql模板语句,然后将结果返回给客户端
    这样所有的操作都是在服务端实现的,客户端只是做一个请求而已
      

  2.   

    在设计sql模板语句的时候需要根据功能需求考虑周密一些
      

  3.   

    谢谢Yamir2004兄,但返回的是什么的类型呢?字符串吗?还是用数据库直接返回一个记录集?如果是字符串,把一个字符串转变成一个记录集,这其中还涉及了各种数据类型的转换,可不简单呀。如果是返回一个记录集的话,首先客户端不能链到数据库,如果能的话,就在里面集成了用户名和密码,不安全,只能由服务器返回了。按我的理解,就方便的就是生成一个XML流把它传到客户端,客户端再把这个XML写进一个DATASET,读里面的数据,修改时先请求一个XSLT构架,填充里面的内容,再以XML上传到服务器,其间的性能如何?且还要建立一个TCP的传输和转换协义,也不太方便,还有什么更方便的方法吗?
      

  4.   

    需要使用O/R Mapping的技术,才能让C/S的客户端看不到数据。
    B/S则无所谓了,反正本来就看不到。
      

  5.   

    1. 三层结构(client, server, dataBase).client和server之间用remoting技术,来传送DataSet.
    2. 在Client和Server solution里包括共同的Library project(DataSet, Command class等,因为它们在Client和server端均要用到.)
    3. server端的功能就是接受client发送过来的Command, 然后相应的命令和执行stored procedure, 组装Dataset, 发送到client端.
      

  6.   

    用ASP.NET 和 Web Services 开发吧!!
      

  7.   

    楼主说的是2层架构存在的问题。做成3层的吧。做个中间层,将客户端操作命令和客户端权限之类的信息传递到服务器,服务器验证通过执行操作即可,楼上的方案完全可行,Remoting和COM或COM+也行啊
      

  8.   

    manonroad大哥,Remoting能用身份验证吗?我想了一下,可能是对Remoting不太熟的原因,对身份验证并没有一个好的解决方案。像访问数据库这样的东西,只能是做服务端激活的方式,如果用singlecall保持不了状态,就算用singleton我也不知怎么验证一个用户的登录和过期呢?