2016-12-29 53 views
2

我在網上搜索這個問題,但我的問題是不同的。 我使用Fluent NHibernate,並嘗試與SQL查詢插入數據:在NHibernate中設置參數時,「ORA-01461:只能綁定LONG值才能插入到LONG列」

var query = "INSERT INTO TABLE_NAME('ID','CONTENT') VALUES(:ID, :CONTENT)"; 
var executedQuery = Session.CreateSQLQuery(query); 

executedQuery.SetParameter("ID", data.Id); 
executedQuery.SetParameter("CONTENT", data.Content); 
executedQuery.ExecuteUpdate(); 

這裏data傳遞給方法。在數據庫(Oracle 11g)數據類型CONTENTNCLOB。當嘗試插入數據時,出現此錯誤:

ORA-01461: can bind a LONG value only for insert into a LONG column

這裏的問題是什麼?

+0

data.Content是什麼類型? –

+0

@M.Wiśnicki,data.Content是'string',例如:「

一些文本

」。如果字符串長度大於2000,則發生此錯誤,以防<2000插入工作。 – vaqifrv

+0

您使用的是哪個版本的ODAC? –

回答

3

這個錯誤不是很有幫助,它會很有可能導致關於oracle補丁等問題。實際上,這是Microsoft客戶端驅動程序的錯誤。驅動程序錯誤地推斷正在保存的字符串的列類型,並嘗試強制服務器將LONG值更新爲CLOB/NCLOB列類型。究其原因,不正確的行爲更是模糊的,只有當所有滿足以下條件時發生:

  1. 當我們設置IDbDataParameter.Value =(字符串,其長度爲:4000>長度> 2000)
  2. 當我們設置IDbDataParameter.DbType = DbType.String
  3. 當DB列的類型NCLOB/CLOB

的在這種情況下,你必須設置數據庫列類型設定參數的方法重載,因此:

executedQuery.SetParameter("CONTENT", data.Content, NHibernateUtil.StringClob); 
+0

感謝brooo :) – vaqifrv

相關問題