我有一個 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;
}
}
uj5u.com熱心網友回復:
您可以執行以下操作之一:
- 洗掉 SQL 字串末尾的最后一個分號
- 稱呼
sqlStmt.Trim().Split(new[]{';'}, StringSplitOptions.RemoveEmptyEntries) - 放在
if(string.IsNullOrWhiteSpace(sql)) continue;回圈的第一行
后兩個是更多的代碼,但是如果;;有一天您不小心將 a輸入到字串中,它們將阻止此錯誤再次出現。只有第三個選項可以防止輸入錯誤; ;
我很難弄清楚是哪個 sql 導致了錯誤
小貼士,也可以考慮這樣的事情,也許:
Dts.Events.FireError(0, "PSRM Execute SQL", "SQL command failed. " e.Message
" the faulting SQL was:" currentSql, null, 0);
轉載請註明出處,本文鏈接:https://www.uj5u.com/qiye/360542.html
