ODBC连接Oracle 9i, C#连接字符串收藏
1.首先装好你的Oracle 9i。然后再控制面板->管理工具->数据源(odbc)2.双击数据源(odbc)->选择系统DSN->添加->Microsoft ODBC for Oracle , 数据源名称:chicoDB (这个是用来在C#中写连接字符串用的), 服务器名称:chicoDB (这个是你安装Oracle的时候建立的sid名称即数据库名)。然后确定3.打开你的pl/sql 建立几个表(新建->表)..我使用的system帐号登陆权限为SYSDBA,数据库为chicoDB.(不过使用PL/SQL好像不用用户名密码也可以登陆)比如我建立的是client 表。我的所有者为system.在列中输入:CLIENTID (nvarchar(11)),ID(nvarchar(11)),NAME(nvarchar(50)),SEX(char(1)),TEL(nvarchar(11)),INCOME(NUMBERIC),JOB(nvarchar(50))。4.建立一个c#工程项目,连接字符串这样写:const string connstr = "DSN=chicoDB;UID=System;Pwd=zaqwsx;";前面要using System.Data.Odbc; 想建立连接的话就写:OdbcConnection cn = new OdbcConnection(connstr);

解决方案 »

  1.   


    const string connstr = "DSN=chicoDB;UID=System;Pwd=zaqwsx;";   
    OdbcConnection cn= new OdbcConnection(connstr);   
    cn.Open();   
    // 这里的基本上都是string类型,出了income是double   
    String sqlInsert = "insert into System.client values('" + clientId + "','" + id + "','" + name + "',to_char('" + sex + "'),'" + tel + "'," + income + ",'" + job + "')";   
    OdbcCommand oc = new OdbcCommand(slqInsert, cn);   
    oc.CommandType = System.Data.CommandType.Text;   
    int rows =oc.ExecuteNonQuery();   
    System.Console.WriteLine(rows);// 打印被影响的行数   
    String sql = "select * from system.client";   
    oc.CommandText = sql;   
    OdbcDataReader dbreader= oc.ExecuteReader();   
    //这个Reader好像不能脱机操作..(具体没有查)   
    object[] o = null;   
    if (dbreader.HasRows)   
    {   
        o = new object[dbreader.FieldCount];   
        dbreader.GetValues(o);   
    }   
    // 这里你自己写个打印语句将查询出来的记录打印出来吧..   
    dbreader.Close();   
    oc.Dispose();   
    cn.Close();  
    const string connstr = "DSN=chicoDB;UID=System;Pwd=zaqwsx;";
    OdbcConnection cn= new OdbcConnection(connstr);
    cn.Open();
    // 这里的基本上都是string类型,出了income是double
    String sqlInsert = "insert into System.client values('" + clientId + "','" + id + "','" + name + "',to_char('" + sex + "'),'" + tel + "'," + income + ",'" + job + "')";
    OdbcCommand oc = new OdbcCommand(slqInsert, cn);
    oc.CommandType = System.Data.CommandType.Text;
    int rows =oc.ExecuteNonQuery();
    System.Console.WriteLine(rows);// 打印被影响的行数
    String sql = "select * from system.client";
    oc.CommandText = sql;
    OdbcDataReader dbreader= oc.ExecuteReader();
    //这个Reader好像不能脱机操作..(具体没有查)
    object[] o = null;
    if (dbreader.HasRows)
    {
        o = new object[dbreader.FieldCount];
        dbreader.GetValues(o);
    }
    // 这里你自己写个打印语句将查询出来的记录打印出来吧..
    dbreader.Close();
    oc.Dispose();
    cn.Close(); 
      

  2.   

    多谢jingshuaizh的用心帮助,代码很详细,
    const string connstr = "DSN=chicoDB;UID=System;Pwd=zaqwsx;";
    这样写,好像不能在客户端程序中访问到这个“服务器”的dsn。
      

  3.   

    我该怎样指向这个“服务器”呢?
    我在CodeProject上看到这样一个连接串:
    ("Driver={Microsoft ODBC for Oracle};Server=OracleServer.world;"
            "Uid=MyUsername;Pwd=MyPassword;");
    现在还不太明白这里Server是不是就是指向远程ODBC,刚才试了试,报错了,未能找到数据源。
      

  4.   

    楼主的想法就有问题。ODBC只是访问数据库的方式,通过ODBC可以访问不同的数据,假设后台数据库由Oracle变成了SQL Server,通过ODBC访问数据库就不需要修改客户端程序。而楼主的意思是客户端不直接访问数据库,由ODBC这台机器访问数据库。所以楼主的程序需要在ODBC这台机器上部署一台中间服务层,用中间服务层访问数据库。客户端访问中间服务层。