SQL Server Layer for both Delphi and C#



我真的不喜欢把我的SQL服务器打开到互联网上的概念——即使我可以锁定防火墙。然而,我一直直接使用数据库。我现在正在构建一个系统,其中包括1个SQL Server数据库、一个ASP.NET/C#中的web应用程序和一些DelphiXE2中的windows应用程序。但从一开始,我就想在数据库周围放一些"过滤器",这样我就不必打开它了。

我知道这里面有很多东西,但我对它们一无所知,也不知道我的场景会得到什么。我希望将其保留为SQL Server本机;我不打算使用任何其他类型的数据库引擎。

它需要通过标准SQL连接以外的其他方式(如过滤器)从客户端连接到服务器。它创建自己的加密数据包,并以自己的方式传输数据。我将有一个Delphi和C#的包装类,这两个类将非常相同,并且能够将其数据流式传输到DLL中与DB交互。

现在我可以用三种不同的方法来解决这个问题。。。

  • 完整的SQL Server包装器,很可能没有源代码,甚至可能有自己的语言(我不想使用另一种数据库语言),并作为自己的独立系统独立于我的项目
  • 开源包装器,最好是Delphi(XE2),如果不是C#,则是我的系统的特定协议,完全专用于我的项目,并且是DLL的最终形式,可以在网站(C#)和应用程序(Delphi)上使用
  • 网络服务-然而,我只有一个托管点(支付1个网站,第二个网站将对我收取双倍费用)。我无法托管任何额外的web服务或windows服务;它必须与网站集成。否则,我会为此做一个网络服务

我更喜欢第二种选择,不想接近第一种,也根本做不到第三种。

那么,有什么好的数据库层库吗?德尔福XE2中可能已经安装了一些吗?我想也许是加密的XML数据包?

举个例子,假设我有一张"客户"表。在我的网站和应用程序中,我不应该有任何像select * from Customers这样的SQL脚本,或者通常没有SQL脚本。相反,我将在数据库周围使用一个包装器。因此,我可以调用DBGetCustomers(Conditions: TGetCustomersConditions): TDBCustomers;这样的函数,其中TGetCustomersConditions是过滤查询的某种方式,TDBCustomers表示查询的结果。

还可以有一个函数DBAddCustomer(Item: TCustomerToAdd): TInsertSuccess;,其中TCustomerToAdd表示要插入的内容,TInsertSuccess表示任何结果,例如受影响的错误消息或行。我不打算让它像这样运行,而只是解释任何包装器的概念。当应用程序向服务器发送请求时,它仍然没有将任何内容转换为SQL查询。当请求到达服务器(能够连接到数据库)时,服务器会单独解码SQL查询的所有内容。

即使只有一个"托管点",问题是什么?web服务只是一个"站点"。即使只有一个IP地址,web服务器也可以轻松地托管多个站点。不管怎样,您要寻找的是多层设计中的"应用程序服务器"。

虽然Java在这个方向上投入了大量资金,但MS没有。Delphi有一个Datasnap,它是一个普通的框架,不知道新的"restful"接口是否可以很容易地从C#调用,尽管它看起来有安全缺陷。.NET的方法是使用WCF,只要它使用一个标准协议,你就可以从Delphi调用它。

您还可以查看RemObjects数据摘要。它不是开源的,但它是一个成熟的库。

实现这一点的"传统"方法之一是通过Web服务(尽管现在有些人认为这种技术有点过时)。

一个缺点是,它不是一个可以在数据库中随意使用的通用包装器,但它的优点是,例如,可以将对数据库的访问轻松地限制在特定的存储过程中,这将最大限度地提高安全性,如果您希望对外部应用程序提供有限的授权访问,这是一种标准技术。

如果您已经使用ASP.NET C#web应用程序,您还可以将基于WCF(Windows Communication Foundation)的web服务添加到您的网站。这可以提供对外部应用程序的数据库访问,这些应用程序需要以某种方式连接web服务。通过将web服务映射到特定的上下文路径(如www.example.com/services/servicename ),甚至可以将相同的HTTP标准端口用于普通网站页面和服务

Kbmw允许您创建一个ntier数据库体系结构。

但是,由于您有一个web应用程序,一个更好的选择是WCF(如前所述)

最新更新