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