2008年10月13日

Sql Server V.S. Sql Server Compact

繼昨天講解 ADO.NET 會自動判斷參數名稱 後
今天要來講 PC 和 PPC 的 SQL Server 的差異性比較

PC上是使用 System.Data.SqlClient
PPC 則是使用 System.Data.SqlServerCe (需安裝 .NET Compact Framework

再來是要了解一點
PPC上所支援的 API 較 PC 少  (為了縮減容量的關係吧?)
所以常常可以見到的是
同一個 Class 上  在 PPC 所支援的方法及屬性 大多會所剩無幾

MSDN 上查詢Class成員時
會看到某些 方法 或 屬性 前有個手機的 Icon   那就表示是支援 PPC 開發

以上大概是 PC 和 PPC 的一些小講解
再來是 PPC 上用的小型許多的 SqlServer -- SqlCe

如同之前所講的  PPC 許多 Class 都會受限
但是坎尼沒想到 SqlCe 上也有如此情況!?
比方講 isnull 這個在Sql常用的函式  到了SqlCe上竟然不在了 囧>
應該是說  它變成回傳 true/false ( 但MSDN上是寫不支援
坎尼只好用 case when 來做判斷

接下來是要承接 上篇 所講的SqlParameter

在 .NET Compact Framework 上寫入 SqlParamter 就不像上篇所講的那麼簡單
因為 SqlCe 會判斷目前 Sql 句子裡有幾個 Parameters
然後再將 SqlCeCommand 裡的 Parameters 的值給寫入   少傳多傳都會出現例外
講這麼多就是一句話 : 
子句的參數數目要和 SqlCeParameters 的數量相同啦!!!

因此坎尼 上篇 所介紹的這個傳入參數的方式就不適用
但是偏偏這個 PPC 的開發和上一篇所講的是同一個案子
坎尼打開 SqlCe 的資料庫  又看到了許多重覆欄位分散在不同的資料表 orz

山不轉 坎尼轉轉轉   綜合之前所提的兩種方式
坎尼將共同的 SqlParameter 寫於外層
內層的判斷則是依不同需求  傳入所需的 Parameter

可以看到  範例中只有 id 是共通  所以移到最外層
name 雖然也有兩個情況下會出現  但是..恩..很抱歉...你知道的...
(坎尼案子裡共同的parameter約有七八個 orz

傳入 Parameter的方法大概介紹到這邊
最後回應一下 Tim 上篇留言所說的
這個方式雖然可以分開管理共同及私用的 Parameters
但還是 Tim 所說的  直接再開個方法來寫  還比較好維護
這個四不像希望以後坎尼負責的案子不會再用到它
(那你幹嘛發明它  找死啊= =

這篇實在是寫得很亂   很感謝能看到這裡的人  <(_ _)>
下篇會挑個 scope 比較小的東西來寫

1 則留言:

Unknown 提到...

在 SqlCe 這種非常重視節省運算資源的環境果然就不能亂塞參數了 XD 其實本來就應該看到底 SqlCommand 需要多少參數就塞多少參數的 ... 對 DB 的操作本來就很麻煩,如果要減少手動撰寫的程式碼的量,應該要靠 CodeSmith 這類的 tool 來達成吧~~

Google Spreadsheet 裡用規則運算式

最近因為工作關係,遇到要用 Google Form 及 Google Sheet 所以研究了 Google Sheet 裡的一些 function 怎麼用 首先,分享一下如何在 Google Sheet 裡用規則運算 :D