SQLServer 2005 ExpressだとTransactionScopeが使えない?
TransactionScopeの調査をしようと思って家にあるExpress環境(C# Express & SQLServer 2005 Express)でいじってるんですが,うまくいきません
サンプルDBとしてNorthwindを使用していて,CusomersテーブルのCustomerIDが"ALFKI"のレコードをSelect For Update(WITH(UPDLOCK)してからUPDATE)しているつもり.
class Program { static void Main(string[] args) { MyDataSetTableAdapters.CustomersTableAdapter ta = new MyDataSetTableAdapters.CustomersTableAdapter(); using (TransactionScope scope = new TransactionScope(TransactionScopeOption.RequiresNew)) { MyDataSet.CustomersDataTable customerTable = ta.GetDataByCustomerIDWithUpdLock("ALFKI"); ta.UpdateQueryOfFax("000-0000000", "ALFKI"); scope.Complete(); } } }
(コードの説明)
C# Express上でDataSetを新規作成,MyDataSetという名前にすると,MyDataSetTableAdapterというTableAdapterクラスが自動生成されます.そこでSelect用のクエリ(GetDataByCustomerIDWithUpdLock)とUpdate用のクエリ(UpdateQueryOfFax)を定義しています.で,SelectとUpdateを1つのトランザクションにまとめたいので,using TransactionScopeしています.
(実行結果)
これを実行すると,ta.UpdateQueryOfFaxのところで,
ハンドルされていない例外: System.Data.SqlClient.SqlException: サーバー '*****' の MSDTC は使用できません。
といった例外が発生します(*****は実際の名前が入る).
メッセージをそのまま読むと,SQLServer 2005 Expressだと使えないってことだと思うのですが,SQLServer 2005ならうまくいくのか,環境がないので確認できません.
とはいえもしそうだとすると,やっぱりExpressつかえねー,って結論になっちゃうのでそれはつまらないなー?
週明けに会社で確認します.