Oracle Prc C学习 四 远程连接数据库

        说实话,有时候学习一样新东西的时候,最难的就是开始环境,连接,很多小问题,

对于一个有经验的人来说是简单的,但是对于一个新手,很可能就卡住了。我就在这个远程连接上卡住了。

我参考了一下这个:、

http://www.cnblogs.com/batman425/archive/2013/08/16/3261673.html

各种连不上,各种不知道应该用什么,现在还有些问题,不过已经可以连上了,我简单的介绍一下。

EXEC SQL CONNECT { :user IDENTIFIED BY :oldpswd | :usr_psw }
[[ AT { dbname | :host_variable }] USING :connect_string ]
[ {ALTER AUTHORIZATION :newpswd | IN { SYSDBA | SYSOPER } MODE} ] ;

在Pro C的手册里给的是这样的格式,但是我一直没有用AT连接上过,不知道问题出在哪。

首先来说我的是怎么连的

第一种,我是在虚拟机自己连自己的数据库,不过用的是IP,在Oracle下有这么一个配置文件

$ORACLE_HOME/network/admin/tnsname.ora

我里面的配置是这样的

ORCL =
  (DESCRIPTION =
    (ADDRESS = (PROTOCOL = TCP)(HOST = localhost)(PORT = 1521))
    (CONNECT_DATA =
      (SERVER = DEDICATED)
      (SERVICE_NAME = orcl)
    )
  )
ORCL1 =
  (DESCRIPTION =
    (ADDRESS = (PROTOCOL = TCP)(HOST = 192.168.32.200)(PORT = 1521))
    (CONNECT_DATA =
      (SERVER = DEDICATED)
      (SERVICE_NAME = orcl)
    )
  )

其中ORCL1这一个是我自己配置上去了,为了测试一下,而上面那个是安装Oracle后就有的。

其中在连接格式中那个USING后面要的字符串:connect_string,就是ORCL=后面的那一长串,并且那个括号是不能删掉的,一定要在括号中括住这一串才行,我开始的时候就是在删除那个ORCL = 的时候,把括号也弄没了,就一直连不上。

然后就是AT那个后面是db_name,我这里db_name就是ORCL,但是就是不行,所以,我后来参考了上面那个文章,没有

用这个AT,直接用了USING来连接的。下面就是我的测试程序。

1. 使用USING :db_name或者使用USING :db_name1,这样都是可以连接上的,虽然这两个字符串只是ORCL或者ORCL1

这样的字符串,但是这里应该是自动到那个tnsname.ora文件中读取了那个字符串了,所以这种就应该是依赖了安装的

客户端了

2. 使用USING :db_string 这个来连接也是可以连接上的,如果在程序中,这个字符串其实可以写到个文件中

然后从文件中读取出来。


3. 我用AT这个始终不行,希望会的人告诉我一下,万分感谢,如果以后解决了,我会回来补充上。



#include <stdio.h>
#include <string.h>
EXEC SQL BEGIN DECLARE SECTION;
EXEC SQL INCLUDE sqlca;
EXEC SQL INCLUDE oraca;
EXEC ORACLE OPTION(ORACA=YES);
#define USERNAME "scott"
#define PASSWD "xx"
char *username = USERNAME;
char *passwd = PASSWD;
VARCHAR dynstmt[80];
VARCHAR ename[10];
char *db_name = "ORCL";
char *db_name1 = "ORCL1";
char *db_string = "(DESCRIPTION = (ADDRESS = (PROTOCOL = TCP) (HOST = 192.168.32.200)(PORT = 1521)) (CONNECT_DATA = (SERVER = DEDICATED) (SERVICE_NAME = orcl)))";
EXEC SQL END DECLARE SECTION;
int main(int argc, char *argv[])
{
    EXEC SQL BEGIN DECLARE SECTION;
    int deptno = 10;
    EXEC SQL END DECLARE SECTION;
    oraca.orastxtf = ORASTFERR;
    EXEC SQL CONNECT :username IDENTIFIED BY :passwd
        //AT :db_name1 USING :db_string;
        //USING :db_name1;
        USING :db_string;
        //USING :db_name;
    strcpy(dynstmt.arr, "SELECT ename FROM EMP WHERE deptno = :v1");
    dynstmt.len = strlen(dynstmt.arr);
    EXEC SQL PREPARE select_sql FROM :dynstmt;
    EXEC SQL DECLARE select_cur CURSOR FOR select_sql;
    char temp[10];
    gets(temp);
    deptno = atoi(temp);
    EXEC SQL OPEN select_cur USING :deptno;
    EXEC SQL WHENEVER NOT FOUND DO break;
    while (1) {
        EXEC SQL FETCH select_cur INTO :ename;
        ename.arr[ename.len] = '\0';
        puts((char *)ename.arr);
    }
    printf("\nQuery returned %d row %s.\n\n", sqlca.sqlerrd[2],
            (sqlca.sqlerrd[2] == 1)?"":"s");
    EXEC SQL CLOSE select_cur;
    EXEC SQL COMMIT WORK RELEASE;
    return 0;
}


























你可能感兴趣的:(Oracle Prc C学习 四 远程连接数据库)