純DOS下連接數據庫--急-在綫等

yqwd911 2006-06-02 11:09:33
向高手求救
有沒有人在純DOS下用C寫過連接數據庫的程序
指點一下(連Oracle和SQL server都可以)
1)是否要安裝DOS下的客戶端(什麽版本從哪裏獲取)
2)如何配置
3)在C中如何引用,連接語句如何寫
4)sql語句如何執行。

以前只做過window下VB的開發 C和DOS都沒用過。
高手指點。
先謝謝了!
...全文
599 29 打赏 收藏 转发到动态 举报
写回复
用AI写文章
29 条回复
切换为时间正序
请发表友善的回复…
发表回复
yqwd911 2006-06-21
  • 打赏
  • 举报
回复
問題還沒有解決,但是謝謝大家的熱心!
yqwd911 2006-06-16
  • 打赏
  • 举报
回复
不夠強,所以求大家幫忙
yqwd911 2006-06-13
  • 打赏
  • 举报
回复
怎麽寫中间层的服务有沒有例子??
yulinlang 2006-06-13
  • 打赏
  • 举报
回复
安装SQL Server的develop tools,没研究过里面有没有for dos的
yulinlang 2006-06-13
  • 打赏
  • 举报
回复
根本不许需要在DOS下装什么客户端,何况现在也没有。
你需要的能提供在DOS下访问Oracle的函数库,仅此而已。不过好像现在也没有,原来低版本的不知道是否提供。
实在不行只能自己写个中间层的服务,转换一下了。
yqwd911 2006-06-13
  • 打赏
  • 举报
回复
有人有更好的建議嗎?
hemiya 2006-06-13
  • 打赏
  • 举报
回复
如果够强,自己写code.hehe
HKSoft 2006-06-07
  • 打赏
  • 举报
回复
建议用Pro C/C++
yqwd911 2006-06-07
  • 打赏
  • 举报
回复
To 51365133(渊海)
如果是FOXbase,那麽要怎麽做呢?
yqwd911 2006-06-05
  • 打赏
  • 举报
回复
To 51365133(渊海)
謝謝你提供的資料。但是我的客戶端是純DOS。

安裝什麽Oracle客戶端?
怎麽設定?
你知道在純DOS下安裝的Oracle客戶端從哪裏可以獲取?
51365133 2006-06-05
  • 打赏
  • 举报
回复
建议楼主看下,我写的这个配置环境,按照上边的步骤,我是实现了.


Por*C/C++ --开始 - mac


pro*C/C++ --> 将源程序中的内嵌SQL转变为C/C++代码(预编译)
c/c++ --> 编译和链接C++代码


使用预编译器开发内嵌SQL程序的步骤

1·编写预编译源程序:.pc,在该预编译源程序中包含了内嵌SQL和PL/SQL;
2·预编译源程序,生成C/C++源文件:.c/.cpp,将内嵌的SQL和PL/SQL代码转变为对SQLLIB(Oracle运行库函数)的调用;
3·编译C/C++源文件,声称目标代码:.obj;
4·连接.obj和SQLLIB运行库,生成可执行文件:.exe
5·运行并调试.exe文件。


环境搭建

1·安装Oracle9i客户端Pro C-C++
注意查看是否已安装
2·安装VC++
先安装Oracle后,就可以在VC中省去设置一些东西
3·使用配置文件 pcscfg.cfg:
在 %oracle_home%precompadmin 下,用记事本打开,添加常用的预编译选项,比如:
parse=full ----要解析院文件的所有语法
include=f:oracleora92precomppublic
include=f:oracleora92ociinclude
include=d:VC98include
4·使用 procui 进行预编译
这一步放在 Pro*C/C++ 与 VC 环境集成时说
5·在 VC 中运行
在VC中使用Pro*C/C++预编译器
(如果先安装了Oracle再安装的VC,可以省去这一步)工具-选择-目录,选择 Executable files,添加: %oracel_home%bin
指定Pro*C/C++头文件的路径
工具-选择-目录,选择 Include files,添加:
%oracel_home%precomppublic --- Pro*C/C++头文件的路径
%oracel_home%ociinclude --- oci头文件所在路径
建立工程文件
·要建立 Win32 Console Application;
·然后在Source file里添加.PC和.C文件;
·然后在Source file里添加orasql9.lib,在%oracel_home%precomplib 中;
让VC自动预编译.pc文件(不用在pc环境下)
选中.pc文件,单击右键setting,命令中输入 proc $(InputDir)(InputName),输出中输入 $(InputDir)(InputName).c
把oracle的Pro C-C++添加到VC中
工具-定制-工具,空白处写上 Pro*C/C++,命令写:procui.exe,参数写:$(TargetName),初始化目录选项:$(WkspDir),然后就可以在工具菜单中看到了。

其他一些
---当编写支持C++的P+++C/C++源程序时,必须将预编译选项的CODE设置为CPP。这样在预编译以后,会生成和C++完全兼容的函数原形。
---内嵌SQL的续行符:
---注意分隔符,C/C++用‘’来分隔字符,用“”来分隔字符串;内嵌SQL用‘’分隔字符串,“”表示内容区分大小写,比如表名。
--------------------
---操作 SQL操作符 C操作符
非 NOT !
与 AND &&
或 OR ||
等于 = ==
51365133 2006-06-05
  • 打赏
  • 举报
回复
yqwd911(windy) ( ) 信誉:100 2006-6-2 15:59:38 得分: 0



先謝謝jixingzhong提供的資料
我研究一下。

順便問一下#include <sqlca.h> 這個Sqlca.h是C的標準lib嗎?



不是标准的,这是数据库中带的,

你安装Oracle后,会有一些头文件,你用PRO*C就可以直接的连接这些头文件,具体的写的方式和jixingzhong 提供的差不多.


#include "Zaoan.h"


int main(int argc, char* argv[])
{
// update zaoan progress
EXEC SQL update sslmg_salesdate
set sslmgsal_zaoanprog = 100
where sslmgsal_saldate = to_date(:szSaleDate,'yyyymmdd');

EXEC SQL update sslmg_salesdate
set sslmgsal_zaoancd = rpad(substr(sslmgsal_zaoancd, 1, 7), 8, '0') ;
EXEC SQL COMMIT WORK RELEASE;
sprintf(g_szEsmlogMsg, PROGRAM_END_MSG, "Zaoan");
comOutputEsmlog(szLogFile,
"Zaoan",
ESMLOG_INFO,
PROGRAM_END_ID,
g_szEsmlogMsg);

return(GMS_RETURN_NRML);
}

int connect_db()
{
// Config of database
strcpy((char *)username.arr, sInitVariable.szDBUser);
strcpy((char *)password.arr, sInitVariable.szDBPwd);
strcpy((char *)database.arr, sInitVariable.szDBName);
username.len = (unsigned short)strlen((char *)username.arr);
password.len = (unsigned short)strlen((char *)password.arr);
database.len = (unsigned short)strlen((char *)database.arr);

// Connect to DB
EXEC SQL CONNECT :username IDENTIFIED BY :password USING :database;

return (0);
}
这是调用Oracle的例子.你看下吧.
yqwd911 2006-06-05
  • 打赏
  • 举报
回复
問題還沒有解決,高手們繼續幫忙呀
51365133 2006-06-05
  • 打赏
  • 举报
回复
我以前知道一个系统是纯DOS的她们好像用的是FOXBASE数据库.
yqwd911 2006-06-03
  • 打赏
  • 举报
回复
To jixingzhong
能不能在指点一下
happytang 2006-06-02
  • 打赏
  • 举报
回复
肯定要装客户端的
除非有低版本的。。。
yqwd911 2006-06-02
  • 打赏
  • 举报
回复
To jixingzhong
這個SAMPLE是什麽數據庫?
看你寫的好像意思是在sqlca中配置了如何連接SAMPLE,是這個意思嗎?
那麽是怎麽配置連接到SAMPLE的?
robin_yao 2006-06-02
  • 打赏
  • 举报
回复
不知道DB-Library行不行
yqwd911 2006-06-02
  • 打赏
  • 举报
回复
先謝謝jixingzhong提供的資料
我研究一下。

順便問一下#include <sqlca.h> 這個Sqlca.h是C的標準lib嗎?
jixingzhong 2006-06-02
  • 打赏
  • 举报
回复
嵌入SQL,仅供楼主参考 ~

连接到SAMPLE数据库,查询LASTNAME为JOHNSON的FIRSTNAME信息。
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include "util.h"
#include <sqlca.h>
EXEC SQL INCLUDE SQLCA; (1)
main()
{
EXEC SQL BEGIN DECLARE SECTION; (2)
char firstname[13];
char userid[9];
char passwd[19];
EXEC SQL END DECLARE SECTION;
EXEC SQL CONNECT TO sample; (3)
EXEC SQL SELECT FIRSTNME INTO :firstname (4)
FROM employee
WHERE LASTNAME = 'JOHNSON';(4)
printf( "First name = %s\n", firstname );
EXEC SQL CONNECT RESET; (5)
return 0;
}
上面是一个简单的静态嵌入SQL语句的应用程序。它包括了嵌入SQL的主要部分:
(1)中的include SQLCA语句定义并描述了SQLCA的结构。SQLCA用于应用程序和数据库之间的通讯,其中的SQLCODE返回SQL语句执行后的结果状态。
(2)在BEGIN DECLARE SECTION和END DECLARE SECTION之间定义了宿主变量。宿主变量可被SQL语句引用,也可以被C语言语句引用。它用于将程序中的数据通过SQL语句传给数据库管理器,或从数据库管理器接收查询的结果。在SQL语句中,主变量前均有“:”标志以示区别。
(3)在每次访问数据库之前必须做CONNECT操作,以连接到某一个数据库上。这时,应该保证数据库实例已经启动。
(4)是一条选择语句。它将表employee中的LASTNAME为“JOHNSON”的行数据的FIRSTNAME查出,并将它放在firstname变量中。该语句返回一个结果。可以通过游标返回多个结果。当然,也可以包含update、insert和delete语句。
(5)最后断开数据库的连接。
从上例看出,每条嵌入式SQL语句都用EXEC SQL开始,表明它是一条SQL语句。这也是告诉预编译器在EXEC SQL和“;”之间是嵌入SQL语句。如果一条嵌入式SQL语句占用多行,在C程序中可以用续行符“\”。
加载更多回复(9)

69,371

社区成员

发帖
与我相关
我的任务
社区描述
C语言相关问题讨论
社区管理员
  • C语言
  • 花神庙码农
  • 架构师李肯
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧