日期:2014-05-17  浏览次数:20813 次

timesten 的TNS name
小弟,一个新手,写了一个C语言程序,打算和timesten连接,我用的是VC6.0编译等,用timesten自带的proc进行的预编译,我的C程序和timesten在同一台电脑上运行,当我不用TNS name,只用用户名密码连接登陆时,它显示“protocol adapter error“,当我想再加上TNS name(我在程序中用网络服务名,但我不知道我的网络服务名是什么,可能没建立)时,我却不知道自己程序的 TNS name 是什么,应该如何建立。难道在同一台机子上也必须要用TNS name 吗?当我把我的网络服务名随便写个时,它提示 “ORA - 12154:TNS :could not resolve the connect identifier specified”,当然,我的用户名和密码是没问题的,因为不用C程序登陆时,直接在数据库上用用户名和密码是能成功登陆的。另外,我的电脑上同时装了timesten server 和 client.望知道的大侠给予指导,小弟着急,谢谢啦。
下面是小弟的简单程序,仅是连接数据库。
我认为TNS name就是网络服务名,不知道对不对,更不知道在timesten如何建立TNS name。
#include <stdio.h>
#include <string.h>
#include <stdlib.h>

#include <sqlca.h>

void connect();

EXEC SQL BEGIN DECLARE SECTION; 
char username[20];  
char password[20]; 
char server[20];
int HSno=1;
int Hcno=1;
float HSp=1;
int HSt=1;
EXEC SQL END DECLARE SECTION;

void main()
{

connect();

printf(" 数据库操作结束!");
}

void connect()
{
 
 printf("请输入用户名:");
 gets(username);
 printf(" 请输入密码:");
 gets(password);
printf(" 网络服务名:");
 gets(server);

/*连接到数据库;*/
EXEC SQL CONNECT :username IDENTIFIED BY :password using :server;
 
if(sqlca.sqlcode==0)
  printf("连接成功!");
else
  printf("%.*s\n",sqlca.sqlerrm.sqlerrml,sqlca.sqlerrm.sqlerrmc);
   
}



------解决方案--------------------
或者找到tnsnames.ora文件,添加如下信息:
/*输入服务名(任意的)*/=
(DESCRIPTION =
(ADDRESS_LIST =
(ADDRESS = (PROTOCOL = TCP)(HOST = /*远程数据库ip或主机名*/)(PORT = 1521))
)
(CONNECT_DATA =
(SERVICE_NAME = /*远程数据库名称*/)
)
)