我收到了标题中提到的错误。
我正在使用36个字符ID。这个错误只在我的asp.net webform中的sqldatasource中抛出。
在Oracle sql developer
中执行更新时,这不是问题。
我该如何解决这个问题?
答案 0 :(得分:3)
Oracle支持最多30个字符的标识符,标识符长度36
大于该标识符。所以它的长度为30个字符。
请参阅此link
答案 1 :(得分:2)
如果从其他环境(如SQL Developer)成功执行DML(UPDATE tableName SET ...),那么您的asp.net代码必须以某种方式指定或构造表的名称或表的列名错误。如果在任何其他检查之前将Oracle中的任何一个解析为> 30个字符,Oracle将抛出此异常。
正如Srinivas指出的那样,最大长度为30,因此SQL Developer无法使用36个字符的标识符 - 你能在SQL Developer中发布“工作”的语句吗?
答案 2 :(得分:1)
SERVICE_ID NVARCHAR2(36)NOT NULL
您的SQL Developer是否配置为使用多字节字符集?疯狂的猜测,特别是我希望抛出ORA-12899: value too large for column
而不是ORA-00972。
答案 3 :(得分:1)
啊,我明白了 - 这不是36个字符长的列名,而是实际数据。很高兴我们清理了那个。
至于“为什么这是从ASP.NET SqlDataSource发生的”,我怀疑在某些地方有一个转换ASCII和Unicode之间的问题。 NVARCHAR2是Unicode,但我怀疑在Unicode世界中有些东西不能很好地播放。看看你的网络服务器,你的客户,你的数据库,你能想到的任何东西 - 我怀疑你会发现那里的某个地方有一个ASCII客户端在那里没有正确地谈论Unicode,并且正在混淆关于Unicode字符串的长度(32个Unicode字符占用64个字节(假设为UTF-16))。
祝你好运。