C#QuickBooks无法添加支票

C#QuickBooks无法添加支票,c#,quickbooks,C#,Quickbooks,我正在尝试添加使用C#将佣金从我的系统转移到QuickBooks的功能,除了添加支票请求之外,我已经有了一整套功能。目前,我得到了这个输出 选中添加 ExpenseLineAddList: 元素(2)-所需对象为空 ExpenseLineAddList结束 检查结束添加 这是代码。不幸的是,它有点长,但这正是围绕必要位的东西 MySql.Data.MySqlClient.MySqlConnection CheckConn = new MySql.Data.MySqlCli

我正在尝试添加使用C#将佣金从我的系统转移到QuickBooks的功能,除了添加支票请求之外,我已经有了一整套功能。目前,我得到了这个输出

选中添加

ExpenseLineAddList:

元素(2)-所需对象为空

ExpenseLineAddList结束

检查结束添加

这是代码。不幸的是,它有点长,但这正是围绕必要位的东西

            MySql.Data.MySqlClient.MySqlConnection CheckConn = new MySql.Data.MySqlClient.MySqlConnection();
            MySqlCommand CheckCmd = new MySqlCommand();
            CheckConn.ConnectionString = myConnectionString;
            CheckConn.Open();
            CheckCmd.Connection = CheckConn;
            CheckCmd.CommandText = "select `companies`.`ParentCompanyName`, `DateTimeStart`, `DateTimeEnd` from `commissiontransfers` join `orders` using (`InvoiceID`) join `companies` using (`CompanyID`) where `Transfered`=0 group by `ParentCompanyName`;";

            MySqlDataReader CheckReader = CheckCmd.ExecuteReader();
            DataTable Checks;
            using (CheckReader)
            {
                Checks = new System.Data.DataTable();
                Checks.Load(CheckReader);
            }
            CheckReader.Close();
            CheckReader.Dispose();
            CheckConn.Close();
            CheckConn.Dispose();

            foreach (DataRow Check in Checks.Rows)
            {

                IMsgSetRequest AddCheckMsgSet = sessionManager.CreateMsgSetRequest("US", 8, 0);
                AddCheckMsgSet.Attributes.OnError = ENRqOnError.roeContinue;
                ICheckAdd CheckAddRq = AddCheckMsgSet.AppendCheckAddRq();

                CheckAddRq.AccountRef.FullName.SetValue("Bank Account");
                CheckAddRq.PayeeEntityRef.FullName.SetValue(Convert.ToString(Check["ParentCompanyName"]));
                CheckAddRq.Memo.SetValue("Date Range: From " + Convert.ToDateTime(Check["DateTimeStart"]).ToString("MM/dd/yyyy") + " to " + Convert.ToDateTime(Check["DateTimeEnd"]).ToString("MM/dd/yyyy"));
                CheckAddRq.IsToBePrinted.SetValue(true);


                MySql.Data.MySqlClient.MySqlConnection CommissionTransferConn = new MySql.Data.MySqlClient.MySqlConnection();
                MySqlCommand CommissionTransferCmd = new MySqlCommand();
                CommissionTransferConn.ConnectionString = myConnectionString;
                CommissionTransferConn.Open();
                CommissionTransferCmd.Connection = CommissionTransferConn;
                CommissionTransferCmd.CommandText = "select `CommissionTransferID`, round(`OrderCommission`-`FactoryCommission`-`ShippingCommission`, 2) `Total`, `orders`.`DateTimePaid`, `companies`.`OldQBName`, `orders`.`Customer` from `commissiontransfers` join `orders` using (`InvoiceID`) join `companies` using (`CompanyID`) where `Transfered`=0;";

                MySqlDataReader CommissionTransferReader = CommissionTransferCmd.ExecuteReader();
                DataTable CommissionTransfers;
                using (CommissionTransferReader)
                {
                    CommissionTransfers = new System.Data.DataTable();
                    CommissionTransfers.Load(CommissionTransferReader);
                }
                CommissionTransferReader.Close();
                CommissionTransferReader.Dispose();
                CommissionTransferConn.Close();
                CommissionTransferConn.Dispose();

                foreach (DataRow CommissionTransfer in CommissionTransfers.Rows)
                {
                    
                    IExpenseLineAdd ExpenseLineAdd = CheckAddRq.ExpenseLineAddList.Append();
                    ExpenseLineAdd = CheckAddRq.ExpenseLineAddList.Append();
                    ExpenseLineAdd.AccountRef.FullName.SetValue("Contract Labor:1099's");
                    ExpenseLineAdd.Amount.SetValue(Convert.ToDouble(CommissionTransfer["Total"]));
                    ExpenseLineAdd.Memo.SetValue(Convert.ToString(CommissionTransfer["Customer"]) + " - " + Convert.ToDateTime(CommissionTransfer["DateTimePaid"]).ToString("MM/dd/yyyy"));
                    ExpenseLineAdd.ClassRef.FullName.SetValue(Convert.ToString(CommissionTransfer["OldQBName"]));

                    GetFirstRow("update `commissiontransfers` set `Transfered`=1 where `CommissionTransferID`='" + CommissionTransfer["CommissionTransferID"] + "';");
                }
                CheckAddRq.IncludeRetElementList.Add("TxnID");

                try { 
                    IMsgSetResponse CheckResponseMsgSet = sessionManager.DoRequests(AddCheckMsgSet);
                    IResponse CheckResponse = CheckResponseMsgSet.ResponseList.GetAt(0);
                    MessageBox.Show(CheckResponse.StatusCode + ": " + CheckResponse.StatusMessage);
                }
                catch (Exception ex)
                {
                    Console.WriteLine("{0} Exception caught.", ex);
                }

看起来好像我的
AddCheckMsgSet
变量是空的,但我一辈子都搞不清楚为什么会是空的。非常感谢您的帮助

当然,我花了三个小时来解决这个问题,然后在我把它发布到这里之后,我自己解决了它。嗯,问题与这些线路有关

IExpenseLineAdd ExpenseLineAdd = CheckAddRq.ExpenseLineAddList.Append();
ExpenseLineAdd = CheckAddRq.ExpenseLineAddList.Append();
我所需要做的就是去掉第二行,因为我已经追加了一个新的费用行,第二次追加导致第一个请求为空。希望这对将来的人有所帮助,因为我只在尝试连接QuickBooks时遇到问题