【发布时间】:2014-08-06 14:57:41
【问题描述】:
我是使用 C# 针对 Oracle 数据库进行开发的新手。我有创建大量 INSERT INTO 语句的代码,我试图通过 C# 代码传递这些语句以在 Oracle 服务器上执行。
基本上,我构建了一个将“N”个 Insert Into 语句组合在一起的字符串。然后我调用这段代码来尝试执行它们。注意 - 如果我将字符串的内容复制出来并在 SQL Developer 中执行它,它运行良好。但是,当它通过以下代码执行时,我得到 ORA-00922: missing or invalid option\n。
我尝试过包含“;”在每一行的末尾,我尝试排除“;”在每一行的末尾。
仅供参考——“替换”语句是我根据我阅读的其他帖子输入的代码行,以尝试解决问题。如果不需要它们,我无意将它们留在最终代码中。到目前为止,它们没有任何区别。
我的问题如下... 1.我需要包括“;”在每个 INSERT INTO 语句的末尾 2.有没有更好的方法来做多个 INSERT INTO 作为一个批次 3. 这个错误告诉我什么,就像我说的,如果我复制正在执行的内容并在 SQL Developer 中运行它运行良好。
另外,我正在执行 SET DEFINE OFF;在执行代码之前。
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 中,这也可以正常工作。
设置定义关闭;插入PlyflyR.Policy_sql(PolicyID,Username,TravelsectID,PolicyName,EmailSubject,电子邮件Body,Enaped,NotifyTraveler,NotifySuperVisor,AndifyArranded,DatyUpdated,excludevips,NotifyArranger,FromAddress,PolicyTervalid,PolicyTypeID,PolicyStartDate,PolicyEnddate,EnabledDaterange,Policyowner, INCLUDETRAVELERTYPE,EMAILFOOTER,DATEFORMAT,EMAILBODYPLAIN,RECURRENCE_FREQUENCY,IS_RECURRING_POLICY,MESSAGE_TYPE) VALUES (6,'hoppe116',1,'提前购买 - 不到 7 天','提前购买不到 7 天','亲爱的旅行者,
我们的记录表明,您的即将到来的旅行(如下所述)是在您预定出发前不到 7 天出票的。我们的旅行政策建议尽可能在旅行前至少 7 天购买机票。
','Y','Y','Y','Y','Y',to_date('6/9/2008 12:00:00 AM','MM/DD/YYYY HH:MI:SS AM'),to_date('8/4/2009 12:00:00 AM', 'MM/DD/YYYY HH:MI:SS AM'),'Y','N','travelmanager@craneco.com' ,'0 ','C',to_date('1/1/1753 12:00:00 AM', 'MM/DD/YYYY HH:MI:SS AM'),to_date('1/1/1753 12:00:00 AM', 'MM/DD/YYYY HH:MI:SS AM'),'N','hoppe116','','','DD-Mon-YYYY','','0','0' ,'E');插入PlyflyR.Policy_sql(PolicyID,Username,TravelsectID,PolicyName,EmailSubject,电子邮件Body,Enaped,NotifyTraveler,NotifySuperVisor,AndifyArranded,DatyUpdated,excludevips,NotifyArranger,FromAddress,PolicyTervalid,PolicyTypeID,PolicyStartDate,PolicyEnddate,EnabledDaterange,Policyowner, INCLUDETRAVELERTYPE,EMAILFOOTER,DATEFORMAT,EMAILBODYPLAIN,RECURRENCE_FREQUENCY,IS_RECURRING_POLICY,MESSAGE_TYPE) VALUES (7,'hoppe116',1,'Advance Purchase - less than 7 days (Authorizer)','Advance Purchase Less than 7 days','亲爱的旅行者,
我们的记录表明,您的即将到来的旅行(如下所述)是在您预定出发时间前不到 7 天出票的。我们的旅行政策建议尽可能在旅行前至少 7 天购买机票.
','Y','Y','Y','Y','Y',to_date('6/9/2008 12:00:00 AM', 'MM/DD/YYYY HH: MI:SS AM'),to_date('8/4/2009 12:00:00 AM', 'MM/DD/YYYY HH:MI:SS AM'),'Y','N','travelmanager@cr aneco.com','0','C',to_date('1/1/1753 12:00:00 AM', 'MM/DD/YYYY HH:MI:SS AM'),to_date('1/1 /1753 12:00:00 AM', 'MM/DD/YYYY HH:MI:SS AM'),'N','hoppe116','','','DD-Mon-YYYY','', '0','0','E');插入PlyflyR.Policy_sql(PolicyID,Username,TravelsectID,PolicyName,EmailSubject,电子邮件Body,Enaped,NotifyTraveler,NotifySuperVisor,AndifyArranded,DatyUpdated,excludevips,NotifyArranger,FromAddress,PolicyTervalid,PolicyTypeID,PolicyStartDate,PolicyEnddate,EnabledDaterange,Policyowner, INCLUDETRAVELERTYPE,EMAILFOOTER,DATEFORMAT,EMAILBODYPLAIN,RECURRENCE_FREQUENCY,IS_RECURRING_POLICY,MESSAGE_TYPE) VALUES (8,'holmw166',1,'Airline Ticket Exchange','Airline Ticket Exchange','请注意 - 您无需回复此电子邮件。 ..
我们的记录表明您的机票已兑换。平均兑换机票产生的额外费用是原始机票价格的三倍。这些额外费用每年花费 Crane Co 约 540,000 美元。虽然我们了解旅行需求的变化,但请确保在购买机票之前制定好旅行计划。如果您已经开始旅行并需要提前出发,请致电 Carlson Wago nlit 代理查看备用座位是否可用。
由于以下原因之一发送此消息:
1) 由于旅行计划发生变化,旅客换票
2) 旅客使用一张未使用的机票进行兑换
3) CWT 通过自动化流程系统地处理一张未使用的机票以进行兑换
4) 航空公司供应商航班时刻表更改导致重新签发机票 - 无需额外的兑换费用
每当换票并需要签发新机票时,都会收取额外的服务费。
将编制一份月度报告,以审查和了解所有机票换票情况,并将与BU CFO、SC 领导和旅行委员会。
','Y','Y','Y','Y','Y',to_date('6/9/2008 12:00:00 AM' , 'MM/DD/YYYY HH:MI:SS AM'),to_date('8/9/2012 12:00:00 AM', 'MM/DD/YYYY HH:MI:SS AM'),'Y' ,'N','travelmanager@craneco.com','0','C',to_date('1/1/1753 12:00:00 AM', 'MM/DD/YYYY HH:MI:SS AM' ),to_date('1/1/1753 12:00:00 AM ', 'MM/DD/YYYY HH:MI:SS AM'),'N','hoppe116','','','DD-Mon-YYYY','','0','0', 'E');
【问题讨论】:
-
仅供参考 -- 上述帖子 SAMPLE 中的 SQL 是一个 INSERT INTO 语句。我有代码将尝试将多个语句(例如这个语句)批处理到对 Oracle 的单个调用中。我已经为此工作了好几天,无法超越。任何帮助或建议将不胜感激。谢谢
-
为了进一步缩小范围,我尝试仅执行以下操作。这也给了我同样的错误。这只是一个命令,甚至没有尝试插入。设置定义关闭;
-
仅供参考——如果我执行 SELECT 或 DELETE,它会起作用,但是,如果我执行“set define off;”它给出了错误。因此,我的问题可能不一定与我的 INSERT INTO 和“设置定义关闭”语句一样多。必须执行此语句,因为正如您在我的帖子中的 SQL 示例中看到的那样,我在插入语句中有 HTML 字符,例如 当我尝试在没有设置定义的情况下执行此操作时,它不喜欢 &。
-
您需要使用 odp.net 绑定一组值,您不能将脚本作为单个执行语句运行。您可以在循环中一次插入 1 个,或者更好的方法是绑定一个值数组。示例见here
-
谢谢“tbone”,直到我发布答案后我才看到你的帖子。我会按照您对数组的指示进行尝试.. 谢谢..