我在互联网上搜索过这个问题,但我的问题不同了。
我正在使用Fluent NHibernate
并尝试使用sql查询插入数据:
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)中, CONTENT 的数据类型为NCLOB
。当尝试插入数据时,我收到此错误:
ORA-01461:只能插入LONG值才能插入LONG列
这里有什么问题?
答案 0 :(得分:4)
这个错误不是很有用,而且它很可能导致有关oracle补丁等的主题。实际上,这是microsoft oracle客户端驱动程序的错误。驱动程序错误地推断了正在保存的字符串的列类型,并尝试强制服务器将LONG值更新为CLOB / NCLOB列类型。行为不正确的原因更加模糊,只有在满足以下所有条件时才会发生:
在这种情况下,您必须在set参数方法重载中设置数据库列类型,所以:
executedQuery.SetParameter("CONTENT", data.Content, NHibernateUtil.StringClob);