.NET使用ORACLE,ORA-01008: 并非所有变量都已关联,该如何处理
发布时间:2011-06-23 14:43:19 文章来源:www.iduyao.cn 采编人员:星星草
.NET使用ORACLE,ORA-01008: 并非所有变量都已关联
.NET连接ORACLE,执行SQL命令时,报这个错误。
同样的代码,在MYSQL是正常的。
郁闷。弄了N久,都没找到解决方法。
------解决方案--------------------
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保存到可为空的字段中。
------解决方案--------------------
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;
}
}
友情提示:
信息收集于互联网,如果您发现错误或造成侵权,请及时通知本站更正或删除,具体联系方式见页面底部联系我们,谢谢。
其他相似内容:
-
c# 类库打包成COM类型库时在vs命令行怎么写
类库打包成COM类型库(在vs命令行中怎么写啊)
路径和格式怎么写?
假如路径是:F:\netTest...
-
int
c#里的int是多少位???????
------解决方案--------------------
int 的值用 31 位来表示,第三十二位为符号位。,其范围从负 2,147,483...
-
求各位大侠帮个忙
做的是一个项目经理评分系统
如何把第一个窗体点击的人的信息显示到第二个窗体里面
------解决方案---------...
-
【asp.net三层怎样入手学习开发?】
我现在搞asp.net都是面向过程的.没有分层
请问怎样做到 mvc ??真正的面向对象的开发??
请问...
-
.net framework 2.0 service pack 1 无法卸载,怎么办
总是提示说安装是发生严重错误,并且说it will affect other application that...
-
Message.Show()的窗体美化
每次弹出的窗口都是那么的单调有没有什么方法能换一下弹出窗体的颜色或者是插一张图片
------解决方...
-
安装vs2010出错,求老师解答!!!
rt
安装vs2010是出错
C:\Users\Administrator\AppData\Local\Temp\SIT32027.tmp\deffactory...
-
怎么做一个转盘出来啊,请教各位大虾
在ASP.NET的页面中怎么弄一个转盘出来啊?
------解决方案--------------------
什么转盘
---...
-
jquery each遍历赋值不上呢
<ul id="myul">
<li><a id="2258">第一个</a></li>
<li><a id="2258">第二个</a></li>
<li>...
-
C#发布问题
这个是怎么回事啊
我在那个debug下面有那个DevExpress.XtraLayout.v9.1.dll这个了 为什么还是报这个错
------解决...