我写了一个Oracle试图,从两个表里得到数据。其中表里面有一条记录,试图里也有一条记录。我用的.net的OracleClient连接数据库,连接没有问题,通过语句“select * 试图名” 在Sql plus 里面能找到那条数据,可是通过.net的连接以下代码
OracleConnection conn=new OracleConnection("连接");
OracleDataAdapter da=new OracleDataAdapter("select * from 试图名",conn);
DataSet ds=new DataSet;
da.Fill(ds,"test");
DataGrid1.Datasource=ds;
DataGrid1.DataBind();
这样没有得到那条记录,怪不怪在这里,这个试图里面有很多字段,大部分是Oracle里面的Number类型,字段a的值比如说是4562.3453435字段b的值是2345623456 可是有个字段c的值是686,有个字段d是时间型,他的值是2005-2-2 我通过上面的代码用语句“select c from 试图名”,或者“select d from 试图名”这两个sql语句都是能找到值的,用"select a或者b from 试图名"却得不到这两个字段的值。用select *就更不可能了。数据确实存在,在Oracle里面也能找到,同样的语句在.net里就找不到了。请问这是什么原因,不知道交代的清不清楚,不清楚请提问。解决者另开100分送上。谢谢

解决方案 »

  1.   

    你出的问题却是怪,应该没有道理是如此,是不是你测试的地方不对?另外我不觉得你上边的代码能行:你的DataGrid1.Datasource=ds;DataGrid1.DataBind(); 是不对的
    你让datagrid 绑定dataset中的哪个table?
    建议你用强类型数据集,这样可以减少很多错误。
    你可以试试在原来的表上, 而不是试图上测试一下。
      

  2.   

    da.Fill(ds,"test");
    DataGrid1.Datasource=ds.Tables["test"].DefaultView;
    DataGrid1.DataBind();
      

  3.   

    是不是视图需要重建?
    或者是驱动的问题?先下个最新的OracleClient
    或者换个其他的驱动 比如ODBC
      

  4.   

    以前遇到过在Oracle中执行无问题,但通过程序走存在问题的情况换ODBC的驱动看看
      

  5.   

    如果使用OracleClient
    数据库版本不低于9I
      

  6.   

    Sql plus登录的用户名和.net中连接字符串的用户名是否一样?select * from 表空间.视图名
      

  7.   

    有可能是你.NET中访问数据库的用户对视图的权限不够。
      

  8.   

    DataGrid1.Datasource=ds.Tables["test"].
      

  9.   

    谢谢大家,问题还是没有解决,我.net开发也不短了,不是小问题我不会提的,我什么方法都试过了。我把提取的值做了一下处理,散分吧
      

  10.   

    我是个.net的新手,但是我今天碰到和你类似的问题。我看你的问题可能在于那些oracle的number型的数据。我目前开发的系统也存在相同的问题。
    首先我说明一下我的开发环境
    操作系统:WinXp中文版(但是语言设成日文)。数据库:Oracle 9.2 。VB.Net日语版(都是正版)
    另外开发的系统有一套完整基础类库,是从VB 6.0升级过来的。
    下面我说一下我的问题:在我的oracle的表中有个数值型字段Precision用来存放精度,如0.001,0.0001等。保存没有问题,但是从数据库读取时,却发生非常奇怪的问题。0.0001可以显示,但是0.00001就显示存在问题。我跟踪程序发现一个奇怪的现象,0.00001在从数据取出后竟然变成了0.000009999999999991,六位小数也类似,就是从5位小数开始。
    补充说明一下,我们类库的共通数据提取函数是用odbc连接的。取出的值是赋给一个数组(object型),以前,在vb6.0时是赋给variant数组,我测试了一下vb6.0是正确的。所以我首先想到一个原因是VB.NET的类型转换问题。但是我还是抱有怀疑,因为我直接转换不存在问题DIM o_Test as Object = 0.00001。
      

  11.   

    继续-
    这时,我想到如果不是类型转换,问题可能出在数据读取上,这时我注意到这个Precision的字段的类型是Number(注意这个定义,意味由Oracle决定位数),所以,我又作了个测试,在表中追加一个字段test1是Number(18,10),明确位数,然后存入,0.00001,再利用相同方法进行提取,发现可以正常提取。
    目前由于我的水平有限只能查到这里,我猜测的更深的原因可能有以下几个
    1。VB.net的数据连接(odbc)存在问题,可以打补丁
    2。在Oracle或者其他某个地方存在设定,可以指定Number没有位数的情况如何处理(我现在自己这个问题,通过其他方法解决,不过是个治标不治本的方法,所以就不写出来),但是问题出在共通这里,以后肯定还有问题。希望大家帮忙查一下