1

ISeries ストアド プロシージャ (RPGLE プログラムをラップする) を呼び出そうとする C# アプリケーションがあります。この RPGLE プログラムは、結果セットを C# アプリケーションに返します。ストアド プロシージャを呼び出そうとすると、エラーが発生し、無期限にハングします。デバッグ モードでは、投稿の最後に示されている SQL エラー メッセージが表示されます。OleDBConnection を使用すると正常に動作しますが、DB2 Connect では動作しません。

ページでトレースをセットアップしようとしましたが、ページがハングアップし、スタック トレースを表示できないため、役に立ちませんでした。

ISeries 側では、プログラムが正しく実行されていることがわかります (テストのために、プログラムの最後にあるテスト ファイルにレコードを書き込んでいます)。

他の誰かが以前にこのエラーに直面したことがありますか? これについて何か助けていただければ幸いです。

ありがとう。

コード:-

DB2Connection conn1 = new DB2Connection(ConfigurationManager.ConnectionStrings  ["db2IBM"].ConnectionString);
        conn1.Open();

        string callString5 = "PGMLIBLE.GETCONSIGNMENTS";

        DB2Command cmd1 = new DB2Command(callString5, conn1);
        cmd1.CommandType = CommandType.StoredProcedure;
        cmd1.CommandTimeout = 5;

        DB2Parameter prmCons = cmd1.Parameters.Add("prmCons", DB2Type.Char, 7);
        prmCons.Direction = ParameterDirection.Input;
        prmCons.Value = "JUT0016";

        DB2Parameter prmCmp = cmd1.Parameters.Add("prmCmp", DB2Type.Char, 3);
        prmCmp.Direction = ParameterDirection.Input;
        prmCmp.Value = "DTA";

        DB2Parameter prmIorE = cmd1.Parameters.Add("prmIorE", DB2Type.Char, 1);
        prmIorE.Direction = ParameterDirection.Input;
        prmIorE.Value = "Y";

        DB2DataAdapter adp = new DB2DataAdapter(cmd1);
        DataTable dt = new DataTable();

        adp.Fill(dt);
     // If I just execute cmd1.executeNonquery it doesn't error.
     //  cmd1.ExecuteNonQuery(); 
        GridView2.DataSource = dt;
        GridView2.DataBind();

        conn1.Close();
        conn1.Dispose();
        cmd1.Dispose();

エラーメッセージ:-

ERROR [58005] [IBM][DB2.NET] SQL0902 An unexpected exception has occurred in  Process: 5652 Thread 10 AppDomain: Name:aa196883-1-129406018469512609
There are no context policies.

Function: SQLExecDirectADONET (Params)
 CallStack:    at System.Environment.GetStackTrace(Exception e, Boolean needFileInfo)
   at System.Environment.get_StackTrace()
   at IBM.Data.DB2.DB2ConnPool.HandleUnknownErrors(String strFncMsg, Exception exception, Boolean bThrow)
   at IBM.Data.DB2.DB2Command.ExecuteReaderObject(CommandBehavior behavior, String method, DB2CursorType reqCursorType, Boolean abortOnOptValueChg, Boolean skipDeleted, Boolean isResultSet, Int32 maxRows, Boolean skipInitialValidation)
   at IBM.Data.DB2.DB2Command.ExecuteReaderObject(CommandBehavior behavior, String method)
   at IBM.Data.DB2.DB2Command.ExecuteReader(CommandBehavior behavior)
   at IBM.Data.DB2.DB2Command.ExecuteDbDataReader(CommandBehavior behavior)
   at System.Data.Common.DbCommand.System.Data.IDbCommand.ExecuteReader(CommandBehavior behavior)
   at System.Data.Common.DbDataAdapter.FillInternal(DataSet dataset, DataTable[] datatables, Int32 startRecord, Int32 maxRecords, String srcTable, IDbCommand command, CommandBehavior behavior)
   at System.Data.Common.DbDataAdapter.Fill(DataTable[] dataTables, Int32 startRecord, Int32 maxRecords, IDbCommand command, CommandBehavior behavior)
   at System.Data.Common.DbDataAdapter.Fill(DataTable dataTable)
   at ShowConsignmentsOpen.Page_Load(Object sender, EventArgs e) in c:\Inetpub\TestStoredProc\ShowConsignmentsOpen.aspx.cs:line 50
   at System.Web.Util.CalliHelper.EventArgFunctionCaller(IntPtr fp, Object o, Object t, EventArgs e)
   at System.Web.Util.CalliEventHandlerDelegateProxy.Callback(Object sender, EventArgs e)
   at System.Web.UI.Control.OnLoad(EventArgs e)
   at System.Web.UI.Control.LoadRecursive()
   at System.Web.UI.Page.ProcessRequestMain(Boolean includeStagesBeforeAsyncPoint, Boolean includeStagesAfterAsyncPoint)
   at System.Web.UI.Page.ProcessRequest(Boolean includeStagesBeforeAsyncPoint, Boolean includeStagesAfterAsyncPoint)
   at System.Web.UI.Page.ProcessRequest()
   at System.Web.UI.Page.ProcessRequestWithNoAssert(HttpContext context)
   at System.Web.UI.Page.ProcessRequest(HttpContext context)
   at ASP.showconsignmentsopen_aspx.ProcessRequest(HttpContext context) in c:\WINDOWS\Microsoft.NET\Framework\v2.0.50727\Temporary ASP.NET Files\teststoredproc\f35f719b\99c08192\App_Web_yti93vc5.2.cs:line 0
   at System.Web.HttpApplication.CallHandlerExecutionStep.System.Web.HttpApplication.IExecutionStep.Execute()
   at System.Web.HttpApplication.ExecuteStep(IExecutionStep step, Boolean& completedSynchronously)
   at System.Web.HttpApplication.ApplicationStepManager.ResumeSteps(Exception error)
   at System.Web.HttpApplication.System.Web.IHttpAsyncHandler.BeginProcessRequest(HttpContext context, AsyncCallback cb, Object extraData)
   at System.Web.HttpRuntime.ProcessRequestInternal(HttpWorkerRequest wr)
   at System.Web.HttpRuntime.ProcessRequestNoDemand(HttpWorkerRequest wr)
   at System.Web.HttpRuntime.ProcessRequest(HttpWorkerRequest wr)
   at Microsoft.VisualStudio.WebHost.Request.Process()
   at Microsoft.VisualStudio.WebHost.Host.ProcessRequest(Connection conn) InnerException Message: Attempted to read or write protected memory. This is often an indication that other memory is corrupt. Check InnerException property for more detail.  SQLSTATE=58005
4

2 に答える 2

1

私は常に次のことを行ってきました。

    DB2Connection conn1 = new DB2Connection(ConfigurationManager.ConnectionStrings ["db2IBM"].ConnectionString);
    conn1.Open();

    string callString5 = "PGMLIBLE.GETCONSIGNMENTS";

    DB2Command cmd1 = new DB2Command(callString5, conn1);
    cmd1.CommandType = CommandType.StoredProcedure;
    cmd1.CommandTimeout = 5;

    cmd1.Parameters.Add("prmCons", DB2Type.Char, 7).Value = "JUT0016";
    prmCons.Direction = ParameterDirection.Input;

    cmd1.Parameters.Add("prmCmp", DB2Type.Char, 3).Value = "DTA";
    prmCmp.Direction = ParameterDirection.Input;

    cmd1.Parameters.Add("prmIorE", DB2Type.Char, 1).Value = "Y";
    prmIorE.Direction = ParameterDirection.Input;

    DB2DataAdapter adp = new DB2DataAdapter(cmd1);
    DataTable dt = new DataTable();

    adp.Fill(dt);
 // If I just execute cmd1.executeNonquery it doesn't error.
 //  cmd1.ExecuteNonQuery(); 
    GridView2.DataSource = dt;
    GridView2.DataBind();

    conn1.Close();
    conn1.Dispose();
    cmd1.Dispose();

ディレクションのやり方は覚えていませんが、これは基本的に過去にこれを実装した方法です。

于 2011-01-27T14:43:32.173 に答える
1

ずいぶん前に質問されましたが、お答えします。

このエラー メッセージを見てください。

ERROR [58005] [IBM][DB2.NET] SQL0902 プロセスで予期しない例外が発生しました: 5652 スレッド 10 AppDomain: 名前:aa196883-1-129406018469512609
コンテキスト ポリシーはありません。

「コンテキストポリシーはありません」というテキストを検索した後。、 私はこれを見つけました:

MSDN AppDomain.ToString メソッド

そこには、次のように表示されます。

戻り値
の 型: System.String
リテラル文字列 "Name:"、アプリケーション ドメインのフレンドリ名、およびコンテキスト ポリシーの文字列表現または文字列 "There are no context policies." を連結して形成される文字列。

それで、これはどういう意味ですか?

ほとんどの場合、次のことが原因です。

ConfigurationManager.ConnectionStrings  ["db2IBM"].ConnectionString

それはまさにあなたがそれを書いた方法です。

このエラーは、次のいずれかが原因である可能性があります。

  1. それらのスペースがエラーの原因となっている、または
  2. db2IBMWeb.config ファイルの接続文字列セクションに存在しません。

接続文字列セクションの設定については、次を参照してください。

ASP.NET で SQL SERVER への接続文字列を設定する

于 2015-02-13T16:15:16.810 に答える