我在Oracle表中创建了一个4,000个字符的VARCHAR2字段.我使用Visual Studio 2010,.NET Framework 4和ODAC 11.2第4版的 LINQ to Entities以及Visual Studio的Oracle Developer Tools(11.2.0.3.0)将字符串值插入到字段中.当我尝试插入大于1,999个字符的字符串值时,我得到以下内部异常:
Oracle.DataAccess.Client.OracleException
ORA-00932:不一致的数据类型:预期 - 得到NCLOB
但是,我可以使用SQL Developer在字段中插入4,000个字符的字符串值而不会出现任何问题.
有一个已知的ODAC错误(源#2),其中保存到XMLTYPE字段时有2,000个字符限制,但我没有保存到XMLTYPE字段.我在我的GAC中有Oracle.DataAccess 2.112.3.0,我考虑更新到上述Oracle软件的第5版(11.2.0.3.20),但是"Oracle Developer Tools for Visual Studio"是唯一一个似乎是从第4版更新,我相信"Oracle Data Provider for .NET 4"是需要更新的组件.在我的.NET项目中,System.Data.Entity和System.Data.OracleClient都是运行时版本4.0.30319.
无论如何,我只是想知道是否有其他人遇到过这个错误,如果有的话,如果找到了任何解决方案 - 除了上面链接的Oracle论坛帖子中的那个提议使用存储过程作为解决方法.谷歌告诉我,只有在使用XMLTYPE字段时,人们才会遇到此错误,但我不能成为唯一一个在使用VARCHAR2字段时遇到此错误的人,可以吗?
(FWIW,我也希望在上面链接的Oracle论坛帖子中收到用户"997340"的帖子回复.如果我收到有用的回复,我一定会在这方面分享知识.)
编辑:如果有帮助,下面是我的代码中失败的两个块.我在对第一个进行故障排除时创建了第二个块,只是为了查看是否存在任何差异.检查字符串值是否已插入("if"语句)时,以及实际插入字符串值("AddObject"语句)时,我得到异常.
1:
if (!(from q in db.MSG_LOG_MESSAGE where q.MESSAGE == msg select q.MESSAGE).Any())
{
db.MSG_LOG_MESSAGE.AddObject(new MSG_LOG_MESSAGE { MESSAGE = msg });
db.SaveChanges();
}
Run Code Online (Sandbox Code Playgroud)
2:
if (!db.MSG_LOG_MESSAGE.Any(q => q.MESSAGE == msg))
{
db.MSG_LOG_MESSAGE.AddObject(new MSG_LOG_MESSAGE { MESSAGE = msg }); …Run Code Online (Sandbox Code Playgroud) 我使用自己的自定义AJAX库(我对使用jQuery不感兴趣等),它在以下浏览器中完美运行:
在前面提到的浏览器中使用我的自定义AJAX库,我可以使用GET和/或POST方法以任何顺序制作任意数量的AJAX请求,并且它们都可以完美地工作.由于为每个请求创建了一个新的AJAX对象(参见下面的代码),我甚至可以同时拥有多个AJAX请求进程并获得成功.
但是,在Safari 5中,如果AJAX POST请求是绝对的第一个执行AJAX请求,则它只将POST数据传递给服务器.即使我连续两次执行完全相同的AJAX POST请求,POST数据也只在第一次请求期间传递给服务器.这是我的自定义AJAX库中的JavaScript:
if (!Array.indexOf)
{
Array.prototype.indexOf = function(obj) { for (var i = 0; i < this.length; i++) { if (this[i] == obj) { return i; } } return -1; };
}
function ajaxObject()
{
if (window.ActiveXObject)
{
var activexmodes = ["Msxml2.XMLHTTP", "Microsoft.XMLHTTP"];
for (var i = 0; i < activexmodes.length; i++)
{
try
{
return new ActiveXObject(activexmodes[i]);
}
catch (e)
{
}
}
}
else if (window.XMLHttpRequest) …Run Code Online (Sandbox Code Playgroud)