C语言连接SQL数据库例子.docx
- 文档编号:26068740
- 上传时间:2023-06-17
- 格式:DOCX
- 页数:20
- 大小:30.89KB
C语言连接SQL数据库例子.docx
《C语言连接SQL数据库例子.docx》由会员分享,可在线阅读,更多相关《C语言连接SQL数据库例子.docx(20页珍藏版)》请在冰豆网上搜索。
C语言连接SQL数据库例子
连接到SAMPLE数据库,查询LASTNAME为JOHNSON的FIRSTNAME信息。
#include
#include
#include
#include "util.h"
#include
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程序中可以用续行符“\”。
c语言用vc连接sqlserver2000
2009/11/0209:
34 [sqlserver ]
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;InitialCatalog=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.GetInterfacePtr()
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;InitialCatalog=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.GetInterfacePtr() 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 CoInitialize(NULL); _bstr_tvarSource="Provider=Microsoft.Jet.OLEDB.4.0;DataSource=*.mdb"; //_bstr_tvarSource="DataSource=myServerAddress;InitialCatalog=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.GetInterfacePtr(), 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*)GetDlgItem(%%1);//IDC_LIST_TABLEDATA VERIFY(pList); pList->DeleteAllItems(); for(index=0;index { var_index.vt=VT_I4; var_index.IVal=index; p_field=p_fields->Item[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->SetItemText(i,j,vCol); } m_pSet->MoveNext(); i++; } CoUninitialize(NULL); 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. 9.sqlhenv henv = sql_null_henv; 10.sqlhdbc hdbc1 = sql_null_hdbc; 11.sqlhstmt hstmt1 = sql_null_hstmt; 12. 13./* 14. cpp文件功能说明: 15. 1.数据库操作中的添加,修改,删除,主要体现在SQL语句上 16. 2.采用直接执行方式和参数预编译执行方式两种 17.*/ 18.int main(){ 19. RETCODE retcode; 20. UCHAR szDSN[SQL_MAX_DSN_LENGTH+1] = "csql", 21. szUID[MAXNAME] = "sa", 22. szAuthStr[MAXNAME] = ""; 23. //SQL语句 24. //直接SQL语句 25. UCHAR sql[37] = "insert into test values('aaa','100')"; 26. //预编译SQL语句 27. UCHAR pre_sql[29] = "insert into test values(? ? )"; 28. //1.连接数据源 29. //1.环境句柄 30. retcode = SQLAllocHandle (SQL_HANDLE_ENV, NULL, &henv); 31. retcode = SQLSetEnvAttr(henv, SQL_ATTR_ODBC_VERSION, 32. (SQLPOINTER)SQL_OV_ODBC3, 33. SQL_IS_INTEGER); 34. //2.连接句柄 35. retcode = SQLAllocHandle(SQL_HANDLE_DBC, henv, &hdbc1); 36. retcode = SQLConnect(hdbc1, szDSN, 4, szUID, 2, szAuthStr, 0); 37. //判断连接是否成功 38. if ( (retcode ! = SQL_SUCCESS) && (retcode ! = SQL_SUCCESS_WITH_INFO) ) { 39. printf("连接失败! \n"); 40. } else { 41. //2.创建并执行一条或多条SQL语句 42. /* 43. 1.分配一个语句句柄(statement handle) 44. 2.创建SQL语句 45. 3.执行语句 46. 4.销毁语句 47. */ 48. retcode = SQLAllocHandle(SQL_HANDLE_STMT, hdbc1, &hstmt1); 49. //第一种方式 50. //直接执行 51. //添加操作 52. //SQLExecDirect (hstmt1,sql,37); 53. 54. //第二种方式 55. //绑定参数方式 56. char a[200]="bbb"; 57. char b[200]="200"; 58. SQLINTEGER p = SQL_NTS; 59. //1预编译 60. SQLPrepare(hstmt1,pre_sql,29); //第三个参数与数组大小相同,而不是数据库列相同 61. //2绑定参数值 62. SQLBindParameter(hstmt1,1,SQL_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. SQLExecute(hstmt1); 66. 67. printf("操作成功! "); 68. //释放语句句柄 69. SQLCloseCursor (hstmt1); 70. SQLFreeHandle (SQL_HANDLE_STMT, hstmt1); 71. 72. } 73. //3.断开数据源 74. /* 75. 1.断开与数据源的连接. 76. 2.释放连接句柄. 77. 3.释放环境句柄 (如果不再需要在这个环境中作更多连接) 78. */ 79. SQLDisconnect(hdbc1); 80. SQLFreeHandle(SQL_HANDLE_DBC, hdbc1); 81. SQLFreeHandle(SQL_HANDLE_ENV, henv); 82. return(0); 83.} #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_MAX_DSN_LENGTH+1]="csql", szUID[MAXNAME]="sa", szAuthStr[MAXNAME]=""; //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); //第一种方式 //直接执行
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 语言 连接 SQL 数据库 例子