zoukankan      html  css  js  c++  java
  • Oracle ODBC

    项目中有一个需求从Oracle中取数据然后把数据插入到MS-SQL里呀,而且要求用ODBC方式来取数据

    在测试机器中引有System.Data.Odbc 命名空间,用类似的OdbcConnection, OdbcCommand,OdbcDataReader等之类的类操作Oracle,在测试机的时,代码是可以运行的,机器的环境是--操作系统:Windows server 2003,32位机器,Oracle:版本是 10g

    把代码烤到另一台开发环境--操作系统: Windows  Server 2008,64位机器,Oracle:版本是10g 客户端时运行的时候,在执行ExecuteReader方法时会报错误,其实执行OdbcDataAdapter.Fill(DataTable)时也会类似的错误的,其错误信息为:算术运算溢出!

    后来通过改变其读取的方式,再操作成功!不再用OdbConnmand之类的类,引入System.Data.OracleClient命名空间。

    在通过Odbc代码连接Oracle时,需建立一个Odbc dsn 连接

    具体通过:程序--->管理工具--->数据源:

    引进System.Data.OracleClient,用Oracle本身的类库,诸如OracleCommand,具体代码如下:

    View Code
    using System;
    using System.Collections.Generic;
    using System.Text;
    using System.Data.OracleClient;
    using System.Data;
    using System.Data.SqlClient;
    using System.Data.OleDb;
    using System.Data.Odbc;
    
    namespace FAOracletoSQLApp
    {
        class Program
        {
            static void Main(string[] args)
            {
    
                //string strOracleConn = "Data Source=(DESCRIPTION=(ADDRESS_LIST=(ADDRESS=(PROTOCOL=TCP)(HOST=192.168.0.120)
    
    (PORT=1521)))(CONNECT_DATA=(SERVICE_NAME=ORACLE)));User Id=gan;Password=gan;";
               
                string strOracleConn = "DSN=ORACLE;Uid=GAN;Pwd=GAN;";
    
                //string strSQLconn = "Data Source=192.168.0.121;Initial Catalog=WSS_Content;Persist Security Info=True;User 
    
    ID=sa;Password=sa";//测试
                string strSQLconn = "Provider=SQLOLEDB;Server=192.168.0.121;Database=WSS_Content;uid=sa;pwd=sa";//测试
    
     
                string strDeleteCommand = "delete from test ";//测试
                
                string strInsertCommand = "insert into test(UniqueID,PMail) values('{0}','{1}')";//测试
               
     
                string strOracleSelectCommand = "select EMPLOYEE_CODE as UniqueID,CONTACT_ADDRESS as PMail from v_k2";//测试
                
                
    
                SqlConnection sqlConn = null;
                SqlTransaction myTrans = null;
                OracleDataReader dr = null;
                SqlCommand sqlCmd = null;
                //OdbcDataAdapter da = null;
                long rownum=0;
                try
                {
                    DataTable dt = new DataTable();
                    //dt.Columns.Add(new DataColumn("UniqueID",typeof(string)));
                    //dt.Columns.Add(new DataColumn("PMail",typeof(string)));
    
                    sqlConn = new SqlConnection(strSQLconn);
    
                    Console.WriteLine("Open the SQL Connection.......");
                    sqlConn.Open();
    
                    Console.WriteLine("Begin SQL Transaction.......");
                    myTrans = sqlConn.BeginTransaction();
    
                    Console.WriteLine("New SQL Command.......");
                    sqlCmd = new SqlCommand();
                    sqlCmd.Connection = sqlConn;
                    sqlCmd.Transaction = myTrans;
    
                    Console.WriteLine("Delete Data.......");
                    sqlCmd.CommandText = strDeleteCommand;
                    sqlCmd.ExecuteNonQuery();//执行删除命令
    
                    Console.WriteLine("New Oracle ODBC Connection......");
                    using (OracleConnection conn = new OracleConnection(strOracleConn))
                    {
                        Console.WriteLine("Open the Oracle Connection.......");
                        conn.Open();
    
                        Console.WriteLine("Create Oracle Command.........");
                        OracleCommand cmd = new OracleCommand(strOracleSelectCommand, conn);
                        Console.WriteLine(cmd.CommandText);
                        //cmd.CommandType = System.Data.CommandType.Text;
    
                        Console.WriteLine("Create Oracle DataReader");
                        dr = cmd.ExecuteReader();
                        //Console.WriteLine("Create ODBC DataAdapter....");
                        //da = new OdbcDataAdapter(cmd);
                        //Console.WriteLine("Fill Data ....");
                        //da.Fill(dt);
                        //if (da!=null)
                        //{
                        //    foreach (DataRow dtRow in dt.Rows)
                        //    {
                        //        Console.WriteLine(string.Format("Unique ID:{0},PMail:{1}",ConvertObj(dr
    
    ["UniqueID"]),ConvertObj(dr["PMail"])));
                        //    }
                        //}
                        Console.WriteLine("Insert Data Begin......");
                        while (dr.Read())
                        {
                            rownum += 1;
                            //Console.Write("Rwonum"+rownum);
                            sqlCmd.CommandText = string.Format(strInsertCommand, ConvertObj(dr["UniqueID"]), ConvertObj(dr
    
    ["PMail"]));
                            sqlCmd.ExecuteNonQuery();//执行插入数据语句
                            if (rownum % 10000 == 0)
                            {
                                Console.WriteLine("Commit Data " + rownum + "....");
                                myTrans.Commit();
                                myTrans = sqlConn.BeginTransaction();
                                sqlCmd.Transaction = myTrans;
                            }
                        }
                        if(rownum>0&&rownum%10000!=0)
                        {
                           myTrans.Commit();
                        }
                        Console.WriteLine("Dome");
                    }
    
                }
                catch (Exception ex)
                {
                    Console.WriteLine("Eror:" + ex.Message);
                    Console.WriteLine("Trace:"+ex.StackTrace);
                    if (myTrans!=null)
                    {
                        Console.WriteLine("Rolling Back.....");
                        myTrans.Rollback();
                        Console.WriteLine("Rolling Back  Dome.....");
    
                    }
    
                }
                finally
                {
                    if (dr!=null)
                    {
                        dr.Close();
                        dr = null;
                    }
                    if (myTrans!=null)
                    {
                        myTrans.Dispose();
                    }
                    if (sqlConn!=null)
                    {
                        sqlConn.Close();
                        sqlConn = null;
                    }
                }
                Console.ReadKey();
                
            }
    
            public static string ConvertObj(object obj)
            {
                return obj == null ? string.Empty : obj.ToString();
            }
        }
    }

     Not:System.Data.OracleClient需安装Oracle客户端

  • 相关阅读:
    AngularJs用户登录的一些处理
    百度地图api-查询周边
    Git常用命令整理
    AngularJs控制器运行前方法,操控导航栏隐藏
    AngularJs中,如何在数据加载完成后,执行Js脚本
    ZZ:Linux的chattr与lsattr命令详解
    ZZ:实战 SSH 端口转发
    Python 删除 恢复 Redshift
    [原创]Python 命令 恢复 删除 RDS
    AWS CLI 命令学习 之 bat 控制EC2 启停
  • 原文地址:https://www.cnblogs.com/gzh4455/p/2535097.html
Copyright © 2011-2022 走看看