实现C语言嵌入式SQL程序环境配置

合集下载

C++连接SQL

C++连接SQL

C++连接SQL数据库第一步系统配置1.设置SQLSERVER服务器为SQL登录方式,并且系统安全性中的sa用户要设置登录功能为“启用”,还有必须要有密码。

2.需要在ODBC中进行数据源配置,数据源选\”SQL SERVER”,登录方式使用“使用输入用户登录ID和密码的SQL SERVER验证”,并填写登录名(sa)和密码,注意一点,密码不能为空,这就意味着你的sa用户必须得有密码。

否则无法通过系统本身的安全策略。

测试通过就完成了配置。

C++连接SQL数据库第二步 C++与SQL连接初始化1.在你所建立的C++项目中的stdafx.h头文件中引入ADO具体代码如下1.#import “c:\Program Files\Common Files\System\ado\msado15.dll”no_namespace rename(”EOF”, “adoEOF”) rename(”BOF”, “adoBOF”)2.定义_ConnectionPtr变量后调用Connection对象的Open方法建立与服务器的连接。

数据类型_ConnectionPtr实际上是由类模板_com_ptr_t得到的一个具体的实例类。

_Connectio nPtr类封装了Connection对象的Idispatch接口指针及其一些必要的操作。

可以通过这个指针操纵Connection对象。

例如连接SQLServer数据库,代码如下:1.//连接到MS SQL Server2.//初始化指针3._ConnectionPtr pMyConnect = NULL;4.HRESULT hr = pMyConnect.CreateInstance(__uuidof(Connection));5.if (FAILED(hr))6.return;7.//初始化链接参数8._bstr_t strConnect = “Provider=SQLOLEDB;9.Server=hch;10.Database=mytest;11.uid=sa; pwd=sa;”; //Database指你系统中的数据库12.//执行连接13.try15.// Open方法连接字串必须四BSTR或者_bstr_t类型16.pMyConnect->Open(strConnect, “”, “”, NULL);17.}18.catch(_com_error &e)19.{20.MessageBox(e.Description(), “警告”, MB_OK|MB_ICONINFORMATION);21.}//发生链接错误C++连接SQL数据库第三步简单的数据连接1.//定义_RecordsetPtr变量,调用它Recordset对象的Open,即可打开一个数据集2.//初始化过程以下是个实例3._RecordsetPtr pRecordset;4.if (FAILED(pRecordset.CreateInstance(__uuidof(Recordset))))5.{6.return;7.}8.//执行操作9.try10.{11.pRecordset->Open(_variant_t(”userinfo”),_variant_t((IDispatch*)pMyConnect),12.adOpenKeyset, adLockOptimistic, adCmdTable);13.}14.catch (_com_error &e)15.{16.MessageBox(”无法打开userinfo表\”, “系统提示”,MB_OK|MB_ICONINFORMATION);C++连接SQL数据库第四步执行SQL语句这里是关键,我认为只要你懂点SQL语句那么一切都会方便许多比用上面的方法简单,更有效率点。

c++连接sql的方法

c++连接sql的方法

很多人都想知道如何在VC++ 环境下C++连接MySQL,通过我长时间的实践总结得出:一、环境配置第一步:工程->设置->连接->对象/库模块,添加libmysql.lib第二步:工具->选项->目录->路径,加入MySQL的include文件,lib/opt第三步:在工程所在文件中加入libmysql.dll文件(此文件在MySQL文件的子文件lib/debeg里)二、头文件的引入需要引入Winsock2.h和mysql.h(Winsock2.h的作用是:)三、数据库的连接1、mysql_library_init(0,NULL,NULL);//初始化数据库2、mysql_init(&mydata);//初始化数据结构3、mysql_options(&mydata,MYSQL_SET_CHARSET_NAME,"UTF8";//设置编码方式4、 mysql_real_connect(&mydata,"localhost","root","1234","hotel",3306,"NULL",0);// 数据库的连接(定义的数据库对象,本地/MySQL的服务端ip,用户名,密码,数据库名,固定,,,)四、数据库的使用数据库的使用主要是利用sql语句,这里挑选几个例子说明:stirng sqlstr ;1、查看表中的某行数据sqlstr="select * from tablename(表名) where (字段名)=\'"+string(字符串)+"\'";每次调用sql语句后,真正要被C++环境知道,就要执行以下语句:mysql_query(&mydata(数据库的对象),sqlstr.c_str()(这里需要一个));2、向表中添加一行数据第一种方法:sprintf(sqlstr, "INSERT INTO roomVALUES('%s','%s','%s',%d,'%s')", num,type,capacity,price,state);第二种方法:sqlstr ="INSERT INTO roomVALUES(\'"+num+"\',\'"+type+"\',\'"+capacity+"\',\'"+price+"\',\'"+state+"\');";3、获得表中特定行的某个数据:sqlstr="select * from info(表名) where customername(字段名)=\'"+name(字符串)+"\'; ";mysql_query(&mydata,sqlstr.c_str());result=mysql_store_result(&mydata);(MYSQL_RES *result=NULLrow=mysql_fetch_row(result);(MYSQL_ROW row=NULLintime=row[2];[把表中获得的数据row【2】(表中第三个数据)复制给intime]4、表头和各行的输出:表头∙MYSQL_RES *result=NULL;∙result=mysql_store_result(&mydata);//∙int rowcount=mysql_num_rows(result);//统计行数∙cout<<"row count: "<∙unsigned int fieldcount=mysql_num_fields(result);//统计字段数∙MYSQL_FIELD *field=NULL;∙for(unsigned int i=0;i∙{ field=mysql_fetch_field_direct(result,i);∙cout<"\t\t"; p="" style="margin-top: 0px; margin-right: 0px;margin-bottom: 0px; margin-left: 0px; padding-top: 0px; padding-right: 0px;padding-bottom: 0px; padding-left: 0px; ">∙} cout<复制代码各行的输出:∙MYSQL_ROW row=NULL;∙row=mysql_fetch_row(result); ∙while(NULL!=row)∙{ for(i=0; i∙{ cout<∙} cout<∙row=mysql_fetch_row(result); ∙}。

c中嵌套sql

c中嵌套sql

一、ESQL/C 学习在c语言程序使用嵌套的sql语句。

(1)1、每条嵌入式SQL语句都用EXEC SQL开始,表明它是一条SQL语句。

这也是告诉预编译器在EXEC SQL和“;”之间是嵌入SQL语句。

2、如果一条嵌入式SQL语句占用多行,在C程序中可以用续行符“\”,在Fortran中必须有续行符。

其他语言也有相应规定。

3、每一条嵌入SQL语句都有结束符号,如:在C中是“;”。

4、嵌入SQL语句的关键字不区分大小写。

5、可以使用“/*….*/”来添加注释。

也可以使用“--”来添加注释(2)嵌入SQL语句应该包含五个步骤:1)、通过SQLCA建立应用程序和SQL SERVER的SQL通信区域。

2)、声明宿主变量。

3)、连接到SQL SERVER。

4)、通过SQL语句操作数据。

5)、处理错误和结果信息(3)声明宿主变量宿主变量(host variable)就是在嵌入式SQL语句中引用主程序说明的程序变量,在程序和嵌入sql语句中都可以用。

例如:EXEC SQL BEGIN DECLARE SECTION;char user[31],passwd[31];EXEC SQL END DECLARE SECTION;说明:在嵌入式SQL语句中使用主变量前,必须采用BEGIN DECLARE SECTION 和END DECLARE SECTION 之间给主变量说明。

注意:1:主变量是标准的C程序变量。

2:嵌入SQL语句使用主变量来输入数据和输出数据。

3:C程序和嵌入SQL语句都可以访问主变量。

使用:为了便于识别主变量,当嵌入式SQL语句中出现主变量时,必须在变量名称前标上冒号(:)。

(4)连接数据库在程序中,使用CONNECT语句来连接数据库;语法格式:exec sql connect :user identified by :passwd using :server;断开数据库在嵌入SQL语句中,使用DISCONNECT语句断开数据库的连接;DISCONNECT [connection_name | ALL | CURRENT]其中,connection_name为连接名。

在VC++6.0中嵌入sql的方法[1]

在VC++6.0中嵌入sql的方法[1]

C:\Program
Files\Microsoft SQL Server\80\Tools\D evTools\Include C:\Program Files\Microsoft Visual Studio\VC98\Lib
执行嵌入了SQL的C程序产 生的问题
解决方法是将Sqlak32.dll从 Sql server安装盘拷贝到C源程 序所在的目录(此C程序由预 编译器产生)
嵌入SQL步骤之三:预编 译.sqc源文件
• 若预编译.sqc源文件时产生如下问题: --------------------Configuration: sp - Win32 Debug--------• running ESQL/C precompiler • Error executing c:\windows\system32\cmd.exe. • sp.exe - 1 error(s), 0 warning(s)
在C中嵌入sql的方法
操作环境,基于: Vc++6.0 sqlserver 2000
杜茂康 2004-10-2
Installing Embedded SQL for C
Directory \Mssql7\Binn File Nsqlprep.exe Description
Sqlaiw32.dll
Sqlakw32.dll
x:\Program Files\Micros oft SQL Server\80\T ools\DevTo ols\Include.
C嵌入SQL步骤之二:设置预 编译环境
5. In the Show directories for box, click:
Library files.

嵌入式SQL

嵌入式SQL

嵌入式SQL一、嵌入式SQL 简介嵌入式SQL(英文: Embedded SQL)是一种将SQL 语句直接嵌入到像C 、C++、JA V A 等程序设计语言中的方法。

借此方法,可使得应用程序拥有了访问数据以及处理数据的能力。

在这一方法中,将包含SQL 语言的程序设计语言成为称为宿主语言,简称主语言。

二、嵌入式SQL 的编写流程注:由于嵌入式SQL 的主语言有很多,关系型数据库也有很多,由于时间有限,我就不一一阐述了,这里我只以C 语言和Oracle 数据库为例进行说明,有兴趣的同学可以研究一下相关内容。

1.编写pc 源程序(包含SQL 语句的程序);2.使用Oracle 提供的预编译工具ProC.exe 将内嵌的SQL 语句转换为对Oracle 运行库函数( SQLLIB ) 的调用,并生成C 源代码文件;3.使用C /C++编译工具编译C/C++源文件,生成目标文件;4.使用C/C++链接工具生成可执行文件;5.运行可执行文件。

三、主语言与SQL 语句通信原理将SQL 嵌入到高级语言中混合编程,SQL 语句负责操作数据库,高级语言负责控制程序流程。

这时候程序中含有两种不同计算模型的语句,它们之间如何进行通信呢?1.SQL 语句如何向主程序传递执行状态信息?编写包含SQL 语句的程序***.pc 文件生成用RDBMS 提供的预编译工具编译***.c 文件嵌入式SQL 编写流程例如:在C语言中有这么一个功能需求,如果SQL语言执行成功,我就去执行下一行代码,否则我就退出。

这时就需要知道SQL语句的执行状态了。

在嵌入式SQL语言中,SQL语句是通过SQLCA(SQL通信区)向主程序传递其执行状态的,SQLCA里面有一个变量SQLCODE,根据这个变量,就可以知道SQL语句的执行状态。

如sqlca.sqlcode = 0 表明SQL语句执行成功;sqlca.sqlcode=1403,代表查询语句没有返回值;对于上面的案例,我们可以这样做:执行select * from student;If(sqlca.sqlcode ==0){Printf(“执行成功”);}else{Exit(0);}2.SELECT语句返回的结果怎么交给主程序,主程序如何向SQL语句传递参数。

嵌入式SQL实验指导

嵌入式SQL实验指导

实验6 嵌入式SQL通过这个实验,我们首先熟悉了嵌入式SQL编程,并可以自己动手编写一个小型的数据库应用程序。

而且能够大体了解我们平时在日常生活中看到的一些数据库应用程序是如何开发出来的。

做完这个实验,你会发现那些数据库程序也并不是十分高深。

这是我们最后一个实验,也是工作量最大的一个实验,大约需要2-3次实验课的时间。

希望同学们认真完成。

实验平台1.OS:WindowsXP2.DBMS:SQLServer2000piler:Visual C++ 6.0(大家可能没有接触过VC++,但并不妨碍我们做这个实验,因为在这个实验中我们只利用它的编译功能。

)预备知识1)嵌入式SQL编程:嵌入式SQL由SQL语句和C/C++代码组成。

其中SQL语句由预处理器翻译成C或C++的源代码。

对预处理后的源代码进行编译、连接生成可执行程序后方可运行。

●SQL预处理器SQLServer的预处理程序是nsqlprep.exe。

其常用的语法格式如下:nsqlprep 程序文档名⏹要求程序文档名的后缀为.sqc,可以省略。

⏹预编译后得到的文档,与程序文档同名,后缀为.c;放在与程序文档名同一个路径下nsqlprep.exe在SQLServer的安装目录的MSSQL\Binn下。

在本机中SQLServer的安装目录是C:\Program Files\Microsoft SQL Server,nsqlprep.exe在C:\Program Files\Microsoft SQL Server\MSSQL\Binn。

由于默认的安装方式(典型安装)并没有安装应用程序nsqlprep.exe,因此,需要你把我提供的binn文件夹,拷贝到该目录下覆盖原来的Binn。

●连接方式经预处理后的c文件就可以用c的编译器进行编译连接了。

使用Visual C++ 6.0进行编译连接,连接方式是动态连接,用到动态链接库SQLakw32.dll,sqlaiw32.dll;此两文件已经随同binn.rar的其他内容,被拷贝到C:\Program Files\Microsoft SQL Server\MSSQL\Binn下;但仍然需要把该路径加到系统的路径变量中,以使得程序运行时能找到这两个文件。

嵌入式SQL示例

嵌入式SQL示例

1 嵌入式SQL示例#define ture 1#include <stdio.h>#include “prompt.h”exec sql include sqlca; /*声明通信区*/int main( ){char cid_prompt[]=“请输入顾客号:”;exec sql begin declare section;char cust_id[5],agent_id[4];double dollar_sum;char user_name[20],user_ped[20];exec sql end declare section; /*声明变量*/exec sql declare agent_dollars cursor forselect aid,sum(dollars) from orderswhere cid=:cust_id group by aid;/*游标*/exec sql whenever sqlerror goto report_error;exec sql whenever not found goto finish; /*出错处理*/strcpy(user_name,”myname”);strcpy(user_pwd,”mypwd”);exec sql connect dbserver:user_name identified by :user_pwd; /*连接*/while((prompt(cid_prompt,1,cust_id,4))>=0){exec sql open agent_dollars;while (ture) {exec sql fetch agent_dillars into :agent_id,:dollar_sum; //游标取值 printf(“ %s %11.2f\n”, agent_id,dollar_sum);}continue;finish: exec sql close agent_dollars;exec sql commit work; /*游标关闭*/} /*输入顾客ID的代理商和金额*/exec sql disconnect dbserver; /*正常释放连接*/ return 0;report_error:print_dberror(); /*出错信息*/exec sql disconnect dbserver; /*释放连接*/return 1;}2 嵌入式sql实验步骤(sql2000环境)参考:/view/adeb3813866fb84ae45c8da6.html2.1 创建数据库1.创建spj数据库,建立spj表等;2.关闭sql server 2000服务管理器;3.将devtools文件夹拷贝到:C:\Program Files\Microsoft SQL Server (这个文件夹在安装盘上)4.将Binn文件夹拷贝到:C:\Program Files\Microsoft SQL Server\MSSQL (来源同上x86下 注意:为了安全起见,最好将相应的子目录也要复制上,对有相同的文件名我是采用不覆盖的方法)5.启动服务器;2.2 VC++6.0编辑器配置(初始化Vc++环境)1.工具—>选项—>目录—>Include Files如图2.1所示,添加: C:\Program Files\Microsoft SQL Server\devtools\include ;并设为第一项。

c#连接 SQL及服务器配置

c#连接 SQL及服务器配置

在客户端连接时必须作相应的改变。 4)如果服务器端操作系统打过sp2补丁,则要对windows防火墙作一定的配置,要对它开放1433端口,通常在测试时可以直接关掉windows防火墙(其他的防火墙也关掉最好)。 5)检查服务器是否在1433端口侦听。如果服务器没有在tcp连接的1433端口侦听,则是连接不上的。检查方法是在服务器的dos或命令行下面输入 netstat -a -n 或者是netstat -an,在结果列表里看是否有类似 tcp 127.0.0.11433 listening 的项。如果没有,则通常需要给sql server 2000打上至少sp3的补丁。其实在服务器端启动查询分析器,输入 select @@version 执行后可以看到版本号,版本号在8.0.2039以下的都需要打补丁。 如果以上都没问题,这时你再做telnet 服务器ip 1433 测试,将会看到屏幕一闪之后光标在左上角不停闪动。恭喜你,你马上可以开始在企业管理器或查询分析器连接了。3: 检查客户端设置 程序-> Microsoft SQL Server -> 客户端网络使用工具。像在服务器网络实用工具里一样,确保客户端tcp/ip协议启用,并且默认端口为1433(或其他端口,与服务器端保持一致就行)。4:在企业管理器里或查询那分析器连接测试 企业管理器-> 右键SQlserver组-> 新建sqlserver注册->下一步-> 写入远程IP-> 下一步-> 选Sqlserver登陆-> 下一步-> 写入登陆名与密码(sa,password)-> 下一步-> 下一步-> 完成 查询分析器-> 文件-> 连接-> 写入远程IP-> 写入登录名和密码(sa,password)-> 确定 通常建议在查询分析器里做,因为默认情况下,通过企业管理器注册另外一台SQL Server的超时设置是4秒,而查询分析器是15秒。 修改默认连接超时的方法: 企业管理器-> 工具-> 选项-> 在弹出的"SQL Server企业管理器属性"窗口中,点击"高级"选项卡-> 连接设置-> 在 登录超时(秒) 后面的框里输入一个较大的数字 查询分析器-> 工具-> 选项-> 连接-> 在 登录超时(秒) 后面的框里输入一个较大的数字 通常就可以连通了,如果提示错误,则进入下一步。5:错误产生的原因通常是由于SQL Server使用了"仅 Windows"的身份验证方式,因此用户无法使用SQL Server的登录帐户(如 sa )进行连接。解决方法如下所示: 1) 在服务器端使用企业管理器,并且选择"使用 Windows 身份验证"连接上 SQL Server。 2) 展开"SQL Server组",鼠标右键点击SQL Server服务器的名称,选择"属性",再选择"安全性" 选项卡。 3)在"身份验证"下,选择"SQL Server和 Windows"。 4) 重新启动SQL Server服务。(在dos或命令行下面net stop mssqlserver停止服务,net start mssqlserver启动服务,也是一种快捷的方法)。
  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

实现C语言嵌入式SQL程序的环境配置
嵌入式SQL的C语言应用程序在VC++6.0、SQL Server 2000环境下的调试可分为五步:第一步环境初始化;
第二步预编译;
第三步编译;
第四步连接;
第五步运行。

1、环境初始化
(1) 将文件夹devtools复制到SQL Server的系统目录C:\Program Files\Microsoft SQL Server\(或在安装Microsoft SQL Server 2000时选择安装Development Tools,为使用嵌入式SQL语言准备必要的头文件和库文件。


(2)初始化Visual C++ 6.0编译器环境。

在命令行方式下运行文件\Microsoft Visual Studio\VC98\Bin\vcvars32.bat。

(3)初始化SQL Server的预编译环境。

在命令行方式下运行文件: C:\Program Files\Microsoft SQL Server\DEVTOOLS\SAMPLES\ESQLC\setenv.bat。

( 4) VC++6.0环境配置。

具体配置分为如下三步:
①单击菜单中Tools(工具)->options(选择)->directories(目录)->Include Files:添加C:\Program Files\Microsoft SQL Server\devtools\include。

将SQL server自带的用于数据库开发的头文件包含到工程环境中。

②Tools(工具)->options(选择)->directories(目录)->Lib Files:添加C:\Program Files\Microsoft SQL Server\devtools\x861ib。

将开发用到的包包含到工程中。

③project(工程)->Settings(设置)->Link->Object(对象)/Library Modules(库模块),添加库文件:SQLakw32.lib,Caw32.lib。

这两个文件之间用空格分开。

注意:在VC++6.0中要先创建一个"WIN32 Console Application"的Proiect,才可以做该设置。

2、预编译
1)复制ESQL预编译文件及库文件
C语言编译程序不能识别应用程序中的SQL语句,需要经过预处理程序将其转换成C语句。

SQL Server的预处理程序是nsqlprep.exe。

nsqlprep.exe在SQL Server安装日录的MSSQL\Binn下。

若SQL Server数据库采用的是默任安装方式,则需要把nsqlprep.exe、SQLAIW32.DLL、SQLAKW32.DLL三个文件拷贝到MSSQL\Binn目录下。

2)将动态链接库SQLAKW32.dll,SQLAIW32.dll文件拷贝到操作系统目录下的子目录C:\WINDOWS\system32中。

3)创建嵌入式SQL的C源文件Esql.c
#include <stdio.h>
#include <stdlib.h>
EXEC SQL BEGIN DECLARE SECTION; /*主变量说明开始*/
char deptname[22];
char HSno[10];
char HSname[22];
char HSsex[4];
int HSage;
int NEWAGE;
long SQLCODE;
EXEC SQL END DECLARE SECTION; /*主变量说明结束*/
EXEC SQL INCLUDE sqlca; /*定义SQL通信区*/
/*************************************************************************/
int main(void) /*C语言主程序开始*/
{
int count = 0;
char yn; /*变量yn代表yes或no*/
printf("Please choose the department name(CS/MA/IS): ");
scanf("%s", deptname); /*为主变量deptname赋值*/
EXEC SQL CONNECT TO CMCME3-126-2.StudentDb; /*连接数据库STUDENTDb*/ EXEC SQL DECLARE SX CURSOR FOR /*定义游标*/
SELECT Sno, Sname, Ssex, Sage /*SX对应语句的执行结果*/
FROM Student
WHERE SDept = :deptname;
EXEC SQL OPEN SX; /*打开游标SX便指向查询结果的第一行*/
for (;;) /*用循环结构逐条处理结果集中的记录*/
{
EXEC SQL FETCH SX INTO :HSno, :HSname, :HSsex,:HSage;
/*推进游标,将当前数据放入主变量*/
if (sqlca->sqlcode != 0) /* sqlcode != 0,表示操作不成功*/
{printf("数据处理结束!");
break; /*利用SQLCA中的状态信息决定何时退出循环*/}
if(count++ == 0) /*如果是第一行的话,先打出行头*/
printf("\n%-10s %-22s %-4s %-10s\n", "Sno", "Sname", "Ssex", "Sage");
printf("%-10s %-22s %-4s %-10d\n", HSno, HSname, HSsex, HSage);
/*打印查询结果*/
printf("UPDATE AGE(y/n)?"); /*询问用户是否要更新该学生的年龄*/
do{
scanf("%c",&yn);
}
while(yn != 'N' && yn != 'n' && yn != 'Y' && yn != 'y');
if (yn == 'y' || yn == 'Y') /*如果选择更新操作*/
{
printf("INPUT NEW AGE:");
scanf("%d",&NEWAGE); /*用户输入新年龄到主变量中*/
EXEC SQL UPDATE Student /*嵌入式SQL*/
SET Sage = :NEWAGE
WHERE CURRENT OF SX ;
} /*对当前游标指向的学生年龄进行更新*/
}
EXEC SQL CLOSE SX; /*关闭游标SX不再和查询结果对应*/
EXEC SQL COMMIT WORK; /*提交更新*/
EXEC SQL DISCONNECT TEST; /*断开数据库连接*/
}
4)关闭C源文件MyEsql.c,并将其备份,然后更改源文件的扩展名为“.sqc”。

5)在命令行下运行ESQL预编译程序nsqlprep.exe程序:
nsqlprep MyEsql.sqc 若运行成功,则生成MyEsql.c,将该文件添加到VC工程中编译即可。

6)编译,连接与运行
在VC++6.0中创建一个"WIN32 Console Application"的Proiect,然后将预编译生成的c 文件加入Proiect,编译连接即可生成访问SQL Server的可执行程序。

相关文档
最新文档