我有一個BLOB字段的表,我正在向此表中插入二進制數據。一切順利,除非我指定一個超過2000字節的二進制數據。在這種情況下,我發現了以下錯誤:將BLOB寫入Oracle數據庫時發生無效的精確值錯誤
ERROR [HY104][ODBC Oracle Wire Protocol driver]Invalid precision value. Error in parameter 1
at System.Data.Odbc.OdbcConnection.HandleError(OdbcHandle hrHandle, RetCode retcode)
at System.Data.Odbc.OdbcCommand.ExecuteReaderObject(CommandBehavior behavior, String method, Boolean needReader, Object[] methodArguments, SQL_API odbcApiMethod)
at System.Data.Odbc.OdbcCommand.ExecuteReaderObject(CommandBehavior behavior, String method, Boolean needReader)
at System.Data.Odbc.OdbcCommand.ExecuteNonQuery()
是否有任何理由爲什麼操作可能會失敗,此錯誤BLOB數據類型?我在Oracle 11.2和12上測試了這種行爲,並且看到了相同的行爲。 這裏是代碼我使用更新BLOB:
public override void WriteBlob(int id, byte[] data)
{
var cmd = GetConnection().CreateCommand();
cmd.CommandText = "update TB_BLOBS set TB_BLOB=? where TB_ID=?";
cmd.Parameters.Add(new OdbcParameter
{
DbType = DbType.Binary,
ParameterName = "TB_BLOB",
Value = data
});
cmd.Parameters.Add(new OdbcParameter
{
DbType = DbType.Int32,
ParameterName = "TB_ID",
Value = id
});
cmd.ExecuteNonQuery();
}
它的工作原理,只有當data.Length < = 2000年是否有任何的Oracle環境,我應該知道的是可以有所作爲?
我檢查了幾次數據類型真的是BLOB。我也嘗試用SQLPlus選擇插入的字節,並且我得到了小字節數組的正確結果。我想知道這是否是一個驅動因素問題。 – username
驅動程序緩衝區長度「DefaultLongDataBuffLen」被設置爲1024KB,這似乎足夠了。感謝您的想法。 – username
插入語句有400個字節的限制。但是,您可以通過將其封裝在pl/sql中來繞過它... Begin Block塊 –