小编Jes*_*sse的帖子

实体框架和Oracle:无法插入VARCHAR2> 1,999个字符

我在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)

string oracle entity-framework varchar2 ora-00932

4
推荐指数
1
解决办法
4319
查看次数

AJAX POST请求仅在Safari 5中有效

我使用自己的自定义AJAX库(我对使用jQuery不感兴趣等),它在以下浏览器中完美运行:

  • Firefox 7
  • Chrome 14
  • IE 8
  • IE 8(兼容模式)

在前面提到的浏览器中使用我的自定义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)

safari ajax post

2
推荐指数
1
解决办法
3913
查看次数

标签 统计

ajax ×1

entity-framework ×1

ora-00932 ×1

oracle ×1

post ×1

safari ×1

string ×1

varchar2 ×1