我真的不喜歡將我的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