中国IT动力,最新最全的IT技术教程
最新100篇 | 推荐100篇 | 专题100篇 | 排行榜 | 搜索 | 在线API文档 | 网通镜像
首 页 | 程序开发 | 操作系统 | 软件应用 | 图形图象 | 网络应用 | 精文荟萃 | 教育认证 | 硬件维护 | 未整理篇 | 站长教程
ASP JS PHP工程 ASP.NET 网站建设 UML J2EESUN .NET VC VB VFP 网络维护 数据库 DB2 SQL2000 Oracle Mysql
服务器 Win2000 Office C DreamWeaver FireWorks Flash PhotoShop 上网宝典 CorelDraw 协议大全 网络安全 微软认证
硬件维护  CPU  主板  硬盘  内存  显卡  显示器  键盘鼠标  声卡音箱  打印机  机箱电源  BIOS  网卡  C#  Java  Delphi  vs.net2005
  当前位置:> 程序开发 > 数据库开发 > 数据库综合
OCI-22053: overflow error caused when retreiving valid data inserted using System.Data.OracleClient…
作者:未知 时间:2005-07-27 23:41 出处:CSDN 责编:chinaitpower
              摘要:OCI-22053: overflow error caused when retreiving valid data inserted using System.Data.OracleClient

See the following example of how to insert a valid numeric value (a Decimal) using the System.Data.OracleClient that cannot be retreived using the same System.Data.OracleClient.

It is apparently some sort of bit-wise translation error between the Oracle Client and the Microsoft Data Provider.  This test was run with VisualStudio2003 and Oracle 9i Client v9.2.0.4.0 connecting to Oracle Server 9.2.0.4.0, all running on Windows 2000 SP4.



using System;
using System.Data;
using System.Data.OracleClient;

namespace OdpTest
{
    /// <summary>
    /// The following command line application code illustrates haw a value that was inserted
    /// using the System.Data.OracleClient causes an overflow error when retreiving it using
    /// the same System.Data.OracleClient.
    /// </summary>
    public class OverflowTest
    {
        private const string CONNECT_STRING = "USER ID=foo;PASSWORD=bar;DATA SOURCE=foobar";

        [STAThread]
        private static void Main(string[] args)
        {
            using (OracleConnection conn = new OracleConnection(CONNECT_STRING))
            {
                conn.Open();
                try
                {
                    using (OracleCommand createCmd = conn.CreateCommand())
                    {
                        createCmd.CommandText = "create table overflow_test (num NUMBER)";
                        createCmd.ExecuteNonQuery();
                    }

                    using (OracleCommand insertCmd = conn.CreateCommand())
                    {
                        insertCmd.CommandText = "insert into overflow_test (num) values (:a)";
                        OracleParameter p = insertCmd.CreateParameter();
                        p.ParameterName = "a";
                        p.Value = 61M / 3M; // The magic value (there are more than just this one)
                        p.Direction = ParameterDirection.Input;
                        p.DbType = DbType.Decimal;
                        insertCmd.Parameters.Add(p);
                        Console.Error.WriteLine("Storing value: " + p.Value.ToString());
                        insertCmd.ExecuteNonQuery();
                    }

                    using (OracleCommand selectCmd = conn.CreateCommand())
                    {
                        selectCmd.CommandText = "select * from overflow_test";

                        DataTable overflowTest = new DataTable("overflow_test");
                        DataColumn num = new DataColumn("num", typeof (decimal));
                        overflowTest.Columns.Add(num);

                        OracleDataAdapter oda = new OracleDataAdapter(selectCmd);
                        oda.Fill(overflowTest);

                        int i = 0;
                        foreach (DataRow row in overflowTest.Rows)
                        {
                            Console.Error.Write("Row[{0}]:", i);
                            for (int j = 0; j < row.Table.Columns.Count; j++)
                            {
                                Console.Error.Write(" {0}", row[j]);
                            }
                            Console.Error.WriteLine();
                        }
                        i++;
                    }
                }
                finally
                {
                    using (OracleCommand deleteCmd = conn.CreateCommand())
                    {
                        deleteCmd.CommandText = "drop table overflow_test";
                        deleteCmd.ExecuteNonQuery();
                    }
                }
            }
        }
    }
}


关闭本页
 
首页 | 投资与合作 | 服务条款 | 隐私政策 | 收藏本站 | 设为首页 | 新用户注册 | 免责声明 | 使用帮助
Copyright ©2005-2008 chinaitpower.com All rights reserved. www.chinaitpower.com 版权所有