最近因為業務需求開發了一個介面用於接收數據,但是總有一些數據報出ORA-01704:字元串文字太長錯誤。仔細排查後發現,竟然是NCLOB類型欄位提示這個錯誤。NCLOB存儲空間有4G,怎麼也想不明白為什麼會報這個錯誤。原來因為介面插入數據採用字元串拼接的方式。 而oracle中會把字元串轉為varc ...
最近因為業務需求開發了一個介面用於接收數據,但是總有一些數據報出ORA-01704:字元串文字太長錯誤。仔細排查後發現,竟然是NCLOB類型欄位提示這個錯誤。NCLOB存儲空間有4G,怎麼也想不明白為什麼會報這個錯誤。原來因為介面插入數據採用字元串拼接的方式。
1 string strSql = "insert into tablename (id) values ('" + id.ToString() + "')";
而oracle中會把字元串轉為varchar2類型,當字元串非常長,超過4000字元時,就會報ORA-01704錯誤。
所以為了正確插入NCLOB或者CLOB類型的數據,需要如下麵寫法
string strSql = "insert into tablename (id) values (:id)";
Database db = DatabaseFactory.CreateDatabase();
DbCommand cmd = db.GetSqlStringCommand(strSql);
OracleParameter oracPara = new OracleParameter("id", OracleType.NClob);
oracPara.Value = idvalue;
cmd.Parameters.Add(oracPara);
db.ExecuteNonQuery(cmd);