1

私は C# にまったく慣れていませんが、今ではこの関数に完全に行き詰まっています。どんな助けでも大歓迎です。

OutOfMemoryException が mess.Add(firstname); 発生しています。これは配列障害が原因であると確信していますが、動作させることができないようです。

誰が私を正しく導くことができますか?

これまでの私のコードは次のとおりです。

 public List<string> SelectEmployee(string pkrelation)
        {
        SDKRecordset inboundSet = IQSDK.CreateRecordset("R_CONTACT", "", "FK_RELATION = " + pkrelation, "");
        inboundSet.MoveFirst();
        string person = inboundSet.Fields["FK_PERSON"].Value.ToString();
        messages.Add(person);

        inboundSet.MoveNext();
        SDKRecordset inboundSet2 = IQSDK.CreateRecordset("R_PERSON", "", "PK_R_PERSON = " + person, "");


        if (inboundSet2 != null && inboundSet2.RecordCount > 0)
        {
            inboundSet2.MoveFirst();              

            do
            {
                string firstname = inboundSet2.Fields["FIRSTNAME"].Value.ToString();
                mess.Add(firstname);

                inboundSet.MoveNext();
            }
            while (!inboundSet2.EOF);
            return mess;


        }

        messages.Add("Error, didn't work.");
        return messages;// null;
4

1 に答える 1

8

タイプミスがあります。実際に反復することがないため、誤ってinboundSet.MoveNext()自然にinboundSet2.EOF設定されていません。falseこれにより、無限ループが発生し、最終的にOutOfMemoryException.

do
{
    string firstname = inboundSet2.Fields["FIRSTNAME"].Value.ToString();
    mess.Add(firstname);

    inboundSet.MoveNext(); // This needs to be inboundSet2!
}
while(!inboundSet2.EOF) //EOF never becomes true causing an infinite loop
于 2013-06-25T13:06:03.217 に答える