C# C-多个Insert Into语句-错误=ORA-00922:缺少或无效选项\n

C# C-多个Insert Into语句-错误=ORA-00922:缺少或无效选项\n,c#,oracle,insert,C#,Oracle,Insert,我是用C语言开发Oracle数据库的新手。我的代码创建了许多INSERT INTO语句,我正试图通过C代码将这些语句传递到Oracle服务器上执行 基本上,我构建了一个字符串,它有N个Insert-Into语句组合在一起。然后我调用这段代码来尝试执行它们。注意-如果我将字符串的内容复制出来,并在SQLDeveloper中执行它,那么它运行良好。但是,当通过以下代码执行时,我得到ORA-00922:缺少或无效选项\n 我已经尝试过包括;在每行的末尾,我都试着排除;在每行的末尾 仅供参考-repla

我是用C语言开发Oracle数据库的新手。我的代码创建了许多INSERT INTO语句,我正试图通过C代码将这些语句传递到Oracle服务器上执行

基本上,我构建了一个字符串,它有N个Insert-Into语句组合在一起。然后我调用这段代码来尝试执行它们。注意-如果我将字符串的内容复制出来,并在SQLDeveloper中执行它,那么它运行良好。但是,当通过以下代码执行时,我得到ORA-00922:缺少或无效选项\n

我已经尝试过包括;在每行的末尾,我都试着排除;在每行的末尾

仅供参考-replace语句是我根据其他文章输入的代码行,我阅读这些文章是为了尝试解决这个问题。如果不需要,我不打算在最终代码中留下它们。到目前为止,它们没有产生任何影响

我的问题如下。。。 1.我是否需要包括:;在每个INSERT INTO语句的末尾 2.是否有更好的方法将多个插入作为一个批处理 3.这个错误告诉了我什么,就像我说的,如果我复制正在执行的内容并在SQLDeveloper中运行它,它就会正常运行

另外,我正在做一套定义;在执行代码之前

                       try
                        {
                            sHold = sBatch.Replace(Environment.NewLine, "\n");
                            sBatch = sHold;
                            sHold = sOptioins + sBatch;
                            sToExecute = sHold.Replace("\n", "");
                            sHold = sToExecute.Replace("\r", "");
                            sToExecute = sHold;
                            OracleHelper.ExecuteNonQuery(OracleConnection, CommandType.Text, sToExecute);
                        }
                        catch (Exception ex1)
                        {
                            Console.WriteLine(ex1.Message.ToString());
                        }
下面是我正在尝试执行的SQL示例。这就是动态构建并传递给Oracle的内容。如果我复制它并将其直接粘贴到SQL Developer中,这也可以很好地工作

抵销;插入到PLCYFLYR.POLICY\u SQL POLICYID、用户名、TRAVELSECTORID、POLICYNAME、EMAILSUBJECT、EMAILBODY、ENABLED、NOTIFYTRAVELER、NOTIFYSUPERVISOR、ANDED、PolicyEmailSenEnabled、DATEINSERTED、DATEUPDATED、EXCLUDEVIPS、NOTIFYARRANGER、FROMADDRESS、POLICYINTERVALID、POLICYTYPEID、POLICYSTARTDATE、POLICYENDDATE、EnabledDataRange、POLICYOWNER、INCLUDETRAVELERTYPE、EMAILFOOTER、,DATEFORMAT、EMAILBODYPLAIN、重复频率、IS_重复性_策略、消息类型值6、'hoppe116',1、'Pready Purchase-少于7天'、'Pready Purchase-少于7天'、'Dear Traveler,我们的记录表明,您的即将到来的旅行(参考下文)在您预定出发前不到7天就已经收到了机票。我们的旅行政策建议尽可能在旅行前至少提前七天购买机票。“Y”,“Y”,“Y”,“Y”,“Y”,“Y”,“至日期”2008年9月6日12:00:00 AM”,“MM/DD/YYYY HH:MI:SS AM”,“至日期”2009年4月8日12:00:00 AM”,“MM/DD/YYYY HH:MI:SS AM”,“Y”,“N”travelmanager@craneco.com“,”0“,”C“,截止日期”1753年1月1日12:00:00 AM“,“MM/DD/YYYY HH:MI:SS AM”,截止日期为“1753年1月1日12:00:00 AM”,“MM/DD/YYYY HH:SS AM”,“N”,“hoppe116”,“DD-Mon-YYYY”,“0”,“E”;插入到PLCYFLYR.POLICY\u SQL POLICYID、用户名、TRAVELSECTORID、POLICYNAME、EMAILSUBJECT、EMAILBODY、ENABLED、NOTIFYTRAVELER、NOTIFYSUPERVISOR、ANDED、PolicyEmailSenEnabled、DATEINSERTED、DATEUPDATED、EXCLUDEVIPS、NOTIFYARRANGER、FROMADDRESS、POLICYINTERVALID、POLICYTYPEID、POLICYSTARTDATE、POLICYENDDATE、EnabledDataRange、POLICYOWNER、INCLUDETRAVELERTYPE、EMAILFOOTER、,DATEFORMAT、EMAILBODYPLAIN、重复频率、IS_重复性_策略、消息类型值7、'hoppe116',1、'预付款-少于7天授权人'、'预付款少于7天'、'亲爱的旅行者,我们的记录表明,您的即将到来的旅行(参考下文)在您预定出发前不到7天就已收到机票。我们的旅行政策建议尽可能在旅行前至少提前七天购买机票。“Y”,“Y”,“Y”,“Y”,“Y”,“Y”,“至日期”2008年9月6日12:00:00 AM”,“MM/DD/YYYY HH:MI:SS AM”,“至日期”2009年4月8日12:00:00 AM”,“MM/DD/YYYY HH:MI:SS AM”,“Y”,“N”travelmanager@craneco.com“,”0“,”C“,截止日期”1753年1月1日12:00:00 AM“,“MM/DD/YYYY HH:MI:SS AM”,截止日期为“1753年1月1日12:00:00 AM”,“MM/DD/YYYY HH:SS AM”,“N”,“hoppe116”,“DD-Mon-YYYY”,“0”,“E”;插入到PLCYFLYR.POLICY\u SQL POLICYID、用户名、TRAVELSECTORID、POLICYNAME、EMAILSUBJECT、EMAILBODY、ENABLED、NOTIFYTRAVELER、NOTIFYSUPERVISOR、ANDED、PolicyEmailSenEnabled、DATEINSERTED、DATEUPDATED、EXCLUDEVIPS、NOTIFYARRANGER、FROMADDRESS、POLICYINTERVALID、POLICYTYPEID、POLICYSTARTDATE、POLICYENDDATE、EnabledDataRange、POLICYOWNER、INCLUDETRAVELERTYPE、EMAILFOOTER、,DATEFORMAT、EMAILBODYPLAIN、重复频率、IS_重复性_策略、消息类型值8、'holmw166',1、'Airline Ticket Exchange'、'Airline Ticket Exchange'、'请注意-您不需要回复此电子邮件…我们的记录表明您的机票已被交换。平均交换车票产生的额外费用是原车票价格的三倍。这些额外费用每年花费Crane公司约54万美元。虽然我们了解旅行需求的变化,但在购买机票之前,请确保旅行计划是确定的。如果您已经开始旅行,需要提前出发,请致电卡尔森Wagonlit代理商,查看是否有备用座位。此
由于以下原因之一而发送消息:1旅客因旅行计划变更而交换机票2旅客利用未使用的机票进行交换3 CWT系统处理未使用的机票通过自动流程进行交换4航空公司供应商航班时刻表变更导致重新签发机票-无需额外交换费无论何时交换机票和需要发行新机票,都将收取额外的服务费。将编制月报,以审查和了解所有机票交换情况,并将与BU CFO、SC领导和旅游委员会共享。'、'Y'、'Y'、'Y'、'Y'、'Y',至日期'6/9/2008 12:00 AM'、'MM/DD/YYYY HH:MI:SS AM',截止日期'8/9/2012 12:00:00 AM'、'MM/DD/YYYY HH:MI:SS AM'、'Y'、'N'、'travelmanager@craneco.com“,”0“,”C“,”至日期”1753年1月12:00:00 AM“,”MM/DD/YYYY HH:MI:SS AM“,”至日期”1753年1月12:00:00 AM“,”MM/DD/YYYY HH:MI:SS AM“,”N“,”hoppe116“,”DD-Mon-YYYYYY“,”0“,”E“

好的。。这个问题与插入无关。我面临的问题有三个方面。。。 1.set define off在代码中无效,只能在SQL开发人员内部工作 2.删除set define off语句后,由于SQL语句中包含的错误,我收到了错误,因此我必须解决这个问题。现在,我将用[NBSP]替换,然后在完成后进行更新,以将其切换回数据库中的true。我可能会尝试使用代码中的CHAR38来解决这个问题。 3.C oracle命令不需要或不接受;因为它一次只处理一个命令。我尝试将多个命令批处理在一起,就像我在SQL Server中很容易做到的那样,但这是不允许的

希望这能帮助其他遇到这种情况的人

谢谢,
Bruce

FYI-上述post示例中的SQL是一个INSERT INTO语句。我已经准备好了代码,可以尝试将多条语句(如本条语句)批处理到对Oracle的单个调用中。我已经在这方面工作了好几天了,无法克服这一点。如有任何帮助或建议,将不胜感激。。谢谢你,我尝试着缩小这个范围,我试着只执行以下内容。这也给了我同样的错误。这只是一个命令,甚至没有尝试插入。抵销;仅供参考-如果我执行选择或删除,它会工作,但是,如果我执行设置定义关闭;它给出了错误。因此,我的问题可能不一定与我的INSERT-in有关,而与Set-Define-Off语句有关。必须执行此语句,因为正如您在我的帖子中的SQL示例中所看到的,我在insert语句中有HTML字符,例如,当我尝试在不禁用set define的情况下执行此语句时,它不像&。您需要使用odp.net绑定一个值数组,您不能将脚本作为单个execute语句运行。在循环中一次插入一个,或者更好的方法是绑定一个值数组。请看一个例子,谢谢,直到我发布了我的答案,我才看到你的帖子。我将按照您对阵列的指示尝试。。谢谢