C语言连接SQL数据库例子_第1页
C语言连接SQL数据库例子_第2页
C语言连接SQL数据库例子_第3页
C语言连接SQL数据库例子_第4页
C语言连接SQL数据库例子_第5页
已阅读5页,还剩6页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

1、连接到SAMPLE数据库,查询LASTNAME为JOHNSON的FIRSTNAME信息。    #include   <stdio.h>    #include   <stdlib.h>    #include   <string.h>    #include   "util.h"    #include   <sqlca.h>    EXEC  

2、SQL   INCLUDE   SQLCA;   (1)    main()       EXEC   SQL   BEGIN   DECLARE   SECTION;   (2)    char   firstname13;    char   userid9;    char   passwd19;    EXEC   SQL 

3、60; END   DECLARE   SECTION;    EXEC   SQL   CONNECT   TO   sample;   (3)    EXEC   SQL   SELECT   FIRSTNME   INTO   :firstname   (4)      FROM   employee    WHERE   LASTNAME  

4、; =   'JOHNSON'(4)    printf(   "First   name   =   %sn",   firstname   );    EXEC   SQL   CONNECT   RESET;   (5)    return   0;       上面是一个简单的静态嵌入SQL语句的应用程序。它包括了嵌入SQL的主要部分

5、:    (1)中的include   SQLCA语句定义并描述了SQLCA的结构。SQLCA用于应用程序和数据库之间的通讯,其中的SQLCODE返回SQL语句执行后的结果状态。    (2)在BEGIN   DECLARE   SECTION和END   DECLARE   SECTION之间定义了宿主变量。宿主变量可被SQL语句引用,也可以被C语言语句引用。它用于将程序中的数据通过SQL语句传给数据库管理器,或从数 据库管理器接收查询的结果。在SQL语句中,主变量前均有“:”标志以示区别。  

6、;  (3)在每次访问数据库之前必须做CONNECT操作,以连接到某一个数据库上。这时,应该保证数据库实例已经启动。    (4)是一条选择语句。它将表employee中的LASTNAME为“JOHNSON”的行数据的FIRSTNAME查出,并将它放在 firstname变量中。该语句返回一个结果。可以通过游标返回多个结果。当然,也可以包含update、insert和delete语句。    (5)最后断开数据库的连接。    从上例看出,每条嵌入式SQL语句都用EXEC   SQL开始,表明它是一条SQL语句。这

7、也是告诉预编译器在EXEC   SQL和“;”之间是嵌入SQL语句。如果一条嵌入式SQL语句占用多行,在C程序中可以用续行符“”。 c语言用vc连接sql server 20002009/11/02 09:34   sql server  1.提取单条记录/#import "C:Program FilesCommon FilesSystemADOmsado15.dll" /no_namespace,rename("EOF","adoEOF"),named_guidsCoInitialize(NU

8、LL);_bstr_t varSource="Provider=Microsoft.Jet.OLEDB.4.0;Data Source=*.mdb"/_bstr_t varSource="Data Source=myServerAddress;Initial Catalog=myDataBase;User Id=myUsername;Password=myPassword;"_ConnectionPtr m_pConnection(_uuidof(Connection);m_pConnection->Open(varSource,"&qu

9、ot;,"",adModeUnknow);_RecordsetPtr m_pSet(_uuid(Recordset);try m_pSet->Open(%1,m_pConnection.GetInterfacePtr()adOpenDynamic,adLockPessimistic,adCmdText);catch(_com_error *e)AfxMessageBox(e->ErrorMessage();return;_variant_t var;CString %2=""long fldc=m_pSet->GetFields()-&

10、gt;GetCount();long i=0;try m_pSet->MoveFirst();if(!m_pSet->adoEOF)for(i=0;i<fldc;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();delete e;/m_pSet->MoveFirst();CoUni

11、nitialize(NULL);2.单值比较/#import "C:Program FilesCommon FilesSystemADOmsado15.dll" /no_namespace,rename("EOF","adoEOF"),named_guidsCoInitialize(NULL);_bstr_t varSource="Provider=Microsoft.Jet.OLEDB.4.0;Data Source=*.mdb"/_bstr_t varSource="Data Source=mySer

12、verAddress;Initial Catalog=myDataBase;User Id=myUsername;Password=myPassword;"_ConnectionPtr m_pConnection(_uuidof(Connection);m_pConnection->Open(varSource,"","",adModeUnknow);_RecordsetPtr m_pSet(_uuid(Recordset);try m_pSet->Open(%1,m_pConnection.GetInterfacePtr()adO

13、penDynamic,adLockPessimistic,adCmdText);catch(_com_error *e)AfxMessageBox(e->ErrorMessage();return;_variant_t var;try m_pSet->MoveFirst();if(!m_pSet->adoEOF)var=m_pSet->GetCollect(long)0);var.ChangeType(VT_I2);int %3=Val;if(%3=%4)%5/m_pSet->MoveNext();catch(_com_error *e)AfxMes

14、sageBox(e->ErrorMessage();delete e;/m_pSet->MoveFirst();CoUninitialize(NULL);3.显示表格/#import "C:Program FilesCommon FilesSystemADOmsado15.dll" /no_namespace,rename("EOF","adoEOF"),named_guidsCoInitialize(NULL);_bstr_t varSource="Provider=Microsoft.Jet.OLEDB.4.

15、0;Data Source=*.mdb"/_bstr_t varSource="Data Source=myServerAddress;Initial Catalog=myDataBase;User Id=myUsername;Password=myPassword;"_ConnectionPtr m_pConnection(_uuidof(Connection);m_pConnection->Open(varSource,"","",adModeUnknow);/打开属性为默认(adModeRead(只读),adMo

16、deWrite(可写),adModeReadWrite(可读写)等)_RecordsetPtr m_pSet(_uuid(Recordset);try HRESULT hr=m_pSet->Open(%1,m_pConnection.GetInterfacePtr(),adOpenDynamic,adLockPessimistic,adCmdText);catch(_com_error *e)AfxMessageBox(e->ErrorMessage();if(SUCCESSED(hr)/表打开成功FieldsPtr p_fields=m_pSet->Fields;Field

17、Ptr p_field;_variant_t var_index;LPCSTR field_name;int index=0;_bstr_t bstr_field_name;int countfields=p_fields->GetCount();CString *Column=new CStringcountfields;CListCtrl *pList=(CListCtrl*)GetDlgItem(%1);/IDC_LIST_TABLEDATAVERIFY(pList);pList->DeleteAllItems();for(index=0;index<countfiel

18、ds;index+)var_index.vt=VT_I4;var_index.IVal=index;p_field=p_fields->Itemvar_index;bstr_field_name=p_field->GetName();field_name=(LPCSTR)bstr_field_name;Columnindex=field_name;int ColumnWidth=Columnindex.GetLength()*15;pList->InsertColumn(index,field_name,LVCFMT_CENTER,ColumnWidth);int i=0;_

19、bstr_t vCol;/pList->SetTextBkColor(RGB(122,200,122);/pList->SetTextColor(RGB(0,0,200);while(!m_pSet->adoEOF)pList->Insert(i,atoi(i);for(int j=0;j<countfields;j+)vCol=m_pSet->GetCollect(long)j);pList->SetItemText(i,j,vCol);m_pSet->MoveNext();i+;CoUninitialize(NULL); C语言与SQL SE

20、RVER数据库1.使用C语言来操作SQL SERVER数据库,采用ODBC开放式数据库连接进行数据的添加,修改,删除,查询等操作。 step1:启动SQLSERVER服务,例如:HNHJ,开始菜单 ->运行 ->net start mssqlserver step2:打开企业管理器,建立数据库test,在test库中建立test表(a varchar(200),b varchar(200) step3:建立系统DSN,开始菜单 ->运行 ->odbcad32,  添加->SQL SERVER 名称:csq

21、l,服务器:HNHJ 使用用户使用登录ID和密码的SQLSERVER验证,登录ID:sa,密码:   更改默认的数据库为:test . 测试数据源,测试成功,即DNS添加成功。2.cpp文件完整代码/#save.cpp#C代码  1. #include <stdio.h>      2. #include <string.h>      3. #include <windows

22、.h>      4. #include <sql.h>      5. #include <sqlext.h>      6. #include <sqltypes.h>      7. #include <odbcss.h>      8.  

23、; 9. sqlhenv henv = sql_null_henv;      10. sqlhdbc hdbc1 = sql_null_hdbc;      11. sqlhstmt hstmt1 = sql_null_hstmt;      12.   13. /*  14.    &

24、#160;cpp文件功能说明:  15.     1.数据库操作中的添加,修改,删除,主要体现在SQL语句上  16.     2.采用直接执行方式和参数预编译执行方式两种  17. */  18. int main()      19.     RETCODE retcode;      20.  

25、;   UCHAR   szDSNSQL_MAX_DSN_LENGTH+1   =   "csql",      21.             szUIDMAXNAME   =   "sa", &#

26、160;    22.             szAuthStrMAXNAME   =   ""     23.     /SQL语句   24.         /直接SQL语句 

27、60; 25.     UCHAR   sql37 = "insert into test values('aaa','100')"   26.         /预编译SQL语句   27.     UCHAR   pre_s

28、ql29 = "insert into test values(?,?)"   28.     /1.连接数据源   29.         /1.环境句柄   30.     retcode   =   SQLAllocHandle &#

29、160; (SQL_HANDLE_ENV,   NULL,   &henv);      31.     retcode   =   SQLSetEnvAttr(henv,   SQL_ATTR_ODBC_VERSION,      32.     &

30、#160;             (SQLPOINTER)SQL_OV_ODBC3,      33.                   SQL_IS_INTEGER);      34

31、.         /2.连接句柄     35.     retcode   =   SQLAllocHandle(SQL_HANDLE_DBC,   henv,   &hdbc1);      36.     retc

32、ode   =   SQLConnect(hdbc1,   szDSN,   4,   szUID,   2,   szAuthStr,   0);       37.     /判断连接是否成功   38.   

33、60; if   (   (retcode   !=   SQL_SUCCESS)   &&   (retcode   !=   SQL_SUCCESS_WITH_INFO)   )           

34、39.         printf("连接失败!n");   40.        else         41.         /2.创建并执行一条或多条SQL语句   42.    

35、0;    /*  43.         1.分配一个语句句柄(statement handle)  44.         2.创建SQL语句  45.         3.执行语句  46.       

36、  4.销毁语句  47.         */  48.         retcode   =   SQLAllocHandle(SQL_HANDLE_STMT,   hdbc1,   &hstmt1);     &#

37、160;49.         /第一种方式   50.         /直接执行   51.         /添加操作   52.         /SQLExecDirect (hstmt1,sql,3

38、7);   53.            54.         /第二种方式   55.         /绑定参数方式   56.         char a200="bbb

39、"   57.         char b200="200"   58.         SQLINTEGER   p   =   SQL_NTS;   59.        &

40、#160;/1预编译   60.         SQLPrepare(hstmt1,pre_sql,29); /第三个参数与数组大小相同,而不是数据库列相同   61.         /2绑定参数值   62.         SQLBindParameter(hstmt1,1,SQL

41、_PARAM_INPUT,SQL_C_CHAR,SQL_CHAR,200,0,&a,0,&p);   63.         SQLBindParameter(hstmt1,2,SQL_PARAM_INPUT,SQL_C_CHAR,SQL_CHAR,200,0,&b,0,&p);   64.         /3 执行   65. &#

42、160;       SQLExecute(hstmt1);   66.            67.         printf("操作成功!");   68.         /释放语句句柄  

43、 69.         SQLCloseCursor (hstmt1);   70.         SQLFreeHandle (SQL_HANDLE_STMT, hstmt1);   71.        72.       

44、0;   73.     /3.断开数据源   74.     /*  75.      1.断开与数据源的连接.  76.      2.释放连接句柄.  77.      3.释放环境句柄 (如果不再需要在这个环境中作更多连接)  78.    

45、 */  79.     SQLDisconnect(hdbc1);       80.     SQLFreeHandle(SQL_HANDLE_DBC, hdbc1);      81.     SQLFreeHandle(SQL_HANDLE_ENV, henv);     

46、; 82.     return(0);      83.      #include <stdio.h> #include <string.h> #include <windows.h> #include <sql.h> #include <sqlext.h> #include <sqltypes.h> #include <odbcss.h> SQLHENV h

47、env = SQL_NULL_HENV; SQLHDBC hdbc1 = SQL_NULL_HDBC; SQLHSTMT hstmt1 = SQL_NULL_HSTMT; /*cpp文件功能说明:1.数据库操作中的添加,修改,删除,主要体现在SQL语句上2.采用直接执行方式和参数预编译执行方式两种*/int main() RETCODE retcode; UCHARszDSNSQL_MAX_DSN_LENGTH+1 = "csql", szUIDMAXNAME = "sa", szAuthStrMAXNAME = "" /SQL语句/

48、直接SQL语句UCHARsql37 = "insert into test values('aaa','100')"/预编译SQL语句UCHARpre_sql29 = "insert into test values(?,?)"/1.连接数据源/1.环境句柄retcode = SQLAllocHandle (SQL_HANDLE_ENV, NULL, &henv); retcode = SQLSetEnvAttr(henv, SQL_ATTR_ODBC_VERSION, (SQLPOINTER)SQL_OV_ODB

49、C3, 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.分配一个语句

50、句柄(statement handle)2.创建SQL语句3.执行语句4.销毁语句*/retcode = SQLAllocHandle(SQL_HANDLE_STMT, hdbc1, &hstmt1); /第一种方式/直接执行/添加操作/SQLExecDirect (hstmt1,sql,37);/第二种方式/绑定参数方式char a200="bbb"char b200="200"SQLINTEGER p = SQL_NTS;/1预编译SQLPrepare(hstmt1,pre_sql,29); /第三个参数与数组大小相同,而不是数据库列相同/2

51、绑定参数值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 执行SQLExecute(hstmt1);printf("操作成功!");/释放语句句柄SQLCloseCursor (hstmt1);SQLFreeHandle (SQL_HANDLE_STMT, hstmt1); /3.

52、断开数据源/* 1.断开与数据源的连接. 2.释放连接句柄. 3.释放环境句柄 (如果不再需要在这个环境中作更多连接) */SQLDisconnect(hdbc1); SQLFreeHandle(SQL_HANDLE_DBC, hdbc1); SQLFreeHandle(SQL_HANDLE_ENV, henv); return(0);  /#list.cpp#C代码  1. #include <stdio.h>      2. #include <string.h> &

53、#160;    3. #include <windows.h>      4. #include <sql.h>      5. #include <sqlext.h>      6. #include <sqltypes.h>      7. #include <

54、;odbcss.h>      8.   9. SQLHENV henv = SQL_NULL_HENV;      10. SQLHDBC hdbc1 = SQL_NULL_HDBC;      11. SQLHSTMT hstmt1 = SQL_NULL_HSTMT;      

55、12.   13. /*  14.     查询SQLSERVER数据库,1.条件查询,2.直接查询全部  15. */  16. int main()      17.     RETCODE retcode;      18.     UCHAR   szDSNSQ

56、L_MAX_DSN_LENGTH+1   =   "csql",      19.             szUIDMAXNAME   =   "sa",      20.    

57、0;        szAuthStrMAXNAME   =   ""     21.     UCHAR   sql139 = "select b from test where a = 'aaa'"

58、  22.     UCHAR   sql235 = "select b from test where a = ? "   23.     UCHAR   sql319 = "select b from test"  

59、 24.        25.     retcode   =   SQLAllocHandle   (SQL_HANDLE_ENV,   NULL,   &henv);      26.     retcode  

60、60;=   SQLSetEnvAttr(henv,   SQL_ATTR_ODBC_VERSION,      27.                   (SQLPOINTER)SQL_OV_ODBC3,      28.   

61、0;               SQL_IS_INTEGER);       29.     retcode   =   SQLAllocHandle(SQL_HANDLE_DBC,   henv,   &hdbc1);

62、      30.     /1.连接数据源   31.     retcode   =   SQLConnect(hdbc1,   szDSN,   4,   szUID,   2,   szAuthStr,  

63、60;0);       32.     if   (   (retcode   !=   SQL_SUCCESS)   &&   (retcode   !=   SQL_SUCCESS_WITH_INFO)   

64、)         33.         printf("连接失败!");   34.        else         35.         /2.创建并执行

65、一条或多条SQL语句   36.         /*  37.         1.分配一个语句句柄(statement handle)  38.         2.创建SQL语句  39.         3.执行

66、语句  40.         4.销毁语句  41.         */  42.         retcode   =   SQLAllocHandle(SQL_HANDLE_STMT,   hdbc1, 

67、60; &hstmt1);      43.         /第一种方式   44.         /*  45.         /直接执行  46.         

68、;SQLExecDirect (hstmt1,sql1,39);  47.         char list5;  48.         SQLBindCol(hstmt1, 1, SQL_C_CHAR, list, 5, 0);  49.         

69、;SQLFetch(hstmt1);  50.         printf("%sn",list);  51.         */  52.            53.         /第二种

70、方式   54.         /*  55.         /绑定参数方式  56.         char a200="aaa"  57.         SQLINTEGER &

71、#160; p   =   SQL_NTS;  58.         /1.预编译  59.         SQLPrepare(hstmt1,sql2,35); /第三个参数与数组大小相同,而不是数据库列相同  60.         /2.绑

72、定参数值  61.         SQLBindParameter(hstmt1,1,SQL_PARAM_INPUT,SQL_C_CHAR,SQL_CHAR,200,0,&a,0,&p);  62.         /3.执行  63.         SQLExecute(hstmt1);  64.

73、         char list5;  65.         SQLBindCol(hstmt1, 1, SQL_C_CHAR, list, 5, 0);  66.         SQLFetch(hstmt1);  67.    

74、     printf("%sn",list);  68.         */  69.   70.         /第三种方式全部输出   71.         /*  72.   

75、      1.确认一个结果集是否可用。  73.         2.将结果集的列绑定在适当的变量上。  74.         3.取得行  75.         */  76.      &#

76、160;  /3.检查结果记录(如果有的话)   77.         SQLExecDirect (hstmt1,sql3,19);   78.         char list5;   79.         SQLBindCol(hstmt1,

77、60;1, SQL_C_CHAR, list, 5, 0);   80.         do   81.             retcode = SQLFetch(hstmt1);   82.       

78、0;     if(retcode = SQL_NO_DATA)   83.                 break;   84.                85.  &#

79、160;          printf("%sn",list);   86.         while(1);   87.            88.         /释放

80、语句句柄   89.         SQLCloseCursor (hstmt1);   90.         SQLFreeHandle (SQL_HANDLE_STMT, hstmt1);   91.        92.      

81、;     93.     94.     /4.断开数据源   95.     /*  96.      1.断开与数据源的连接.  97.      2.释放连接句柄.  98.      3.释放环境句柄 (如果不再需要在这个环境中作

82、更多连接)  99.     */  100.     SQLDisconnect(hdbc1);       101.     SQLFreeHandle(SQL_HANDLE_DBC, hdbc1);      102.     SQLFreeHandle(SQL_HANDLE_ENV

83、, henv);      103.     return(0);      104.  创建数据源的过程代码:#include<stdlib.h>#inlcude<stdio.h>#include<windows.h>#include<sql.h>#include<sqlext.h>#include<Sqltypes.h>#define SNO_LEN 30#de

84、fine NAME_LEN 50#define DEPART_LEN 100#define SSEX_LEN 5int main() /*Step 1 定义句柄和变量 */ /以king开头的表示的是连接KingbaseES的变量 /以server开头的表示的是连接SQLSERVER的变量SQLHENV    kinghenv,serverhenv;SQLHDBC    kinghdbc,serverhdbc;SQLHSTMT   kinghstmt,serverhstmt;SQLRE

85、TURN  ret;SQLCHAR    sNameNAME_LEN,sDepartDEPART_LEN,           sSexSSEX_LEN,sSnoSNO_LEN;SQLINTEGER sAge;SQLINTEGRR cbAge=0,cbSno=SQL_NTS,cbSex=SQL_NTS,           cbName=SQL_NTS,cb

86、Depart=SQL_NTS; /*Step 2 初始化环境*/ret=SQLAllocHandle(SQL_HANDLE_ENV,SQL_NULL_HANDLE,&kinghenv);ret=SQLAllocHandle(SQL_HANDLE_ENV,SQL_NULL_HANDLE,&setverhenv);ret=SQLSetEnvAttr(kinghenv,SQL_ATTR_ODBC_VERSION,(void*)SQL_OV_ODBC3,0);ret=SQLSetEnvAttr(serverhenv,SQL_ATTR_ODBC_VERSION,(void*)S

87、QL_OV_ODBC3,0); /*Step 3 建立连接*/ret=SQLAllocHandle(SQL_HANDLE_DBC,kinghenv,&kinghdbc);ret=SQLAllocHandle(SQL_HANDLE_DBC,serverhenv,&serverhdbc);ret=SQLConnect(kinghdbc,"KingbaseES ODBC",SQL_NTS,"SYSTEM",               SQL_NTS,"MANAGER",SQL_NTS);if(!SQL_SUCCEEDED(ret)  return -1;  /连接失败时返回错误值;ret=SQLConnect(serverhdbc,"SQLServer",SQL_NTS,"sa",         

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论