C# 使用.Net Connector for SAP时出现WHERE子句问题
尝试读取一个表,这是我的WHERE子句C# 使用.Net Connector for SAP时出现WHERE子句问题,c#,sql,abap,sap-dotnet-connector,C#,Sql,Abap,Sap Dotnet Connector,尝试读取一个表,这是我的WHERE子句 "((DISPO EQ 'E10' OR DISPO EQ 'EAA') AND (GLTRP >= '20150701' AND GLTRP <= '20150730'))" 现在,如果我拆分WHERE子句并分别进行尝试,那么一切都正常 DISPO EQ 'E10' OR DISPO EQ 'EAA' // This works 及 那么我原来的WHERE子句有什么问题呢 更新:代码的执行方式 IRfcFunction BapiGetOr
"((DISPO EQ 'E10' OR DISPO EQ 'EAA') AND (GLTRP >= '20150701' AND GLTRP <= '20150730'))"
现在,如果我拆分WHERE子句并分别进行尝试,那么一切都正常
DISPO EQ 'E10' OR DISPO EQ 'EAA' // This works
及
那么我原来的WHERE子句有什么问题呢
更新:代码的执行方式
IRfcFunction BapiGetOrderStatus = SapRap.CreateFunction("BBP_RFC_READ_TABLE");
BapiGetOrder.SetValue("QUERY_TABLE", "AFKO")
BapiGetOrder.SetValue("DELIMITER", ";");
BapiGetOrder.SetValue("ROWCOUNT", "30");
// Parameter table FIELDS contains the columns
IRfcTable fields = BapiGetOrders.GetTable("FIELDS");
fields.Append();
fields.SetValue("FIELDNAME", "AUFNR");
fields.Append();
fields.SetValue("FIELDNAME", "GLTRP");
fields.Append();
fields.SetValue("FIELDNAME", "GSTRP");
fields.Append();
fields.SetValue("FIELDNAME", "GAMNG");
felds.Append();
fields.SetValue("FIELDNAME", "STLBEZ");
fields.Append();
fields.SetValue("FIELDNAME", "DISPO");
fields.Append();
fields.SetValue("FIELDNAME", "APRIO");
fields.Append();
fields.SetValue("FIELDNAME", "IGMNG");
fields.Append();
fields.SetValue("FIELDNAME", "IASMG");
IRfcTable optsTable = BapiGetOrder.GetTable("OPTIONS");
optsTable.Append();
optsTable.SetValue("TEXT", " ( ( DISPO EQ 'E10' OR DISPO EQ 'EAA' ) AND ( GLTRP >= '20150701' AND GLTRP <= '20150730' ) ) ");
BapiGetOrders.Invoke(SapRfcDestination); // <------- EXCEPTION HERE
IRfcTable ItemsTable = BapiGetOrders.GetTable("DATA");
IRfcFunction bapigerderstatus=SapRap.CreateFunction(“BBP\u RFC\u READ\u TABLE”);
SetValue(“查询表”、“AFKO”)
SetValue(“分隔符”、“;”);
设置值(“行计数”,“30”);
//参数表字段包含列
IRfcTable fields=bapigerders.GetTable(“字段”);
fields.Append();
fields.SetValue(“FIELDNAME”、“AUFNR”);
fields.Append();
字段设置值(“字段名”、“GLTRP”);
fields.Append();
fields.SetValue(“FIELDNAME”、“GSTRP”);
fields.Append();
fields.SetValue(“FIELDNAME”、“GAMNG”);
felds.Append();
fields.SetValue(“FIELDNAME”、“STLBEZ”);
fields.Append();
fields.SetValue(“FIELDNAME”、“DISPO”);
fields.Append();
fields.SetValue(“FIELDNAME”、“APRIO”);
fields.Append();
字段设置值(“字段名”、“IGMNG”);
fields.Append();
fields.SetValue(“FIELDNAME”、“IASMG”);
IRfcTable optsTable=bapigerder.GetTable(“选项”);
optsTable.Append();
optsTable.SetValue(“文本”、“显示”或“显示”和(GLTRP>=“20150701”和GLTRP括号内可能需要空格:
"( ( DISPO EQ 'E10' OR DISPO EQ 'EAA' ) AND ( GLTRP >= '20150701' AND GLTRP <= '20150730' ) )"
^ ^ ^ ^ ^ ^
”((DISPO EQ'E10'或DISPO EQ'EAA')和(GLTRP>='20150701'和GLTRP您的最后一条注释表明消息包含对动态条件的引用。动态条件在表单中
... WHERE (variable).
变量是包含条件的字符串
由于您没有这样的动态条件,我认为,作为vwegert,您在您的条件下遇到了空间问题。如果您在每个条件之前和之后添加空间,您的第二个解决方案应该有效)并且(。尝试在SQL中添加换行符,我认为您的SQL每次执行时都会被修剪。可能是因为它太长。语句太长。任何超过70个字符的WHERE文本都无法正确执行。请拆分WHERE子句,并在表中追加两条记录。尝试了您所说的内容,现在我得到了其他信息ion:动态WHERE条件中缺少一个关系运算符。
在这种情况下,用整个stacktrace捕获nco异常并记录stacktrace可能很方便。您的整个语句看起来如何,是如何创建的,是如何传递的?这不是问题的答案。
GLTRP >= '20150701' AND GLTRP <= '20150730' // This also works.
GLTRP BETWEEN '20150701' AND '20150730'
IRfcFunction BapiGetOrderStatus = SapRap.CreateFunction("BBP_RFC_READ_TABLE");
BapiGetOrder.SetValue("QUERY_TABLE", "AFKO")
BapiGetOrder.SetValue("DELIMITER", ";");
BapiGetOrder.SetValue("ROWCOUNT", "30");
// Parameter table FIELDS contains the columns
IRfcTable fields = BapiGetOrders.GetTable("FIELDS");
fields.Append();
fields.SetValue("FIELDNAME", "AUFNR");
fields.Append();
fields.SetValue("FIELDNAME", "GLTRP");
fields.Append();
fields.SetValue("FIELDNAME", "GSTRP");
fields.Append();
fields.SetValue("FIELDNAME", "GAMNG");
felds.Append();
fields.SetValue("FIELDNAME", "STLBEZ");
fields.Append();
fields.SetValue("FIELDNAME", "DISPO");
fields.Append();
fields.SetValue("FIELDNAME", "APRIO");
fields.Append();
fields.SetValue("FIELDNAME", "IGMNG");
fields.Append();
fields.SetValue("FIELDNAME", "IASMG");
IRfcTable optsTable = BapiGetOrder.GetTable("OPTIONS");
optsTable.Append();
optsTable.SetValue("TEXT", " ( ( DISPO EQ 'E10' OR DISPO EQ 'EAA' ) AND ( GLTRP >= '20150701' AND GLTRP <= '20150730' ) ) ");
BapiGetOrders.Invoke(SapRfcDestination); // <------- EXCEPTION HERE
IRfcTable ItemsTable = BapiGetOrders.GetTable("DATA");
"( ( DISPO EQ 'E10' OR DISPO EQ 'EAA' ) AND ( GLTRP >= '20150701' AND GLTRP <= '20150730' ) )"
^ ^ ^ ^ ^ ^
... WHERE (variable).