与C#Windows应用程序的快速图书集成

本文关键字:集成 C#Windows 应用程序 | 更新日期: 2023-09-27 18:27:02

我的系统中安装了Quick book application。我创建了一些供应商和客户列表。

快速预订:QuickBooks Simple Start 2010 Free Edition

数据库:QuickBooks Database Server Manager

数据库版本:11.0.1.2584

计算机名称:SYS13

在我的Windows C#应用程序中,我试图通过阅读Excel来添加供应商和客户的列表。我正在生成XML并基于Excel输入。

一切都还好。但My C# appQuick Book Database之间没有连接。

我得到以下错误:

Can't connect to the database.

连接字符串Computer Name=SYS13;Company Data=Demo VSS;Version=11.0.1.2584

我尝试连接的代码:

     try
     {
           rp.OpenConnection("VendorAdd", "VendorAdd");
           MessageBox.Show(connString);
           ticket = rp.BeginSession(connString);
           response = rp.ProcessRequest(ticket, input);
           requestXML = input.ToString();
           responseXML = response.ToString();
     }
     catch (System.Runtime.InteropServices.COMException ex)
     {
           MessageBox.Show("COM Error Description = " + ex.Message, "COM error");
           return;
     }
     finally
     {
           if (ticket != null)
           {
               rp.EndSession(ticket);
           }
           if (rp != null)
           {
               rp.CloseConnection();
           }
      };

有什么想法吗?为什么?有关于这个应用程序的示例源代码吗?

提前感谢,

与C#Windows应用程序的快速图书集成

快速图书集成要求您的应用程序在公司快速图书文件(我相信是.qbw)中注册。为了实现连接,您必须在运行quickbooks的同时直接针对quickbook安装运行此应用程序,并授权您的应用程序集成到quickbook中。我将在后续编辑中挖掘相关链接。

编辑以下是为我指明正确方向的链接:http://www.qodbc.com/qodbcconnect.htmhttp://www.ehow.com/how_8478505_add-integrated-application-quickbooks.htmlhttp://www.vtechnologies.com/kb.htm?prodid=2&kbid=797F8F94-3706-480D-A357-31B80AE2D011&

还有其他一些事情也可能发生。检查您返回的任何COM异常,并直接调查其代码。他们至少会给你指明一个好的方向。我最常遇到的一个是COM异常,它告诉我在尝试访问QuickBooks时没有打开并运行它

如果你在一个异常中得到了这个,那么你需要在尝试连接到它之前打开快速书籍:

HRESULT: 0x80040430

不过,一般来说,您的代码应该如下所示:

public IVendorRetList GetVendors(string filePath, string appName)
{
var _sessionManager = new QBSessionManager();
_sessionManager.CommunicateOutOfProcess(true);
_sessionManager.OpenConnection2(string.Empty, appName, ENConnectionType.ctLocalQBD);
_sessionManager.BeginSession(filePath, ENOpenMode.omDontCare);
_request = _sessionManager.CreateMsgSetRequest("US", 12, 0);
_request.AppendVendorQueryRq();
//do somethign to filter your vendor query here.
var response = _sessionManager.DoRequests(_request);
var vendorList = (IVendorRetList)response.ResponseList.GetAt(0).Detail;
return vendorList;
}