程序代码如下:#include <stdio.h>
EXEC SQL INCLUDE SQLCA;
void main()
{
EXEC SQL BEGIN DECLARE SECTION;
VARCHAR user[20],pass[20],tnsname[20],ename[20];
int empno;
float sal;
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,"tulip");
tnsname.len=(unsigned short)strlen((char *)tnsname.arr); EXEC SQL CONNECT :user IDENTIFIED BY :pass USING :tnsname; printf("Content-type: text/html\n\n");
printf("<HTML>\n"); printf("<HEAD>\n");
printf("<TITLE>Oracle ProC Test Page</TITLE>\n");
printf("<style type='text/css'>\n");
printf(".comm {font-size:10pt; font-family:verdana}\n");
printf(".mainT{font-size:10pt; font-family:verdana;border:black solid;border-width:1 0 0 1}\n");
printf(".commT{font-size:10pt; font-family:verdana;border:black solid;border-width:0 1 1 0}\n");
printf("</style>\n");
printf("</HEAD>\n");
printf("<BODY>\n");
EXEC SQL DECLARE emp_cursor CURSOR FOR SELECT empno,ename,sal from emp;
EXEC SQL OPEN emp_cursor;
printf("<p class='comm'>Scott.emp's contents:<br></p>\n");
printf("<table cellspacing='0' width='320' class=mainT>\n<tr>\n");
printf("<td class='commT'>Empno</td>\n<td class='commT'>Ename</td><td class='commT'>Salary</td>\n</tr>\n");
EXEC SQL WHENEVER NOT FOUND DO break;
printf("<tr>\n");
while(1)
{
EXEC SQL FETCH emp_cursor INTO :empno,:ename,:sal;
printf("<td class='commT'>%d</td><td class='commT'>%s</td><td class='commT'>%d</td></tr>\n",empno,ename,sal );
}
printf("</tr>\n");
printf("</table>\n");
EXEC SQL CLOSE emp_cursor;
EXEC SQL COMMIT WORK RELEASE;
printf("</body></html>\n");
}在Windows下用Broland C++编译如下:
1: proc PARSE=NONE example.c
2:bcc32 -o example example.c c:\oracle\ora92\precomp\lib\orasql9.lib在第二步时出现错误如下:
Error: 'c:\oracle\ora92\precomp\lib\orasql9.lib' contains invalid OMF record,ttpe 0x21 (possibly COFF)麻烦高手门帮忙解决一下.
EXEC SQL INCLUDE SQLCA;
void main()
{
EXEC SQL BEGIN DECLARE SECTION;
VARCHAR user[20],pass[20],tnsname[20],ename[20];
int empno;
float sal;
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,"tulip");
tnsname.len=(unsigned short)strlen((char *)tnsname.arr); EXEC SQL CONNECT :user IDENTIFIED BY :pass USING :tnsname; printf("Content-type: text/html\n\n");
printf("<HTML>\n"); printf("<HEAD>\n");
printf("<TITLE>Oracle ProC Test Page</TITLE>\n");
printf("<style type='text/css'>\n");
printf(".comm {font-size:10pt; font-family:verdana}\n");
printf(".mainT{font-size:10pt; font-family:verdana;border:black solid;border-width:1 0 0 1}\n");
printf(".commT{font-size:10pt; font-family:verdana;border:black solid;border-width:0 1 1 0}\n");
printf("</style>\n");
printf("</HEAD>\n");
printf("<BODY>\n");
EXEC SQL DECLARE emp_cursor CURSOR FOR SELECT empno,ename,sal from emp;
EXEC SQL OPEN emp_cursor;
printf("<p class='comm'>Scott.emp's contents:<br></p>\n");
printf("<table cellspacing='0' width='320' class=mainT>\n<tr>\n");
printf("<td class='commT'>Empno</td>\n<td class='commT'>Ename</td><td class='commT'>Salary</td>\n</tr>\n");
EXEC SQL WHENEVER NOT FOUND DO break;
printf("<tr>\n");
while(1)
{
EXEC SQL FETCH emp_cursor INTO :empno,:ename,:sal;
printf("<td class='commT'>%d</td><td class='commT'>%s</td><td class='commT'>%d</td></tr>\n",empno,ename,sal );
}
printf("</tr>\n");
printf("</table>\n");
EXEC SQL CLOSE emp_cursor;
EXEC SQL COMMIT WORK RELEASE;
printf("</body></html>\n");
}在Windows下用Broland C++编译如下:
1: proc PARSE=NONE example.c
2:bcc32 -o example example.c c:\oracle\ora92\precomp\lib\orasql9.lib在第二步时出现错误如下:
Error: 'c:\oracle\ora92\precomp\lib\orasql9.lib' contains invalid OMF record,ttpe 0x21 (possibly COFF)麻烦高手门帮忙解决一下.
# Generated by Oracle configuration tools.ROCK =
(DESCRIPTION =
(ADDRESS_LIST =
(ADDRESS = (PROTOCOL = TCP)(HOST = rock)(PORT = 1521))
)
(CONNECT_DATA =
(SERVICE_NAME = rock)
)
)INST1_HTTP =
(DESCRIPTION =
(ADDRESS_LIST =
(ADDRESS = (PROTOCOL = TCP)(HOST = rock)(PORT = 1521))
)
(CONNECT_DATA =
(SERVER = SHARED)
(SERVICE_NAME = MODOSE)
(PRESENTATION = http://HRService)
)
)EXTPROC_CONNECTION_DATA =
(DESCRIPTION =
(ADDRESS_LIST =
(ADDRESS = (PROTOCOL = IPC)(KEY = EXTPROC0))
)
(CONNECT_DATA =
(SID = PLSExtProc)
(PRESENTATION = RO)
)
)在用Proc写程序连我本机Oracle数据库时总是报ORA-12154 TNS:Could not resolve service name错误,帮忙看看.
1.少了几个库,
#include <stdio.h>
#include <string.h>
#include <stdlib.h>
2.
因为你的ename是VARCHAR型的,在
printf("<td class='commT'>%d</td><td class='commT'>%s</td><td class='commT'>%d</td></tr>\n",empno,ename,sal ); 中,你应该用ename.arr.或者你把ename改成char型的。
try again!