C语言连接SQL数据库例子.docx
《C语言连接SQL数据库例子.docx》由会员分享,可在线阅读,更多相关《C语言连接SQL数据库例子.docx(24页珍藏版)》请在冰点文库上搜索。
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);
//第一种方式
//直接执行
/