首先,这类问题应该问到编程区去,这是软件喔
创新互联服务项目包括汕头网站建设、汕头网站制作、汕头网页制作以及汕头网络营销策划等。多年来,我们专注于互联网行业,利用自身积累的技术优势、行业经验、深度合作伙伴关系等,向广大中小型企业、政府机构等提供互联网行业的解决方案,汕头网站推广取得了明显的社会效益与经济效益。目前,我们服务的客户以成都为中心已经辐射到汕头省份的部分城市,未来相信会继续扩大服务区域并继续获得客户的支持与信任!
########insert.pc############
#include stdio.h
EXEC SQL INCLUDE SQLCA;
void insert (char password_[6],char id_[20],int balance_)
{
EXEC SQL BEGIN DECLARE SECTION;
VARCHAR user[20],pass[20],tnsname[20];
char password[6];
char id[20];
int balance;
EXEC SQL END DECLARE SECTION;
strcpy(user.arr,"scott");
user.len=(unsigned short)strlen((char *)user.arr);
strcpy(pass.arr,"tiger");
pass.len=(unsigned short)strlen((char *)pass.arr);
strcpy(tnsname.arr,"demo1");
tnsname.len=(unsigned short)strlen((char *)tnsname.arr);
strcpy(id,id_);
strcpy(password,password_);
balance = balance_;
EXEC SQL CONNECT :user IDENTIFIED BY :pass USING :tnsname;
EXEC SQL insert into bank_bingo values (:id , :password , :balance);
EXEC SQL COMMIT WORK;
EXEC SQL commit work release;
}
#################main.c####################
#include stdio.h
extern void insert (char password_[6],char id_[20],int balance_);
int main(int argc , char ** argv){
char id [20] = "10001";
char password[6] = "123";
int balance = 10000;
insert(password , id , balance);
return 0;
}
############################################
连接代码如下:
int main()
{
EXEC SQL BEGIN DECLARE SECTION;
char oc_passwd[101]; /*数据库密码*/
char oc_userid[101]; /*数据库用户名*/
char oc_dbname[101]; /*数据库名*/
char oc_coad[101];
EXEC SQL END DECLARE SECTION;
memset(oc_passwd, 0x00, sizeof(oc_passwd));
memset(oc_userid, 0x00, sizeof(oc_userid));
memset(oc_dbname, 0x00, sizeof(oc_dbname));
/*取数据库用户名*/
strcpy(oc_userid, "userid");
/*取数据库用户密码*/
strcpy(oc_passwd, "passwd") ;
/*取数据库名*/
strcpy(oc_dbname, "dbname");
EXEC SQL CONNECT :oc_userid
IDENTIFIED BY :oc_passwd
USING :oc_dbname;
if (sqlca.sqlcode != 0)
{
printf("用户名[%s]密码[%s]数据库[%s]\n", oc_userid, oc_passwd, oc_dbname);
printf("连接数据库失败,sqlcode=%d\n", sqlca.sqlcode);
return -1;
}
/*读table取coad字段*/
memset(oc_coad, 0x00, sizeof(oc_coad));
EXEC SQL SELECT coad
INTO :oc_coad
FROM table
WHERE 1=1;
if (sqlca.sqlcode == NORECORD)
{
printf("查询无记录\n");
return -1;
}
else if (sqlca.sqlcode != 0)
{
printf("查询失败,sqlcode=%d\n", sqlca.sqlcode);
return -1;
}
return 0;
}
第一步,前往oracle官方网站下载oracle19c(这里是windows版本)并且下载好PLSQLdeveloper客户端以及oracle提供的连接工具instantclient。
2、安装oracle19c把安装包存放在指定的目录下放好,解压后点击进去安装。
3、中间过程中会需要设置基目录和数据库文件位置自行指定位置,并且设置好口令(此口令是sys超级管理员的密码),点击下一步。
4、安装完成后,在命令窗口下执行services.msc查看oracle相关服务是否正常开启正常开启之后,可以进行下一步的安装PLSQLdeveloper,点击下一步即可。
5、打开plsqldeveloper,点击cancel,随后打开plsqldevelope的主界面,点击configure,点击最左边的preferences。
6、之后找到instantclient的目录以及instantclient目录下的oci.dll文件路径,将其设置在下面图片的对应位置上。
6、设置好关闭,点击登录session菜单下的logon。
2=7、使用管理员登录账号为sys,密码为安装时设置的口令,database设置ORCL,点击登录就连接上oracle了。
8、编辑tnsnames.ora,替换和增加。
9、保存后重新启动监听,lsnrctlstop,lsnrctlstart打开命令行,输入lsnrctlstop,停止后再输入lsnrctlstart重新连接oracle。
有三种办法:
1、用ODBC,安装ODBC驱动,使用微软提供的ODBC的API访问数据库;
2、用ORACLE提供的OCI API调用方式;
3、用ORACLE提供的PRO C方式。
如果你熟悉SQL,建议用方式3,如果熟悉ODBC,建议用方式1,方式2比较麻烦些。
以下代码是我用PRO C编写的,供参考:
int ProcConnect(char * sDatabaseName,char * sUserName, char * sPassword)
{
EXEC SQL CONNECT :sUserName IDENTIFIED BY :sPassword USING :sDatabaseName;
if(DBError("Connect Database failed.")) return FALSE;
else return TRUE;
}
/*===========================================================================*/
void ProcCommit()
{
EXEC SQL COMMIT;
}
/*===========================================================================*/
void ProcCommitRelease()
{
EXEC SQL COMMIT RELEASE;
}
/*===========================================================================*/
void ProcRollback()
{
EXEC SQL ROLLBACK;
}
/*===========================================================================*/
void ProcRollbackRelease()
{
EXEC SQL ROLLBACK RELEASE;
}
/*===========================================================================*/
int DBError(char * sMsg)
{
char sErrMsg[1024];
int nRetCode;
size_t szBuf_len, szMsg_len;
if (sqlca.sqlcode = 0) return FALSE;
szBuf_len = sizeof(sErrMsg);
sqlglm(sErrMsg, szBuf_len, szMsg_len);
sErrMsg[szMsg_len] = 0;
sprintf(sDBErrorBuff,"\r\nSQL DBError point:%s", sMsg);
sprintf(sDBErrorBuff+strlen(sDBErrorBuff),"\r\nsqlcode = %d,%s\r\n", sqlca.sqlcode, rTrim(sErrMsg));
if(OraDBDisconnected)
{
printf("The DBConnection was broken!\r\n");
exit(-1);
}
else nRetCode = TRUE;
printf("%s\r\n",sDBErrorBuff);
return nRetCode;
}
连接数据库的方法有很多种。C语言最常用的是ODBC,最好你自己参考下网络上关于ODBC的资料。也可以使用ADO来连接,这个比较方便,但需要自己导入ADO的库。
其实不论是什么数据库,只要不是自己纯手动去连接,其基本连接方法以及操作方法,都是差不多的。比如ADO,不同的数据库,其连接基本上只是连接字符串的不同,系统,包括操作系统和数据库系统,在底层都有接口的统一封装。
一般C语言连接oracle数据库通过使用oracle提供的OCI接口和PROC编程接口两种方式。
OCI方式纯粹是一些函数接口。
PROC是oracle提供的一种C与ORACLE SQL的混合编程。程序(以.pc为后缀)编好之后,使用oracle提供的proc预编译程序,将pc文件编译成c文件(这一过程,相当于将SQL转换为OCI的接口),然后再使用c语言编译器生成可以执行文件。
OCI方式不容易入门,它拥有大量的接口函数,要很快熟悉它,非常难。但OCI方式的编程效率很高。
porc方式简单易用。可用于对性能要求不太高的项目。