首页 新闻 会员 周边

c# 调用C/FRONT向sql中写数据出现异常

0
[已关闭问题] 关闭于 2009-12-23 20:10

先上出错信息:

经常是前十几条数据可以正常插入  后边的就会出错,望有高手指点一下

System.AccessViolationException: Attempted to read or write protected memory. Th
is is often an indication that other memory is corrupt.
   at Microsoft.Navision.CFront.NativeMethods.ModifyRecSQL(Int32 tableHandle, In
t32 recordHandle)
   at Microsoft.Navision.CFront.CFrontDotNet.ModifyRecord(Int32 tableHandle, Int
32 recordHandle)
   at ItemClient.Program.MisItem2NAV(DataTable Dt, String RegionCode) in C:\Docu
ments and Settings\Administrator\My Documents\Visual Studio 2005\Projects\ItemCl
ient\ItemClient\Program.cs:line 278
   at ItemClient.Program.Main(String[] args) in C:\Documents and Settings\Admini
strator\My Documents\Visual Studio 2005\Projects\ItemClient\ItemClient\Program.c
s:line 70

 方法如下:

显示初始化Global.cf2的代码:

 Global.cf2 = new CFrontDotNet(NavisionDriverType.Sql, "C:\\Program Files\\Microsoft Business Solutions-Navision\\Client");
            String strServer, strUserName, strDatabase, strPWD;
            strServer = "192.168.2.250";
            NavisionNetType strNetType = NavisionNetType.SqlDefault;
            strDatabase = "NAVADLINK";
            strUserName = "nav";   //DB login name
            strPWD = "navision";
            Global.cf2.ConnectServerAndOpenDatabase(strServer, strNetType, strDatabase,2000, false, false, strUserName, strPWD);
            Global.cf2.OpenCompany(ConfigurationManager.AppSettings["CompanyName"]);

        protected static void MisItem2NAV(System.Data.DataTable Dt,String RegionCode)
        {
           
            int hTable, hRec;
            hTable = Global.cf2.OpenTable(Global.cf2.TableNo("Item"));
            hRec = Global.cf2.AllocRecord(hTable);
            Global.cf2.BeginWriteTransaction();
            foreach (DataRow myReader in Dt.Rows)
            {
                string RegionCodeTemp = RegionCode;
                string NO = myReader["No"].ToString().Trim();
                bool isNew = true;
                string Measure = myReader["Base Unit of Measure"].ToString().Trim();
                String _SQL1 = "select count(No_) from [" + ConfigurationManager.AppSettings["CompanyName"] + "$Item] where [No_]='" + NO + "' AND [Region Code]='" + RegionCode + "'";
                if (SqlHelp.SqlExcuteScalar(_SQL1, NAVCONN).ToString() != "0")
                {
                    isNew = false;
                }
                else
                {
                    _SQL1 = "select count(No_) from [" + ConfigurationManager.AppSettings["CompanyName"] + "$Item] where [No_]='" + NO + "'";
                    if (SqlHelp.SqlExcuteScalar(_SQL1, NAVCONN).ToString() != "0")
                    {
                        isNew = false;
                        RegionCodeTemp = "ALL";
                    }
                }

                Global.cf2.InitRecord(hTable, hRec);
                Global.cf2.StringToField(hTable, hRec, Global.cf2.FieldNo(hTable, "No."), NO);
                //[No_ 2]
                Global.cf2.StringToField(hTable, hRec, Global.cf2.FieldNo(hTable, "Description"), myReader["Description 1"].ToString());
                Global.cf2.StringToField(hTable, hRec, Global.cf2.FieldNo(hTable, "Search Description"), myReader["Description 1"].ToString());
                Global.cf2.StringToField(hTable, hRec, Global.cf2.FieldNo(hTable, "Description 2"), myReader["Description 2"].ToString());
                //[Class]
                Global.cf2.StringToField(hTable, hRec, Global.cf2.FieldNo(hTable, "Base Unit of Measure"), Measure);
                //[Price Unit Conversion]
                Global.cf2.StringToField(hTable, hRec, Global.cf2.FieldNo(hTable, "Inventory Posting Group"), myReader["Inventory Posting Group"].ToString());
                //[Shelf No_]
                Global.cf2.StringToField(hTable, hRec, Global.cf2.FieldNo(hTable, "Unit Price"), myReader["Unit Price"].ToString());
                Global.cf2.StringToField(hTable, hRec, Global.cf2.FieldNo(hTable, "Standard Cost"), myReader["Standard Cost"].ToString());
                Global.cf2.StringToField(hTable, hRec, Global.cf2.FieldNo(hTable, "Cost is Adjusted"), myReader["Cost is Adjusted"].ToString());
                //[Allow Online Adjustment]
                Global.cf2.StringToField(hTable, hRec, Global.cf2.FieldNo(hTable, "Vendor No."), myReader["Vendor No_"].ToString());
                Global.cf2.StringToField(hTable, hRec, Global.cf2.FieldNo(hTable, "Unit List Price"), myReader["Unit List Price"].ToString());
                Global.cf2.StringToField(hTable, hRec, Global.cf2.FieldNo(hTable, "Net Weight"), myReader["Net Weight"].ToString());
                Global.cf2.StringToField(hTable, hRec, Global.cf2.FieldNo(hTable, "Last Date Modified"), DateTime.Now.ToString("yyyy/MM/dd"));
                Global.cf2.StringToField(hTable, hRec, Global.cf2.FieldNo(hTable, "Price Includes VAT"), myReader["Price Includes VAT"].ToString());
                Global.cf2.StringToField(hTable, hRec, Global.cf2.FieldNo(hTable, "Gen. Prod. Posting Group"), myReader["Gen_ Prod_ Posting Group"].ToString());
                Global.cf2.StringToField(hTable, hRec, Global.cf2.FieldNo(hTable, "Country of Origin Code"), myReader["Country of Origin Code"].ToString());
                Global.cf2.StringToField(hTable, hRec, Global.cf2.FieldNo(hTable, "VAT Prod. Posting Group"), myReader["VAT Prod_ Posting Group"].ToString());
                //[Reserve]
                Global.cf2.StringToField(hTable, hRec, Global.cf2.FieldNo(hTable, "Low-Level Code"), myReader["Low-Level Code"].ToString());
                Global.cf2.StringToField(hTable, hRec, Global.cf2.FieldNo(hTable, "Lot Size"), myReader["Lot Size"].ToString());
                Global.cf2.StringToField(hTable, hRec, Global.cf2.FieldNo(hTable, "Minimum Order Quantity"), myReader["Minimum Order Quantity"].ToString());
                Global.cf2.StringToField(hTable, hRec, Global.cf2.FieldNo(hTable, "Order Multiple"), myReader["Order Multiple"].ToString());
                Global.cf2.StringToField(hTable, hRec, Global.cf2.FieldNo(hTable, "Sales Unit of Measure"), myReader["Sales Unit of Measure"].ToString());
                Global.cf2.StringToField(hTable, hRec, Global.cf2.FieldNo(hTable, "Purch. Unit of Measure"), myReader["Purch_ Unit of Measure"].ToString());
                Global.cf2.StringToField(hTable, hRec, Global.cf2.FieldNo(hTable, "Item Category Code"), myReader["Item Category Code"].ToString());
                Global.cf2.StringToField(hTable, hRec, Global.cf2.FieldNo(hTable, "Product Group Code"), myReader["Product Group Code"].ToString());
                Global.cf2.StringToField(hTable, hRec, Global.cf2.FieldNo(hTable, "Region Code"), RegionCodeTemp);

     

                if (isNew)
                {
                    Global.cf2.InsertRecord(hTable, hRec);
                    Console.WriteLine("Insert {0} item: {1}", RegionCode, NO);
                }
                else
                {
                    Global.cf2.ModifyRecord(hTable, hRec);
                    Console.WriteLine("Modify {0} item: {1}", RegionCode, NO);
                }
               
            }
            Global.cf2.EndWriteTransaction();
            Global.cf2.FreeRecord(hRec);
            Global.cf2.CloseTable(hTable);
           
        }

驢騎士的主页 驢騎士 | 初学一级 | 园豆:0
提问于:2009-12-23 12:00
< >
分享
所有回答(1)
0

看一下你的第 line 70 这须代码。。

新瓶老酒 | 园豆:181 (初学一级) | 2009-12-23 13:49
line 70 这行代码只是调用MisItem2NAV方法的
支持(0) 反对(0) 驢騎士 | 园豆:0 (初学一级) | 2009-12-23 15:08
清除回答草稿
   您需要登录以后才能回答,未注册用户请先注册