「データベース」の編集履歴(バックアップ)一覧はこちら

データベース」(2008/07/06 (日) 01:40:46) の最新版変更点

追加された行は緑色になります。

削除された行は赤色になります。

■DataTableManager DataTableManagerではTransactionScopeが使えない? Visual Studio 2008 で TableAdapterManager を TransactionScope 内で使用すると予期せぬ動作が生じる可能性がある [[http://support.microsoft.com/kb/951153/ja>http://support.microsoft.com/kb/951153/ja]] は!? どうやら、DataTableManager側でTransaction管理を行っているのが原因ぽいようです(間違ってたらスマン 今の案件で型付DataSetをDataTableManager使ってUpdateAllするメソッドがあるのだが、 Trasaction管理が下記のようになってる。 Logic →Transaction1  DataAccess → Transaction2 なので、これが使えない orz はて、どうしたものか…。 階層更新を自前でコーディング… そんなに工数ないし… ■OracleでTransactionScopeを使用する場合の注意点 Oracle(10gR2)でTransactionScopeを利用する際に、以下のエラーがでる場合があります。 "oramts.dllが見つかりません。" このエラーが出た場合、以下の点を疑ってみてください。 マシンに、Oracle Services For Microsoft Transaction Service (OraMTS)がインストールされているかどうか? OraMTSは、Oracle Clientをカスタムモードでインストールしないとインストールされません。 インストールすると、ORACLE_HOME/Binの下に以下のファイルが見つかります。 * oramts.dll * oramts10.dll
■DataTableManager DataTableManagerではTransactionScopeが使えない? Visual Studio 2008 で TableAdapterManager を TransactionScope 内で使用すると予期せぬ動作が生じる可能性がある [[http://support.microsoft.com/kb/951153/ja>http://support.microsoft.com/kb/951153/ja]] は!? どうやら、DataTableManager側でTransaction管理を行っているのが原因ぽいようです(間違ってたらスマン 今の案件で型付DataSetをDataTableManager使ってUpdateAllするメソッドがあるのだが、 Trasaction管理が下記のようになってる。 Logic →Transaction1  DataAccess → Transaction2 なので、これが使えない orz はて、どうしたものか…。 階層更新を自前でコーディング… そんなに工数ないし… DataTableMnagerからTableAdapterを取得→各TableAdapterのUpdateを実行させる …なんとも、あこぎなやり口ですが、以下の方法をとることに /// <summary> /// <para>TableAdapterクラスのDbDataAdapterを取得</para> /// </summary> /// <param name="adapter">対象DataTableManager</param> /// <returns>List<DbDataAdapte></returns> private List<DbDataAdapter> GetAdapters(object adapter) { List<PropertyInfo> pInfo = new List<PropertyInfo>() { }; List<DbDataAdapter> dbAdapter = new List<DbDataAdapter>() { }; Type type = adapter.GetType(); pInfo.AddRange(type.GetProperties()); pInfo.ForEach ( p => { object curObject = p.GetValue(adapter, null); if (curObject == null) return; DbDataAdapter curAdapter = GetAdapter(curObject); if (curAdapter == null) return; dbAdapter.Add(curAdapter); } ); return dbAdapter; } /// <summary> /// <para>TableAdapterクラスのDbDataAdapterを取得</para> /// </summary> /// <param name="adapter">対象TableAdapter</param> /// <returns>DbDataAdapter</returns> private DbDataAdapter GetAdapter(object adapter) { Type type = adapter.GetType(); PropertyInfo adapterInfo = type.GetProperty("Adapter", BindingFlags.NonPublic | BindingFlags.Instance); if (adapterInfo == null) return null; DbDataAdapter dbAdapter = adapterInfo.GetValue(adapter, null) as DbDataAdapter; if (dbAdapter == null) return null; return dbAdapter; } だれか、もっといいやりかたおせぇて orz ■OracleでTransactionScopeを使用する場合の注意点 Oracle(10gR2)でTransactionScopeを利用する際に、以下のエラーがでる場合があります。 "oramts.dllが見つかりません。" このエラーが出た場合、以下の点を疑ってみてください。 マシンに、Oracle Services For Microsoft Transaction Service (OraMTS)がインストールされているかどうか? OraMTSは、Oracle Clientをカスタムモードでインストールしないとインストールされません。 インストールすると、ORACLE_HOME/Binの下に以下のファイルが見つかります。 * oramts.dll * oramts10.dll

表示オプション

横に並べて表示:
変化行の前後のみ表示:
目安箱バナー