在过去的几天里,我一直在尝试使用示例代码作为使用.NET 的基础来更新 unidata,但没有成功。我可以成功读取数据库并在 Visual Studio 中查看原始数据。返回的错误是超出范围的错误。该程序正在尝试更新采购订单的单价。
错误:{“套接字接收错误。索引超出了数组.POD 的范围”} [IBMU2.UODOTNET.UniFileException]:{“套接字接收错误。索引超出了数组.POD 的范围”} 数据: {System.Collections.ListDictionaryInternal} HelpLink:null HResult:-2146232832 InnerException:null 消息:“套接字接收错误。索引超出了 array.POD 的范围”来源:IBMU2.UODOTNET 的“UniFile 类”StackTrace:“。 UniFile.Write()\r\n at IBMU2.UODOTNET.UniFile.Write(String aRecordID, UniDynArray aRecordData)\r\n at ReadXlsToUnix.Form1.TestUpdate(String PO_LINE_SHIP, String price) in c:\Users\xxx\Documents \Visual Studio 2013\Projects\ReadXlsToUnix\ReadXlsToUnix\Form1.cs:line 330" TargetSite: {Void Write()}
失败的测试代码是:
private void TestUpdate(string PO_LINE_SHIP,string price)
{
UniFile pod =null;
UniSession uniSession =null;
//connection string
uniSession = UniObjects.OpenSession("unixMachine", "userid", Properties.Settings.Default.PWD, "TRAIN", "udcs");
//open file
pod = uniSession.CreateUniFile("POD");
//read data
pod.Read(PO_LINE_SHIP);
//locking strategy
pod.UniFileLockStrategy = 1;
pod.UniFileReleaseStrategy = 1;
if (pod.RecordID == ""){
pod.UnlockRecord();
}
//replace existing value with one entered by user
pod.Record.Replace(4, (string)uniSession.Iconv(price, "MD4"));
try
{
pod.Write(pod.RecordID,pod.Record); //RecordId and Record both show correctly hover/immediate window
//pod.Write() fails with same message
}
catch (Exception err)
{
MessageBox.Show("Error" + err);
}
pod.Close();
UniObjects.CloseSession(uniSession);
}
}
在 HP UX 11.31 unidata 7.2 上运行并使用 UODOTNET.dll 2.2.3.7377 非常感谢任何帮助。这是写入记录版本,并且还尝试了具有相同错误的 writefield 功能。
Rajan - 感谢您的更新和链接。我曾尝试使用 U2 Toolkit 读取/更新我的 unidata 表,但未成功。但是,我可以读取/更新在同一帐户中创建的文件。这是否意味着在 VOC(例如 DICT)某处缺少条目。