3

我的任務是使用現有的WinForms應用程序並將其修改爲在「偶爾連接」模式下工作。這是通過用戶筆記本電腦上的SQL Server CE 3.5實現的,並通過SQL Server合併複製或利用Microsoft的Sync Framework同步服務器和客戶端。SQL Server CE 3.5 SP1存儲過程

當前,應用程序連接到我們的SQL Server並使用存儲過程檢索,插入,更新數據。我讀過SQL Server CE不支持存儲過程。

這是否意味着我的所有存儲過程都需要轉換爲直接的SQL語句,無論是在我的代碼中,還是作爲tableadapter中的查詢?

如果這是真的,我的替代品是什麼?

回答

3

由於SQL Server CE被認爲是「應用程序數據存儲」,因此假定您可能通常在SQL Server存儲過程中實現的任何複雜邏輯都將在應用程序本身中實現。許多傳統數據庫概念在SQL CE中不受支持,例如約束,覆蓋索引,存儲過程,UDF等等...您將其命名爲SQLCE 並不是擁有它!

因爲SQL CE是單用戶的,所以這個假設或多或少是有意義的;當您完全控制數據庫級別發生的所有事情時,您並不需要擔心併發或原子性問題。它不會真正將SQL CE視爲一個成熟的數據庫;它更像是SQLite或MS Access之類的替代品。

你唯一的選擇是:

  • 重寫應用程序的行爲方式不同的「斷開連接」模式下運行時(即使用簡單的查詢,或直接訪問表);

  • 不允許應用程序執行更復雜的操作,除非它是「連接」的;

  • 轉而使用SQL Express,它具有更大的佔用空間,但不支持存儲過程和大多數其他SQL Server優點。

+0

另一個驅動器downvoter。小心解釋這個答案有什麼不正確或誤導,所以我可以決定是否值得編輯/刪除?如果您不留下任何反饋意見,Downvotes確實無助於提高答案的質量。 – Aaronaught 2010-02-19 02:39:29

0

是的,它們不受支持,最好的方法是將它們構建到代碼中的參數化查詢中。您可以構建自己的框架,通過枚舉來訪問它們,比如存儲過程,然後將它們保存在一個乾淨的代碼中。

雖然如果您計劃擴展sql compact的話(多個表的外部連接有數千行),您將需要使用SqlCeResult集和Seek方法。它非常快速,你甚至可以直接打開索引並尋找它們。 http://msdn.microsoft.com/en-us/library/system.data.sqlserverce.sqlceresultset(VS.80).aspx

0

另一種選擇是使用Linq到Datasets。它可以像存儲方法一樣「存儲」存儲過程。它沒有存儲在數據庫中,但它給了你這種幻想(儘管所有這些方法都需要附加到表格上,並且仍然需要相當簡單)。

0

另一種替代方案是VistaDB。它確實支持T-SQL Procs和所有與SQL Server相同的數據類型(實際上超過SQL CE)。

你可能想看看這個SO post on advantages of VistaDB瞭解更多信息。

0

我的想法是,您可以在數據庫中製作單獨的課程,並可以從數據訪問層進行評估。 您可以簡單地管理DAL中的參數集合,然後將它們作爲對象傳遞給Stored Procedure類方法,該方法的行爲與SQL存儲過程類似,並使用所需變量在連接後生成查詢。

生成腳本後,它將返回查詢,然後可以傳遞給SQL CE來提取結果。