C语言连接SQL数据库例子.docx

上传人:b****7 文档编号:11410881 上传时间:2023-02-28 格式:DOCX 页数:22 大小:51.24KB
下载 相关 举报
C语言连接SQL数据库例子.docx_第1页
第1页 / 共22页
C语言连接SQL数据库例子.docx_第2页
第2页 / 共22页
C语言连接SQL数据库例子.docx_第3页
第3页 / 共22页
C语言连接SQL数据库例子.docx_第4页
第4页 / 共22页
C语言连接SQL数据库例子.docx_第5页
第5页 / 共22页
点击查看更多>>
下载资源
资源描述

C语言连接SQL数据库例子.docx

《C语言连接SQL数据库例子.docx》由会员分享,可在线阅读,更多相关《C语言连接SQL数据库例子.docx(22页珍藏版)》请在冰豆网上搜索。

C语言连接SQL数据库例子.docx

C语言连接SQL数据库例子

#include

#include

#include

{

EXECSQLBEGINDECLARESECTION;

(2)

charfirstname[13];

|charuserid[9];|

charpasswd[19];

EXECSQLENDDECLARESECTION;

EXECSQLCONNECTTOsample;(3)

EXECSQL

SELECTFIRSTNMEINTO:

firstname(4)

FROMemployee

WHERELASTNAME='JOHNSON';(4)

printf("Firstname=%s\n",firstname);

EXECSQLCONNECTRESET;(5)

return0;

}

上面是一个简单的静态嵌入SQL语句的应用程序。

它包括了嵌入SQL的主要部分:

(1)中的includeSQLCA语句定义并描述了SQLCA的结构。

SQLCA用于应用程序和数据库之间的通讯,其中的SQLCODE返回SQL语句执行后的结果状态。

(2)在BEGINDECLARESECTION和ENDDECLARESECTION之间定义了宿主变量。

宿主变量可被SQL语句引用,也可以被C语言语句引用。

它用于将程序中的数据通过SQL语句传给数据

库管理器,或从数据库管理器接收查询的结果。

在SQL语句中,主变量前均有:

”标志以示区别。

(3)在每次访问数据库之前必须做CONNECT操作,以连接到某一个数据库上。

这时,应该保证数据

库实例已经启动。

(4)是一条选择语句。

它将表employee中的LASTNAME为“JOHNSON”的行数据的FIRSTNAME查出,并将它放在firstname变量中。

该语句返回一个结果。

可以通过游标返回多个结果。

当然,也可以包含update、insert和delete语句。

(5)最后断开数据库的连接。

从上例看出,每条嵌入式SQL语句都用EXECSQL开始,表明它是一条SQL语句。

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

如果一条嵌入式SQL语句占用多行,在C程序中可以用续行符“”。

c语言用vc连接sqlserver2000

时分享|

a

1.提取单条记录

〃#import"C:

\ProgramFiles'CommonFiles\System\ADO\msado15.dll"\

〃no_namespace,rename("EOF","adoEOF"),named_guids

CoInitialize(NULL);

_bstr_tvarSource="Provider=Microsoft.Jet.OLEDB.4.0;DataSource=*.mdb";

〃_bstr_tvarSource="DataSource=myServerAddress;lnitial

Catalog=myDataBase;UserId=myUsername;Password=myPassword;"

_ConnectionPtrm_pConnection(_uuidof(Connection));

m_pConnection->Open(varSource,"","",adModeUnknow);

_RecordsetPtrm_pSet(_uuid(Recordset));

try{

m_pSet->Open(%%1,m_pConnection.GetlnterfacePtr()adOpenDynamic,adLockPessimistic,adCmdText);

}

catch(_com_error*e){

{

AfxMessageBox(e->ErrorMessage());

return;

}

_variant_tvar;

CString%%2="";

longfldc=m_pSet->GetFields()->GetCount();

longi=0;

try{

m_pSet->MoveFirst();

if(!

m_pSet->adoEOF)

{_

for(i=0;i

{

var=m_pSet->GetCollect((long)i);

var.ChangeType(VT_BSTR);

%%2+=var.bstrVal;

%%2+="";

}

〃m_pSet->MoveNext();

}

}

catch(_com_error*e){

AfxMessageBox(e->ErrorMessage());

deletee;

}

〃m_pSet->MoveFirst();

CoUninitialize(NULL);

2.单值比较

〃#import"C:

\ProgramFiles'CommonFiles\System\ADO\msado15.dll"\

〃no_namespace,rename("EOF","adoEOF"),named_guids

CoInitialize(NULL);

_bstr_tvarSource="Provider=Microsoft.Jet.OLEDB.4.0;DataSource=*.mdb";

〃_bstr_tvarSource="DataSource=myServerAddress;lnitial

Catalog=myDataBase;UserId=myUsername;Password=myPassword;"

_ConnectionPtrm_pConnection(_uuidof(Connection));

m_pConnection->Open(varSource,"","",adModeUnknow);

_RecordsetPtrm_pSet(_uuid(Recordset));

try{

m_pSet->Open(%%1,m_pConnection.GetlnterfacePtr()adOpenDynamic,adLockPessimistic,adCmdText);

}

catch(_com_error*e){

{

AfxMessageBox(e->ErrorMessage());

return;

}

_variant_tvar;

try{

m_pSet->MoveFirst();

if(!

m_pSet->adoEOF)

{_

var=m_pSet->GetCollect((long)0);

var.ChangeType(VT_I2);

int%%3=var.intVal;

if(%%3==%%4)

{

%%5

}

〃m_pSet->MoveNext();

}

catch(_com_error*e){

AfxMessageBox(e->ErrorMessage());

deletee;

}

〃m_pSet->MoveFirst();

CoUninitialize(NULL);

3.显示表格

//#import"C:

\ProgramFiles\CommonFiles\System\ADO\msado15.dll"\

〃no_namespace,rename("EOF","adoEOF"),named_guids

Colnitialize(NULL);

_bstr_tvarSource="Provider=Microsoft.Jet.OLEDB.4.0;DataSource=*.mdb";

〃_bstr_tvarSource="DataSource=myServerAddress;lnitial

Catalog=myDataBase;UserId=myUsername;Password=myPassword;"

_ConnectionPtrm_pConnection(_uuidof(Connection));

m_pConnection->Open(varSource,"","",adModeUnknow);

//打开属性为默认(adModeRead只读),adModeWrite(可写),adModeReadWrite(可读写)等)

_RecordsetPtrm_pSet(_uuid(Recordset));

try{

HRESULThr=m_pSet->Open(%%1,m_pConnection.GetlnterfacePtr(),

adOpenDynamic,adLockPessimistic,adCmdText);

}

catch(_com_error*e){

AfxMessageBox(e->ErrorMessage());

}

if(SUCCESSED(hr))

{

//表打开成功

}

FieldsPtrp_fields=m_pSet->Fields;

FieldPtrp_field;

_variant_tvar_index;

LPCSTRfield_name;

intindex=0;

_bstr_tbstr_field_name;

intcountfields=p_fields->GetCount();

CString*Column=newCString[countfields];

CListCtrl*pList=(CListCtrl*)GetDlgltem(%%1);//IDC_LIST_TABLEDATA

VERIFY(pList);

pList->DeleteAllltems();

for(index=0;index

{

var_index.vt=VT_I4;

var_index.IVal=index;

p_field=p_fields->ltem[var_index];

bstr_field_name=p_field->GetName();

field_name=(LPCSTR)bstr_field_name;

Column[index]=field_name;

intColumnWidth=Column[index].GetLength()*15;

pList->InsertColumn(index,field_name,LVCFMT_CENTER,ColumnWidth);

}一一

inti=0;

_bstr_tvCol;

〃pList->SetTextBkColor(RGB(122,200,122));

〃pList->SetTextColor(RGB(0,0,200));while(!

m_pSet->adoEOF)

{_

pList->Insert(i,atoi(i));

for(intj=0;j

{

vCol=m_pSet->GetCollect((long)j);pList->SetltemText(i,j,vCol);

}

m_pSet->MoveNext();

i++;

}

CoUninitialize(NULL);

C语言与SQLSERVE数据库

1.使用C语言来操作SQLSERVE数据库,采用ODB(开放式数据库连接进行数据的添加,修改,删除,查询等操作。

step1:

启动SQLSERVER务,例如:

HNHJ,开始菜单->运行->netstartmssqlserver

step2:

打开企业管理器,建立数据库test,在test库中建立test表(avarchar(200),bvarchar(200))

step3:

建立系统DSN开始菜单->运行->odbcad32,添力卩->SQLSERVER

名称:

csql,服务器:

HNHJ

使用用户使用登录ID和密码的SQLSERVER证,登录ID:

sa,密码:

更改默认的数据库为:

test

测试数据源,测试成功,即DNS添加成功。

2.cpp文件完整代码

C代码啊窃C

1.#include

2.#include

3.#include

4.#inelude

5.#inelude

6.#inelude

7.#inelude

8.

8.sqlhenvhenv=sql_null_henv;

9.sqlhdbehdbe1=sql_null_hdbc;

10.sqlhstmthstmtl=sql_null_hstmt;

12.

11./*

12.epp文件功能说明:

13.1.数据库操作中的添加,修改,删除,主要体现在SQL语句上

14.2.采用直接执行方式和参数预编译执行方式两种

15.*/

16.intmain(){

17.RETCODEreteode;

18.UCHARszDSN[SQL_MAX_DSN_LENGTH+1]="esql",

19.szUID[MAXNAME]="sa",

20.szAuthStr[MAXNAME]="";

21.//SQL语句

22.//直接SQL语句

23.UCHARsql[37]="insertintotestvalues('aaa','100')";

24.II预编译SQL语句

25.UCHARpre_sql[29]="insertintotestvalues(?

?

)";

26.II1.连接数据源

27.II1.环境句柄

28.reteode=SQLAlloeHandle(SQL_HANDLE_ENV,NULL,&henv);

29.reteode=SQLSetEnvAttr(henv,SQL_ATTR_ODBC_VERSION,

30.(SQLPOINTER)SQL_OV_ODBC3,

31.SQL_IS_INTEGER);

32.II2.连接句柄

33.reteode=SQLAlloeHandle(SQL_HANDLE_DBC,henv,&hdbe1);

34.reteode=SQLConneet(hdbe1,szDSN,4,szUID,2,szAuthStr,0);

35.〃判断连接是否成功

36.if((reteode!

=SQL_SUCCESS)&&(reteode!

=SQL_SUCCESS_WITH_I

NFO)){

37.printf("连接失败!

\n");

38.}else{

39.II2.创建并执行一条或多条SQL语句

40.I*

41.1.分配一个语句句柄(statementhandle)

42.2.创建SQL语句

43.3.执行语句

44.4.销毁语句

45.*/

46.retcode=SQLAIIocHandle(SQL_HANDLE_STMT,hdbcl,&hstmt1);

47.〃第一种方式

48.〃直接执行

49.//添加操作

50.//SQLExecDirect(hstmt1,sql,37);

53.

51.〃第二种方式

52.〃绑定参数方式

53.chara[200]="bbb";

54.charb[200]="200";

55.SQLINTEGERp=SQL_NTS;

56.//1预编译

57.SQLPrepare(hstmt1,pre_sql,29);//第三个参数与数组大小相同,而不是数据库列相同

58.//2绑定参数值

59.SQLBindParameter(hstmt1,1,SQL_PARAM」NPUT,SQL_C_CHAR,SQL_CHAR,2

00,0,&a,0,&p);

60.SQLBindParameter(hstmt1,2,SQL_PARAM」NPUT,SQL_C_CHAR,SQL_CHAR,2

00,0,&b,0,&p);

61.//3执行

62.SQLExecute(hstmt1);

66.

63.printf(”操作成功!

");

64.〃释放语句句柄

65.SQLCloseCursor(hstmt1);

66.SQLFreeHandle(SQL_HANDLE_STMT,hstmt1);

71.

67.}

68.//3.断开数据源

69./*

70.1.断开与数据源的连接.

71.2.释放连接句柄.

72.3.释放环境句柄(如果不再需要在这个环境中作更多连接)

73.*/

74.SQLDisconnect(hdbc1);

75.SQLFreeHandle(SQL_HANDLE_DBC,hdbc1);

76.SQLFreeHandle(SQL_HANDLE_ENV,henv);

77.return(0);

78.}

C代码

1.

2.

3.

4.

5.

6.

7.

8.

9.

10.

11.

12.

13.

14.

15.

16.

17.

18.

19.

20.

21.

22.

23.

24.

25.

26.

27.

28.

29.

30.

31.

32.

33.

34.

35.

36.

37.

38.

39.

40.

41.

42.

43.

#inelude

#inelude

#inelude

#inelude

#inelude

#inelude

#inelude

SQLHENVhenv=SQL_NULL_HENV;

SQLHDBChdbe1=SQL_NULL_HDBC;

SQLHSTMThstmt1=SQL_NULL_HSTMT;

/*

查询SQLSERVER数据库,1.条件查询,2.直接查询全部

*/

intmain(){

RETCODEreteode;

UCHARszDSN[SQL_MAX_DSN_LENGTH+1]="esql",szUID[MAXNAME]="sa",szAuthStr[MAXNAME]="";

UCHARsql1[39]="seleetbfromtestwherea='aaa":

UCHARsql2[35]="seleetbfromtestwherea=?

";

UCHARsql3[19]="seleetbfromtest";

reteode=SQLAlloeHandle(SQL_HANDLE_ENV,NULL,&henv);

reteode=SQLSetEnvAttr(henv,SQL_ATTR_ODBC_VERSION,(SQLPOINTER)SQL_OV_ODBC3,

SQL_IS_INTEGER);

reteode=SQLAlloeHandle(SQL_HANDLE_DBC,henv,&hdbe1);

〃1.连接数据源

reteode=SQLConneet(hdbe1,szDSN,4,szUID,2,szAuthStr,0);

if((reteode!

=SQL_SUCCESS)&&(reteode!

=SQL_SUCCESS_WITH_INFO)){

printf("连接失败!

");

}else{

〃2.创建并执行一条或多条SQL语句

/*

1.分配一个语句句柄(statementhandle)

2.创建SQL语句

3.执行语句

4.销毁语句

*/

reteode=SQLAlloeHandle(SQL_HANDLE_STMT,hdbe1,&hstmt1);

//第一种方式

44./*

45.〃直接执行

46.SQLExecDirect(hstmt1,sql1,39);

47.charlist[5];

48.SQLBindCol(hstmt1,1,SQL_C_CHAR,list,5,0);

49.SQLFetch(hstmt1);

50.printf("%s\n",list);

51.*/

52.

52.〃第二种方式

53./*

54.〃绑定参数方式

55.chara[200]="aaa";

56.SQLINTEGERp=SQL_NTS;

57.〃1.预编译

58.SQLPrepare(hstmt1,sql2,35);//第三个参数与数组大小相同,而不是数据库列相

59.〃2.绑定参数值

60.SQLBindParameter(hstmt1,1,SQL_PARAM」NPUT,SQL_C_CHAR,SQL_CHAR,2

00,0,&a,0,&p);

61.〃3.执行

62.SQLExecute(hstmtl);

63.charlist[5];

64.SQLBindCol(hstmt1,1,SQL_C_CHAR,list,5,0);

65.SQLFetch(hstmt1);

66.printf("%s\n",list);

67.*/

69.

68.〃第三种方式全部输出

69./*

70.1.确认一个结果集是否可用。

71.2.将结果集的列绑定在适当的变量上。

72.3.取得行

73.*/

74.〃3.检查结果记录(如果有的话)

75.SQLExecDirect(hstmt1,sql3,19);

76.charlist[5];

77.SQLBindCol(hstmt1,1,SQL_C_CHAR,list,5,0);

78.do{

79.retcode=SQLFetch(hstmt1);

80.if(retcode==SQL_NO_DATA){

81.break;

82.}

83.printf("%s\n",list);

84.}while

(1);

87.

85.〃释放语句句柄

86.SQLCIoseCursor(hstmtl);

87.SQLFreeHandle(SQL_HANDLE_STMT,hstmt1);

91.

88.}

93.

89.〃4.断开数据源

90./*

91.1.断开与数据源的连接.

92.2.释放连接句柄.

93.3.释放环境句柄(如果不再需要在这个环境中作更多连接)

94

展开阅读全文
相关资源
猜你喜欢
相关搜索

当前位置:首页 > 求职职场 > 简历

copyright@ 2008-2022 冰豆网网站版权所有

经营许可证编号:鄂ICP备2022015515号-1