SQL Azure的資料庫應用程式開發和SQL Server有95%以上可相容,剩下的5%只要修改一下SQL,將不支援的指令移除後,一樣能連接SQL Azure。
連接SQL Azure的方式與SQL Server差不多,要連接SQL Azure資料庫,只要改寫好連線字串即可。在建立SQL Azure伺服器的時候,就會決定好伺服器的名稱,通常會是 [server_name].database.windows.net([server_name]是由SQL Azure決定的伺服器配置識別字串),而SQL Azure也只支援SQL驗證模式,因此只要注意在連線字串中要多加一個Encrypt=true即可。在SQL Azure管理介面中,也提供了可以讓開發人員檢視的連線字串設定。
唯一和一般連線伺服器不同的是使用者名稱的設定,在以往的SQL Server連線中,使用者名稱是直接給定即可,但SQL Azure Server的使用者名稱是username@servername,例如要用使用者名稱login_sqlazure連到t1234567的SQL Azure Server時,使用者名稱要設定為login_sqlazure@t1234567,密碼則是該帳戶的密碼(在連線字串提示中的myPassword要代換為該帳戶的密碼)。下列字串即是連接SQL Azure Server的範例字串(data source, user id和password都是虛構的,您要依自己的環境修改):
data source=t1234567.database.windows.net;user id=login_sqlazure@t1234567;password=P112@ddqABC;Encrypt=True;Trusted_Connection=False
由於現階段SQL Azure資料庫的定序(Collation)固定都設定為SQL_LATIN1_GENERAL_CP1_CI_AS,即美國的語系,因此當利用SQL指令輸入中文資料時會被寫入成亂碼,若要解決這個問題,可以在資料值前面加入N巨集,讓SQL Server以Unicode方式寫入資料庫。或是修改表格的COLLATE編碼設定為中文編碼。但如果是用參數化查詢(Parameterized Statement),就可以不用做這件事,因為SQL Server Client Library就會自動將它做完。順道一提,如果要讓N巨集發揮作用,資料表欄位的資料型別必須要支援Unicode,亦即要使用”n”開頭的字串型別,例如nchar、nvarchar、ntext等。
INSERT INTO myTable VALUES (N'中文字')
應用程式存取SQL Azure的部署模式有三種,第一種是由外部直接存取到SQL Azure資料庫,適用於Windows Forms或WPF等應用程式,優點是直接且容易修改,但缺點就是安全問題,以及如果剛好用戶端不在防火牆開放之列就無法存取,若將防火牆完全開放(0.0.0.0-255.255.255.255)又不符合安全的標準規範。第二種是透過外部的中間層(middle tier)存取SQL Azure,例如透過WCF或HTTP Service來連接SQL Azure,適用於Web或是小型用戶端(如Windows Phone Client),優點是SQL Azure的資料消費者只有WCF, Web或HTTP Service,但是缺點是無法提供太多查詢空間,要視中間層的設計決定。第三種則是將應用程式或中間層移到雲端機房內,適用於Web或中間層的應用程式,優點是防火牆只要打開給雲端應用程式使用即可,較前兩種安全,但缺點則是應用程式必須改寫成Web應用程式,對既有的Windows Forms或WPF應用程式來說負擔較大,而且也會有中間層的缺點出現。
應用程式可以利用ADO.NET以及ODBC來連接與存取SQL Azure資料庫,意味著傳統的System.Data.SqlClient命名空間以及System.Data.Odbc命名空間都可以繼續使用,當然Entity Framework也在支援之列,只要掌握好連線字串的設定方式,就可以很快的將應用程式的連接移轉到SQL Azure上。
最後,筆者要說明幾個應用程式存取時的注意事項:
Reference:
http://msdn.microsoft.com/zh-tw/library/ee621787.aspx
http://msdn.microsoft.com/zh-tw/library/ee730903.aspx