C语言连接SQL数据库.docx

上传人:b****5 文档编号:14957163 上传时间:2023-06-28 格式:DOCX 页数:16 大小:27.40KB
下载 相关 举报
C语言连接SQL数据库.docx_第1页
第1页 / 共16页
C语言连接SQL数据库.docx_第2页
第2页 / 共16页
C语言连接SQL数据库.docx_第3页
第3页 / 共16页
C语言连接SQL数据库.docx_第4页
第4页 / 共16页
C语言连接SQL数据库.docx_第5页
第5页 / 共16页
C语言连接SQL数据库.docx_第6页
第6页 / 共16页
C语言连接SQL数据库.docx_第7页
第7页 / 共16页
C语言连接SQL数据库.docx_第8页
第8页 / 共16页
C语言连接SQL数据库.docx_第9页
第9页 / 共16页
C语言连接SQL数据库.docx_第10页
第10页 / 共16页
C语言连接SQL数据库.docx_第11页
第11页 / 共16页
C语言连接SQL数据库.docx_第12页
第12页 / 共16页
C语言连接SQL数据库.docx_第13页
第13页 / 共16页
C语言连接SQL数据库.docx_第14页
第14页 / 共16页
C语言连接SQL数据库.docx_第15页
第15页 / 共16页
C语言连接SQL数据库.docx_第16页
第16页 / 共16页
亲,该文档总共16页,全部预览完了,如果喜欢就下载吧!
下载资源
资源描述

C语言连接SQL数据库.docx

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

C语言连接SQL数据库.docx

C语言连接SQL数据库

连接到SAMPLE数据库,查询LASTNAME为JOHNSON的FIRSTNAME信息。

 

 *include  

 *include  

 *include  

 *include "util.h" 

 *include  

 E*EC SQL INCLUDE SQLCA; 〔1〕 

 main() 

 { 

 E*EC SQL BEGIN DECLARE SECTION; 〔2〕 

 char firstname[13]; 

 char userid[9]; 

 char passwd[19]; 

 E*EC SQL END DECLARE SECTION; 

 E*EC SQL CONNECT TO sample; 〔3〕 

 E*EC SQL SELECT FIRSTNME INTO :

firstname 〔4〕  

 FROM employee 

 WHERE LASTNAME = 'JOHNSON';〔4〕 

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

 E*EC 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语句都用E*EC SQL开场,说明它是一条SQL语句。

这也是告诉预编译器在E*EC SQL和“;〞之间是嵌入SQL语句。

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

C语言与SQLSERVER数据库

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

 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文件完整代码

//**************************save.cpp**************************

C代码

1.*include    

2.*include    

3.*include    

4.*include    

5.*include    

6.*include    

7.*include    

8.SQLHENV henv = SQL_NULL_HENV;     

9.SQLHDBC hdbc1 = SQL_NULL_HDBC;     

10.SQLHSTMT hstmt1 = SQL_NULL_HSTMT;     

11./*

12.    cpp文件功能说明:

13.    1.数据库操作中的添加,修改,删除,主要表达在SQL语句上

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

15.*/

16.int main(){     

17.    RETCODE retcode;     

18.UCHAR   szDSN[SQL_MA*_DSN_LENGTH+1]   =   "csql",     

19.            szUID[MA*NAME]   =   "sa",     

20.            szAuthStr[MA*NAME]   =   ";    

21.//SQL语句

22.//直接SQL语句

23.UCHAR   sql[37] = "insert into test values('aaa','100')";  

24.//预编译SQL语句

25.UCHAR   pre_sql[29] = "insert into test values(",")";  

26.//1.连接数据源

27.//1.环境句柄

28.    retcode   =   SQLAllocHandle   (SQL_HANDLE_ENV,   NULL,   &henv);     

29.    retcode   =   SQLSetEnvAttr(henv,   SQL_ATTR_ODBC_VERSION,     

30.                  (SQLPOINTER)SQL_OV_ODBC3,     

31.                  SQL_IS_INTEGER);     

32.//2.连接句柄  

33.    retcode   =   SQLAllocHandle(SQL_HANDLE_DBC,   henv,   &hdbc1);     

34.    retcode   =   SQLConnect(hdbc1,   szDSN,   4,   szUID,   2,   szAuthStr,   0);      

35.//判断连接是否成功

36.if   (   (retcode   !

=   SQL_SUCCESS)   &&   (retcode   !

=   SQL_SUCCESS_WITH_INFO)   )   {       

37.        printf("连接失败!

\n");  

38.    }   else   {     

39.//2.创立并执行一条或多条SQL语句

40./*

41.        1.分配一个语句句柄(statement handle)

42.        2.创立SQL语句

43.        3.执行语句

44.        4.销毁语句

45.        */

46.        retcode   =   SQLAllocHandle(SQL_HANDLE_STMT,   hdbc1,   &hstmt1);     

47.//第一种方式

48.//直接执行

49.//添加操作

50.//SQLE*ecDirect (hstmt1,sql,37);

51.//第二种方式

52.//绑定参数方式

53.char a[200]="bbb";  

54.char b[200]="200";  

55.        SQLINTEGER   p   =   SQL_NTS;  

56.//1预编译

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

58.//2绑定参数值

59.        SQLBindParameter(hstmt1,1,SQL_PARAM_INPUT,SQL_C_CHAR,SQL_CHAR,200,0,&a,0,&p);  

60.        SQLBindParameter(hstmt1,2,SQL_PARAM_INPUT,SQL_C_CHAR,SQL_CHAR,200,0,&b,0,&p);  

61.//3 执行

62.        SQLE*ecute(hstmt1);  

63.        printf("操作成功!

");  

64.//释放语句句柄

65.        SQLCloseCursor (hstmt1);  

66.        SQLFreeHandle (SQL_HANDLE_STMT, hstmt1);  

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.}     

*include

*include

*include

*include

*include

*include

*include

SQLHENVhenv=SQL_NULL_HENV;

SQLHDBChdbc1=SQL_NULL_HDBC;

SQLHSTMThstmt1=SQL_NULL_HSTMT;

/*

cpp文件功能说明:

1.数据库操作中的添加,修改,删除,主要表达在SQL语句上

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

*/

intmain(){

RETCODEretcode;

UCHARszDSN[SQL_MA*_DSN_LENGTH+1]="csql",

szUID[MA*NAME]="sa",

szAuthStr[MA*NAME]=";

//SQL语句

//直接SQL语句

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

//预编译SQL语句

UCHARpre_sql[29]="insertintotestvalues(",")";

//1.连接数据源

//1.环境句柄

retcode=SQLAllocHandle(SQL_HANDLE_ENV,NULL,&henv);

retcode=SQLSetEnvAttr(henv,SQL_ATTR_ODBC_VERSION,

(SQLPOINTER)SQL_OV_ODBC3,

SQL_IS_INTEGER);

//2.连接句柄

retcode=SQLAllocHandle(SQL_HANDLE_DBC,henv,&hdbc1);

retcode=SQLConnect(hdbc1,szDSN,4,szUID,2,szAuthStr,0);

//判断连接是否成功

if((retcode!

=SQL_SUCCESS)&&(retcode!

=SQL_SUCCESS_WITH_INFO)){

printf("连接失败!

\n");

}else{

//2.创立并执行一条或多条SQL语句

/*

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

2.创立SQL语句

3.执行语句

4.销毁语句

*/

retcode=SQLAllocHandle(SQL_HANDLE_STMT,hdbc1,&hstmt1);

//第一种方式

//直接执行

//添加操作

//SQLE*ecDirect(hstmt1,sql,37);

//第二种方式

//绑定参数方式

chara[200]="bbb";

charb[200]="200";

SQLINTEGERp=SQL_NTS;

//1预编译

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

//2绑定参数值

SQLBindParameter(hstmt1,1,SQL_PARAM_INPUT,SQL_C_CHAR,SQL_CHAR,200,0,&a,0,&p);

SQLBindParameter(hstmt1,2,SQL_PARAM_INPUT,SQL_C_CHAR,SQL_CHAR,200,0,&b,0,&p);

//3执行

SQLE*ecute(hstmt1);

printf("操作成功!

");

//释放语句句柄

SQLCloseCursor(hstmt1);

SQLFreeHandle(SQL_HANDLE_STMT,hstmt1);

}

//3.断开数据源

/*

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

2.释放连接句柄.

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

*/

SQLDisconnect(hdbc1);

SQLFreeHandle(SQL_HANDLE_DBC,hdbc1);

SQLFreeHandle(SQL_HANDLE_ENV,henv);

return(0);

}

//**************************list.cpp**************************

C代码

1.*include    

2.*include    

3.*include    

4.*include    

5.*include    

6.*include    

7.*include    

8.SQLHENV henv = SQL_NULL_HENV;     

9.SQLHDBC hdbc1 = SQL_NULL_HDBC;     

10.SQLHSTMT hstmt1 = SQL_NULL_HSTMT;     

11./*

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

13.*/

14.int main(){     

15.    RETCODE retcode;     

16.UCHAR   szDSN[SQL_MA*_DSN_LENGTH+1]   =   "csql",     

17.            szUID[MA*NAME]   =   "sa",     

18.            szAuthStr[MA*NAME]   =   ";    

19.UCHAR   sql1[39] = "select b from test where a = 'aaa'";  

20.UCHAR   sql2[35] = "select b from test where a = " ";  

21.UCHAR   sql3[19] = "select b from test";  

22.    retcode   =   SQLAllocHandle   (SQL_HANDLE_ENV,   NULL,   &henv);     

23.    retcode   =   SQLSetEnvAttr(henv,   SQL_ATTR_ODBC_VERSION,     

24.                  (SQLPOINTER)SQL_OV_ODBC3,     

25.                  SQL_IS_INTEGER);      

26.    retcode   =   SQLAllocHandle(SQL_HANDLE_DBC,   henv,   &hdbc1);     

27.//1.连接数据源

28.    retcode   =   SQLConnect(hdbc1,   szDSN,   4,   szUID,   2,   szAuthStr,   0);      

29.if   (   (retcode   !

=   SQL_SUCCESS)   &&   (retcode   !

=   SQL_SUCCESS_WITH_INFO)   )   {     

30.        printf("连接失败!

");  

31.    }   else   {     

32.//2.创立并执行一条或多条SQL语句

33./*

34.        1.分配一个语句句柄(statement handle)

35.        2.创立SQL语句

36.        3.执行语句

37.        4.销毁语句

38.        */

39.        retcode   =   SQLAllocHandle(SQL_HANDLE_STMT,   hdbc1,   &hstmt1);     

40.//第一种方式

41./*

42.        //直接执行

43.        SQLE*ecDirect (hstmt1,sql1,39);

44.        char list[5];

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

46.        SQLFetch(hstmt1);

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

48.        */

49.//第二种方式

50./*

51.        //绑定参数方式

52.        char a[200]="aaa";

53.        SQLINTEGER   p   =   SQL_NTS;

54.        //1.预编译

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

56.        //2.绑定参数值

57.        SQLBindParameter(hstmt1,1,SQL_PARAM_INPUT,SQL_C_CHAR,SQL_CHAR,200,0,&a,0,&p);

58.        //3.执行

59.        SQLE*ecute(hstmt1);

60.        char list[5];

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

62.        SQLFetch(hstmt1);

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

64.        */

65.//第三种方式全部输出

66./*

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

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

69.        3.取得行

70.        */

71.//3.检查结果记录(如果有的话)

72.        SQLE*ecDirect (hstmt1,sql3,19);  

73.char list[5];  

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

75.do{  

76.            retcode = SQLFetch(hstmt1);  

77.if(retcode == SQL_NO_DATA){  

78.break;  

79.            }  

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

81.        }while

(1);  

82.//释放语句句柄

83.        SQLCloseCursor (hstmt1);  

84.        SQLFreeHandle (SQL_HANDLE_STMT, hstmt1);  

85.    }     

86.//4.断开数据源

87./*

88.     1.断开与数据源的连接.

89.     2.释放连接句柄.

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

91.    */

92.    SQLDisconnect(hdbc1);      

93.    SQLFreeHandle(SQL_HANDLE_DBC, hdbc1);     

94.    SQLFreeHandle(SQL_HANDLE_ENV, henv);     

95.return(0);     

96.} 

创立数据源的过程代码:

*include

*inlcude

*include

*include

*include

*include

*defineSNO_LEN30

*defineNAME_LEN50

*defineDEPART_LEN100

*defineSSE*_LEN5

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

当前位置:首页 > 工程科技 > 能源化工

copyright@ 2008-2023 冰点文库 网站版权所有

经营许可证编号:鄂ICP备19020893号-2