- PR -

[VS2005]ASP.NET + Oracle更新・ロックで例外発生

1
投稿者投稿内容
うちうせん
ベテラン
会議室デビュー日: 2003/08/08
投稿数: 96
お住まい・勤務地: 福岡県
投稿日時: 2008-03-14 11:47
現在ASP.Net+Oracle10gを使用したプログラムを作成しています。(C#)
ですが、更新系でたまに例外が発生します。原因が不明なんですが、VSのASP.Net開発サーバーを一度停止してもう一度実行すると発生しなくなります。
同じような経験のある方はアドバイスください。
簡単に修正したコードと例外を記述します。

コード:
using (TransactionScope sc = new TransactionScope())
{
	TableAdapter.LockMethod(); //ここで例外
}


※LockMethodのSQLはFOR UPDATEを付加したSELECTです。
-----------------------------------------------------------
【例外】
System.AccessViolationException はユーザー コードによってハンドルされませんでした。
Message="保護されているメモリに読み取りまたは書き込み操作を行おうとしました。他のメモリが壊れていることが考えられます。"
Source="mscorlib"
StackTrace:
Server stack trace:
場所 System.Data.Common.UnsafeNativeMethods.OraMTSJoinTxn(OciEnlistContext pCtxt, IDtcTransaction pTrans)
場所 System.Data.OracleClient.TracedNativeMethods.OraMTSJoinTxn(OciEnlistContext pCtxt, IDtcTransaction pTrans)
場所 System.Data.OracleClient.OracleInternalConnection.Enlist(String userName, String password, String serverName, Transaction transaction, Boolean manualEnlistment)
場所 System.Data.OracleClient.OracleInternalConnection.Activate(Transaction transaction)
場所 System.Data.ProviderBase.DbConnectionInternal.ActivateConnection(Transaction transaction)
場所 System.Data.ProviderBase.DbConnectionPool.GetConnection(DbConnection owningObject)
場所 System.Data.ProviderBase.DbConnectionFactory.GetConnection(DbConnection owningConnection)
場所 System.Data.ProviderBase.DbConnectionClosed.OpenConnection(DbConnection outerConnection, DbConnectionFactory connectionFactory)
場所 System.Data.OracleClient.OracleConnection.Open()
場所 System.Data.Common.DbDataAdapter.FillInternal(DataSet dataset, DataTable[] datatables, Int32 startRecord, Int32 maxRecords, String srcTable, IDbCommand command, CommandBehavior behavior)
場所 System.Data.Common.DbDataAdapter.Fill(DataTable[] dataTables, Int32 startRecord, Int32 maxRecords, IDbCommand command, CommandBehavior behavior)
場所 System.Data.Common.DbDataAdapter.Fill(DataTable dataTable)
場所 XXXXX
場所 System.Runtime.Remoting.Messaging.StackBuilderSink._PrivateProcessMessage(IntPtr md, Object[] args, Object server, Int32 methodPtr, Boolean fExecuteInContext, Object[]& outArgs)
場所 System.Runtime.Remoting.Messaging.StackBuilderSink.PrivateProcessMessage(RuntimeMethodHandle md, Object[] args, Object server, Int32 methodPtr, Boolean fExecuteInContext, Object[]& outArgs)
場所 System.Runtime.Remoting.Messaging.StackBuilderSink.SyncProcessMessage(IMessage msg, Int32 methodPtr, Boolean fExecuteInContext)
Exception rethrown at [0]:
場所 System.Runtime.Remoting.Proxies.RealProxy.HandleReturnMessage(IMessage reqMsg, IMessage retMsg)
場所 System.Runtime.Remoting.Proxies.RealProxy.PrivateInvoke(MessageData& msgData, Int32 type)
場所 XXXX
場所 XXXX
場所 XXXX
場所 System.Web.UI.WebControls.Button.OnClick(EventArgs e)
場所 System.Web.UI.WebControls.Button.RaisePostBackEvent(String eventArgument)
場所 System.Web.UI.WebControls.Button.System.Web.UI.IPostBackEventHandler.RaisePostBackEvent(String eventArgument)
場所 System.Web.UI.Page.RaisePostBackEvent(IPostBackEventHandler sourceControl, String eventArgument)
場所 System.Web.UI.Page.RaisePostBackEvent(NameValueCollection postData)
場所 System.Web.UI.Page.ProcessRequestMain(Boolean includeStagesBeforeAsyncPoint, Boolean includeStagesAfterAsyncPoint)
-----------------------------------------------------------
※場所 XXXXとなっているところはファイル名などが入っていたのでXXXXと置き換えています。

[開発環境]
WinXP
VS2005
Oracle10g

_________________
by うちうせん
indigo-x
大ベテラン
会議室デビュー日: 2008/02/21
投稿数: 207
お住まい・勤務地: 太陽の塔近く
投稿日時: 2008-03-14 12:17
よくはわからないですが
 スタックからはOracleとMSDTC間の障害に見えますね。。。。

でTransactionScopeはやめて普通にBeginTransactionと書けばとりあえず

動作すると思います。
rain
ぬし
会議室デビュー日: 2006/10/19
投稿数: 549
投稿日時: 2008-03-14 13:16
もしMSDTCが関係しているのであれば、参考になるかもしれません。
http://forums.microsoft.com/MSDN-JA/ShowPost.aspx?PostID=685485&SiteID=7
うちうせん
ベテラン
会議室デビュー日: 2003/08/08
投稿数: 96
お住まい・勤務地: 福岡県
投稿日時: 2008-03-14 14:11
返答ありがとうございました。
rainさんのURL先と同じ対処を行ったところ解決したような感じがします。
1

スキルアップ/キャリアアップ(JOB@IT)