我写了一个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分送上。谢谢
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分送上。谢谢
解决方案 »
- iis虚拟目录问题
- 求救:新闻首页的设计方法!!!!!!!!!!!!!!!!!!!!!!
- 怎么去掉money数据类型后面的零
- 看看!
- asp.net到底有没有高手?请帮忙
- 只能显示最新一条记录,前辈帮忙找一下错,谢谢![附源码]在线等
- ASP.NET能做到真正的页面与操作分离吗?
- 如何写后台的提示框?
- 编程初学者 MVC4+EF5+Localdb仿照别人的模板做系统,IFormsAuthenticationService显示没有定义
- 有关.NET 2005 Profile提供程序
- 高分请教:要显示一个很大的图形(有十多个电脑屏幕那么大),如何使屏幕先显示一部分然后根据鼠标来控制显示其他的部分?
- 求助,谁有c#开发水晶报表的例子?
你让datagrid 绑定dataset中的哪个table?
建议你用强类型数据集,这样可以减少很多错误。
你可以试试在原来的表上, 而不是试图上测试一下。
DataGrid1.Datasource=ds.Tables["test"].DefaultView;
DataGrid1.DataBind();
或者是驱动的问题?先下个最新的OracleClient
或者换个其他的驱动 比如ODBC
数据库版本不低于9I
首先我说明一下我的开发环境
操作系统: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。
这时,我想到如果不是类型转换,问题可能出在数据读取上,这时我注意到这个Precision的字段的类型是Number(注意这个定义,意味由Oracle决定位数),所以,我又作了个测试,在表中追加一个字段test1是Number(18,10),明确位数,然后存入,0.00001,再利用相同方法进行提取,发现可以正常提取。
目前由于我的水平有限只能查到这里,我猜测的更深的原因可能有以下几个
1。VB.net的数据连接(odbc)存在问题,可以打补丁
2。在Oracle或者其他某个地方存在设定,可以指定Number没有位数的情况如何处理(我现在自己这个问题,通过其他方法解决,不过是个治标不治本的方法,所以就不写出来),但是问题出在共通这里,以后肯定还有问题。希望大家帮忙查一下