QA@IT
«回答へ戻る

回答を投稿

Jitta様 じゃんぬねっと様
返信ありがとうございます。

エラーを出しているのはCLR(システム)と思います。
エラー内容「保護されているメモリ・・・」にて検索等を実施しましたが、
再起動により直る、いつのまにか無くなったと明記されており、
結論対策等が明記されていないように思いました。
検索が足りなければ申し訳ありません。

今回の環境としましては、以下となります。
①IIS・ASPが動作しているPC
②クライアントPC
③クライアントPC

①にてデバック・実行等を実施してもエラーは起きませんでした。
②単独又は、②と③で同時実行等を実施するとたまに起きます。

DBのみの再起動等は行っておらず、エラーが出た後PCの再起動を
実施すると出なくなることは確認しました。
DBのみ再起動等は調査後、回答します。

念のため、本処理でのソースとエラー内容を以下に明記致します。
Public Function find(ByVal p_sSqlString As String, ByVal p_prmList As ArrayList) As DataTable
Dim da As OdbcDataAdapter = Nothing 'データアダプタ
Dim cm As OdbcCommand = Nothing 'コマンド
Dim ds As DataSet = Nothing 'データテーブル

  Try
    cm = New OdbcCommand(p_sSqlString, con__, tran__)
    If Not p_prmList Is Nothing Then
      MsgBox("パラメータ設定")
      'パラメータを設定する
      For Each val As String In p_prmList
        Dim prm As New OdbcParameter()
        prm.Direction = ParameterDirection.Input
        prm.Value = val

        cm.Parameters.Add(prm)
      Next
    End If
    da = New OdbcDataAdapter(cm)

    ds = New DataSet
    'DB検索を行う
    da.MissingSchemaAction = MissingSchemaAction.AddWithKey

    da.Fill(ds)
    For Each col As DataColumn In ds.Tables(0).Columns
      col.ReadOnly = False
    Next
  Catch ex As HIT00ComBsnExp
    Throw
  Catch ex As HIT00ComSysExp
    Throw
  Catch ex As Exception
    Dim exp As HIT00ComSysExp = New HIT00ComSysExp(ex)
    exp.setErrorInfo( _
        C_PGMID, _
        System.Reflection.MethodBase.GetCurrentMethod.Name, _
        "HIT0001E", _
    Nothing)
    Throw exp
  End Try
  '戻り値を返却する
  Return ds.Tables(0)
End Function

エラー内容
保護されているメモリに読み取りまたは書き込み操作を行おうとしました。他のメモリが壊れていることが考えられます。

[スタックトレース]
場所 System.Data.Common.UnsafeNativeMethods.SQLBindCol(OdbcStatementHandle StatementHandle, UInt16 ColumnNumber, SQL_C TargetType, IntPtr TargetValue, IntPtr BufferLength, IntPtr StrLen_or_Ind)
場所 System.Data.Odbc.OdbcDataReader.RetrieveKeyInfo(Boolean needkeyinfo, QualifiedTableName qualifiedTableName, Boolean quoted)
場所 System.Data.Odbc.OdbcDataReader.BuildMetaDataInfo()
場所 System.Data.Odbc.OdbcDataReader.GetSchemaTable()
場所 System.Data.Odbc.OdbcCommand.ExecuteReaderObject(CommandBehavior behavior, String method, Boolean needReader, Object[] methodArguments, SQL_API odbcApiMethod)
場所 System.Data.Odbc.OdbcCommand.ExecuteReaderObject(CommandBehavior behavior, String method, Boolean needReader)
場所 System.Data.Odbc.OdbcCommand.ExecuteReader(CommandBehavior behavior)
場所 System.Data.Odbc.OdbcCommand.ExecuteDbDataReader(CommandBehavior behavior)
場所 System.Data.Common.DbCommand.System.Data.IDbCommand.ExecuteReader(CommandBehavior behavior)
場所 System.Data.Common.DbDataAdapter.FillInternal(DataSet dataset, DataTable[] datatables, Int32 startRecord, Int32 maxRecords, String srcTable, IDbCommand command, CommandBehavior behavior)
場所 System.Data.Common.DbDataAdapter.Fill(DataSet dataSet, Int32 startRecord, Int32 maxRecords, String srcTable, IDbCommand command, CommandBehavior behavior)
場所 System.Data.Common.DbDataAdapter.Fill(DataSet dataSet)
場所 dbcom.common.module.HIT00ComDbiMng.find(String p_sSqlString, ArrayList p_prmList)

言葉足らずで申し訳ありませんが、よろしくお願いします。
[ メッセージ編集済み 編集者: ゆーとパパ 編集日時 2006-11-28 09:03 ]

投稿者:ゆーとパパ

Jitta様 じゃんぬねっと様
返信ありがとうございます。

エラーを出しているのはCLR(システム)と思います。
エラー内容「保護されているメモリ・・・」にて検索等を実施しましたが、
再起動により直る、いつのまにか無くなったと明記されており、
結論対策等が明記されていないように思いました。
検索が足りなければ申し訳ありません。

今回の環境としましては、以下となります。
①IIS・ASPが動作しているPC
②クライアントPC
③クライアントPC

①にてデバック・実行等を実施してもエラーは起きませんでした。
②単独又は、②と③で同時実行等を実施するとたまに起きます。

DBのみの再起動等は行っておらず、エラーが出た後PCの再起動を
実施すると出なくなることは確認しました。
DBのみ再起動等は調査後、回答します。

念のため、本処理でのソースとエラー内容を以下に明記致します。
    Public Function find(ByVal p_sSqlString As String, ByVal p_prmList As ArrayList) As DataTable
      Dim da As OdbcDataAdapter = Nothing     'データアダプタ
      Dim cm As OdbcCommand = Nothing         'コマンド
      Dim ds As DataSet = Nothing             'データテーブル

      Try
        cm = New OdbcCommand(p_sSqlString, con__, tran__)
        If Not p_prmList Is Nothing Then
          MsgBox("パラメータ設定")
          'パラメータを設定する
          For Each val As String In p_prmList
            Dim prm As New OdbcParameter()
            prm.Direction = ParameterDirection.Input
            prm.Value = val

            cm.Parameters.Add(prm)
          Next
        End If
        da = New OdbcDataAdapter(cm)

        ds = New DataSet
        'DB検索を行う
        da.MissingSchemaAction = MissingSchemaAction.AddWithKey

        da.Fill(ds)
        For Each col As DataColumn In ds.Tables(0).Columns
          col.ReadOnly = False
        Next
      Catch ex As HIT00ComBsnExp
        Throw
      Catch ex As HIT00ComSysExp
        Throw
      Catch ex As Exception
        Dim exp As HIT00ComSysExp = New HIT00ComSysExp(ex)
        exp.setErrorInfo( _
            C_PGMID, _
            System.Reflection.MethodBase.GetCurrentMethod.Name, _
            "HIT0001E", _
        Nothing)
        Throw exp
      End Try
      '戻り値を返却する
      Return ds.Tables(0)
    End Function

エラー内容
保護されているメモリに読み取りまたは書き込み操作を行おうとしました。他のメモリが壊れていることが考えられます。     
[スタックトレース]
   場所 System.Data.Common.UnsafeNativeMethods.SQLBindCol(OdbcStatementHandle StatementHandle, UInt16 ColumnNumber, SQL_C TargetType, IntPtr TargetValue, IntPtr BufferLength, IntPtr StrLen_or_Ind)
   場所 System.Data.Odbc.OdbcDataReader.RetrieveKeyInfo(Boolean needkeyinfo, QualifiedTableName qualifiedTableName, Boolean quoted)
   場所 System.Data.Odbc.OdbcDataReader.BuildMetaDataInfo()
   場所 System.Data.Odbc.OdbcDataReader.GetSchemaTable()
   場所 System.Data.Odbc.OdbcCommand.ExecuteReaderObject(CommandBehavior behavior, String method, Boolean needReader, Object[] methodArguments, SQL_API odbcApiMethod)
   場所 System.Data.Odbc.OdbcCommand.ExecuteReaderObject(CommandBehavior behavior, String method, Boolean needReader)
   場所 System.Data.Odbc.OdbcCommand.ExecuteReader(CommandBehavior behavior)
   場所 System.Data.Odbc.OdbcCommand.ExecuteDbDataReader(CommandBehavior behavior)
   場所 System.Data.Common.DbCommand.System.Data.IDbCommand.ExecuteReader(CommandBehavior behavior)
   場所 System.Data.Common.DbDataAdapter.FillInternal(DataSet dataset, DataTable[] datatables, Int32 startRecord, Int32 maxRecords, String srcTable, IDbCommand command, CommandBehavior behavior)
   場所 System.Data.Common.DbDataAdapter.Fill(DataSet dataSet, Int32 startRecord, Int32 maxRecords, String srcTable, IDbCommand command, CommandBehavior behavior)
   場所 System.Data.Common.DbDataAdapter.Fill(DataSet dataSet)
   場所 dbcom.common.module.HIT00ComDbiMng.find(String p_sSqlString, ArrayList p_prmList)

言葉足らずで申し訳ありませんが、よろしくお願いします。
<font size="-1">[ メッセージ編集済み 編集者: ゆーとパパ 編集日時 2006-11-28 09:03 ]</font>


投稿者:ゆーとパパ