我一直在尝试创建一个应用程序,以设定的间隔浏览我们的数据库,并将任何新项目更新/添加到3DCarts数据库。他们的代码示例在xml文件中使用soap来为每次调用发送1个请求。所以我需要能够在发送之前动态生成项目信息所需的xml。我对这样的XML文件几乎没有做任何事情,也无法弄清楚如何创建我需要的代码块并发送它。已经提出的一种方法是创建文件但仍然执行一直是一个问题,对于大量项目来说效率非常低。这是我到目前为止所拥有的
sqlStatement = "SELECT * FROM products WHERE name = '" + Convert.ToString(reader.GetValue(0)) + "'";
ServiceReferenceCart.cartAPIAdvancedSoapClient bcsClient = new ServiceReferenceCart.cartAPIAdvancedSoapClient();
ServiceReferenceCart.runQueryResponse bcsResponse = new ServiceReferenceCart.runQueryResponse();
bcsClient.runQuery(storeUrl, userKey, sqlStatement, callBackURL);
string result = Convert.ToString(bcsResponse);
listBox1.Items.Add(result);
编辑:当我最终获得服务参考设置时,从示例代码块更改为当前代码块。但是,它们没有提供使用参考中的功能的详细信息。有了这个bcsResponse只是一个空白,当我尝试添加.Body我有相同的结果但是当我将.runQuery添加到.Body时,我得到一个“对象引用未设置为对象的实例。”错误。正如我所说,我之前没有搞过服务引用。
我希望我已经解释得很好,我以前真的没有使用过这种东西而且它变得非常令人沮丧。
提前感谢你的帮助。
答案 0 :(得分:1)
我实际上在玩完它之后最终搞清楚了。以下是我为获取工作参考所做的工作。对于之前使用过这些参考文献的人来说,这可能很容易,但我还没有,并决定发布这个以防其他人有这个问题。 SQL可以是SELECT,ADD,UPDATE和DELETE语句,这是为了查看在更新/添加之前是否列出了sku。
//Will be using these multiple times so a variable makes more sense
// DO NOT include http:// in the url, also id is not shown in their
//database layout pdf they will give but it is the sku/product number
string sqlStatement = "SELECT id FROM products WHERE id = '" + Convert.ToString(reader.GetValue(0)) + "')))";
string userKey = "YourKeyHere";
string storeUrl = "YourStoresURLHere";
// Setting up instances from the 3DCart API
cartAPIAdvancedSoapClient bcsClient = new cartAPIAdvancedSoapClient();
runQueryRequest bcsRequest = new runQueryRequest();
runQueryResponse bcsResponse = new runQueryResponse();
runQueryResponseBody bcsRespBod = new runQueryResponseBody();
runQueryRequestBody bcsReqBod = new runQueryRequestBody();
//assigning required variables to the requests body
bcsReqBod.storeUrl = storeUrl;
bcsReqBod.sqlStatement = sqlStatement;
bcsReqBod.userKey = userKey;
//assigning the body to the request
bcsRequest.Body = bcsReqBod;
//Setting the response body to be the result
bcsRespBod.runQueryResult = bcsClient.runQuery(bcsReqBod.storeUrl, bcsReqBod.userKey, bcsReqBod.sqlStatement, bcsReqBod.callBackURL );
bcsResponse.Body = bcsRespBod;
//adding the result to a string
string result = bcsResponse.Body.runQueryResult.Value;
//displaying the string, this for me was more of a test
listBox1.Items.Add(result);
您还需要在商店中激活高级API,因为您可能会注意到没有实际选项,因为pdf说,您需要去他们的商店购买(免费)并等待他们激活它。我们花了大约2个小时。