【发布时间】:2021-12-29 17:54:21
【问题描述】:
我有一条 SQL 语句,我尝试在 C# 和 Oracle 中运行,但出现 OracleCommand.CommandText 错误。 我的代码创建了一个外部表,其中从 .tsv 文件加载数据并将其插入到我的表 CI_FT 中。最后它删除了外部表。
我看不出有什么原因会显示 OracleCommand.CommandText。
查询如下:
CREATE TABLE STGMUAG.CI_FT_EXT
(FT_ID CHAR(12) DEFAULT ' ' NOT NULL ENABLE,
SIBLING_ID CHAR(12) DEFAULT ' ' NOT NULL ENABLE
)
ORGANIZATION EXTERNAL
(
DEFAULT DIRECTORY FLAT_FILES
ACCESS PARAMETERS
(
records delimited by '\\r\\n'
skip 1
fields terminated by '\\t'
)
LOCATION('STGMUAG_CI_FT.tsv')
);
INSERT INTO STGMUAG.CI_FT (
FT_ID,
SIBLING_ID
)
SELECT
FT_ID,
SIBLING_ID
FROM STGMUAG.CI_FT_EXT;
DROP TABLE STGMUAG.CI_FT_EXT;
这是我的 C# 脚本
public void ExecNonQuery(string sqlStmt, OracleConnection con, ref string currentSql)
{
try
{
var sqlArr = sqlStmt.Split(';');
foreach (string sql in sqlArr)
{
currentSql = sql;
OracleCommand cmd = new OracleCommand(sql, con);
cmd.CommandType = CommandType.Text;
cmd.ExecuteNonQuery();
bool fireAgain = false;
Dts.Events.FireInformation(0, "PSRM Execute SQL", string.Format("SQL command {0} executed successfully.", sql), "", 0, ref fireAgain);
}
}
catch (Exception e)
{
Dts.Events.FireError(0, "PSRM Execute SQL", "SQL command failed. "+ e.Message, null,0);
throw;
}
}
【问题讨论】:
-
您的代码将您的脚本分成 3 个语句。这三个语句中的哪一个是失败的?我不知道你为什么每次都要创建和删除表——通常你只需要做一次。
-
@CaiusJard 我应该在哪里添加 RemoveEmptyEntries?我想检查添加是否可以修复它。可能是第 4 条语句,即空字符串,可能导致它。
-
我很难确定是哪个 sql 导致了错误。
-
在日志中说:currentSql = ""