.NET使用ORACLE,ORA-01008: 并非所有变量都已关联

ucanmailme 2010-04-28 11:56:21

.NET连接ORACLE,执行SQL命令时,报这个错误。

同样的代码,在MYSQL是正常的。

郁闷。弄了N久,都没找到解决方法。
...全文
266 6 打赏 收藏 转发到动态 举报
写回复
用AI写文章
6 条回复
切换为时间正序
请发表友善的回复…
发表回复
hujinn 2010-10-22
  • 打赏
  • 举报
回复
我碰到的是"provider='OraOleDb.Oracle';" 改成这样就好了。。。。
lester19872007 2010-04-29
  • 打赏
  • 举报
回复
这楼主给分部地道!!!
ucanmailme 2010-04-29
  • 打赏
  • 举报
回复
试了一把。TMD,果然是NULL的问题。谢谢各位了。
lester19872007 2010-04-29
  • 打赏
  • 举报
回复
1、System.Data.OracleClient 需要 Oracle 客户端软件8.1.7 或更高版本

1)先在未安装Oracle客户端的电脑上安装Oracle的精简客户端

2)然后安装Microsoft Oracle .NET Data Provider

好了,现在可以使用System.Data.OracleClient链接了。



3、ora-01008 并非所有变量都已关联

使用Oracle数据库,服务器处请填写服务器的data source name,在oracle安装路径下tnsnames.ora文件中设置,加上:XX=
(DESCRIPTION =
(ADDRESS_LIST =
(ADDRESS = (PROTOCOL = TCP)(HOST = 10.10.11.18)(PORT = 1521))
)
(CONNECT_DATA =
(SERVICE_NAME = oa)
)
)

最后链接字符串可以为:Data Source={0}; user id={1};password={2}



3、ora-01008 并非所有变量都已关联

其实就是null值的问题,在参数最后,加上此语句,给所有的nul值改为DBNull.Value就好了,如下:

for (int i = 0; i < parameters.Length; i++)
{
if (parameters[i].Value == null)
{
parameters[i].Value = DBNull.Value;
}
}
zlz_212 2010-04-28
  • 打赏
  • 举报
回复
估计很可能是写代码人的疏忽

看来代码才知道问题...
xray2005 2010-04-28
  • 打赏
  • 举报
回复
1. OracleClient方式,是微软专门针对Oracle数据库开发的,仅在 .NET Framework 1.1 版中受支持。据说速度快、性能好,是推荐使用的方式。但根据我的经验,当Oracle数据库服务器端采用英文字符集比如 US7ASCII 时,客户端不管字符集如何设置,读出的中文都是乱码;若服务器端用中文字符集比如 ZHS16GBK ,则无乱码问题。
  引用类库:System.Data.OracleClient.dll。
  命名空间:System.Data.OracleClient。
  常用类:OracleConnection、OracleCommand、OracleDataAdapter、OracleTransaction、OracleDataReader等。
  典型连接字符串:“data source=oratest;user id=scott;password=tiger”(注意:可不指定 provider 驱动)。

  2. OleDb方式,微软和Oracle公司各自提供了OleDb的驱动程序,使用方法的差别很少。不管Oracle服务器端用何字符集,读写中文均无乱码问题。
  相同之处
  命名空间:System.Data.OleDb。
  常用类:OleDbConnection、OleDbCommand、OleDbDataAdapter、OleDbTransaction、OleDbDataReader等。
  不同之处
  引用类库:微软的只需要System.Data.dll;若用Oracle的驱动,虽然也只要引入System.Data.dll,但前提是首先安装Oracle针对.Net的数据访问组件。
  连接字符串:与OracleClient方式相比,要添加一个provider,微软为“provider=MSDAORA.1;”,Oracle为“provider='OraOleDb.Oracle';”。



上面是我找到的资料。

不过。依据个人经验,最简单的方式是,在你SQL参数中,为NULL的字段赋值为DBNull.Value,而不是NULL。因为Oracle默认情况不能将NULL保存到可为空的字段中。

17,741

社区成员

发帖
与我相关
我的任务
社区描述
.NET技术 .NET Framework
社区管理员
  • .NET Framework社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧