我真的不喜欢将我的SQL服务器打开到互联网的概念 - 即使我可以锁定防火墙。不过,我一直在直接使用数据库。我现在正在构建一个系统,其中涉及1个SQL Server数据库,ASP.NET/C#中的Web应用程序以及Delphi XE2中的几个Windows应用程序。但是从一开始,我想在数据库中添加一些“过滤器”,所以我不必打开它。用于Delphi和C的SQL Server层#
我知道这里有很多东西,但不知道他们的任何事情或者我的场景。我想保留它原生的SQL Server;我不打算使用任何其他类型的数据库引擎。
它需要通过除标准SQL连接之外的其他方式(如过滤器)从客户端连接到服务器。它创建自己的加密数据包并以自己的方式传输数据。我将为Delphi和C#提供一个包装类,它们几乎完全相同 - 并且能够将数据流式传输到DLL中与数据库进行交互。
现在有三种不同的方式,我可以去这个...
- 完整的SQL服务器的包装,最有可能没有源代码,甚至可能有它自己的语言(我不想去接另一种数据库语言),并独立于我的项目作为其自己的独立系统。
- 开源包装,最好在Delphi(XE2)中,或者如果不是C#,我的系统的特定协议,完全专用于我的项目,以及可以在网站上使用的最终形式的DLL在C#中)和应用程序(在Delphi中)。
- 网络服务 - 但我只有1个托管点(支付1个网站,第二个网站将是我的双重收费)。我无法托管任何其他Web服务或Windows服务;它必须与网站整合。否则,我会为此做一个Web服务。
我更喜欢第二种选择,不想接近第一个选择,也不能完成第三个选择。
因此,任何好的数据库图书馆的库?并且可能会有一些已经安装在Delphi XE2中?我想可能是一个加密的XML数据包?
作为一个例子,假设我有一个'客户'表。在我的网站和应用程序中,我不应该有任何SQL脚本,比如select * from Customers
或者一般没有SQL脚本。相反,我将在数据库中包装一个包装。所以我可以调用一个函数,如DBGetCustomers(Conditions: TGetCustomersConditions): TDBCustomers;
,其中TGetCustomersConditions
是对查询进行过滤的一些方式,TDBCustomers
代表查询的结果。
也可能有一个函数DBAddCustomer(Item: TCustomerToAdd): TInsertSuccess;
其中TCustomerToAdd
表示要插入的内容,而TInsertSuccess
表示任何结果,例如错误消息或受影响的行。我并不打算像这样正在正好,但只是为了解释任何包装的概念。当应用程序向服务器发送请求时,它仍然没有将任何内容转换为SQL查询。在请求到达服务器(可以连接到数据库)的时候,服务器单独解码所有的SQL查询。
我很想从这些downvoters知道这个问题怎么是“没有用” - 我很怀疑我”是世界上唯一想要在其数据库中放置一层以确保安全的人。 – 2012-02-02 14:17:10
不幸的是,你只需要习惯它(+1)。我曾经从一些明显从未理解相关概念的人那里得到了一些可笑的投票。不知道允许匿名投票的要点是什么 - 我认为一个理由应该是强制性的! – Peter 2012-02-02 21:14:24
我坚持同样的事情 - 如果有人想downvote,它应该至少需要20个字符描述为什么。 – 2012-02-03 00:55:55