我是用vc编码的程序员,想学数据库技术,希望学会使用vc开发数据库。
于是我开始学习数据库的理论,然后又学sql语言,主要是在学语法知识和存贮过程等等。但是,我发现sql语言和c++好像没有关系呀,除了基本语法外就是存储过程、触发器--都和vc没有关系。
是不是我学习sql语言的方向不对呢?(比如我应该去学odbc之类的东西)
---------------------------------------------------------------
有呀!!
vc调sql
1.配置ODBC,建立ODBC和SQL SERVER的连接ODBCTEST
2.在VC++通过该ODBC调用SQL SERVER的STORED PROCEDURE(szTypes )
#include "stdafx.h"
#include "DatabaseServer.h"
#include
1<stdarg.h>
2
3#ifdef _DEBUG
4#undef THIS_FILE
5static char THIS_FILE[]=__FILE__;
6#define new DEBUG_NEW
7#endif
8
9//////////////////////////////////////////////////////////////////////
10// Construction/Destruction
11//////////////////////////////////////////////////////////////////////
12
13CDatabaseServer::CDatabaseServer()
14{
15
16}
17
18CDatabaseServer::~CDatabaseServer()
19{
20
21}
22
23bool CDatabaseServer::getConnectionString(char *szConnectionString)
24{
25char szServerName[MAX_COMPUTERNAME_LENGTH + 1];
26DWORD dwSize=sizeof(szServerName) ;
27if(!GetComputerName(szServerName,&dwSize))
28return false ;
29
30
31if(!szConnectionString)
32return false ;
33
34char szUserName[] = "SA";
35char szPassword[] = "";
36char szDatabase[] = "IPLOMA";//ADD YOU DATEBASE NAME
37
38sprintf(szConnectionString,"DSN=ODBCTEST;uid=%s;pwd=%s;",szServerName,szDatabase,szUserName,szPassword); //建立CONNECTION STRING
39
40return true;
41}
42
43VARIANT CDatabaseServer::getExecStoredProcedure(char *szTypes,SAFEARRAY *pSPFields)
44{
45_variant_t vtResultRows;
46try
47{
48_CommandPtr pCmdPtr;
49_RecordsetPtr pRecordset;
50HRESULT hr ;
51
52hr = pCmdPtr.CreateInstance(__uuidof(Command));
53
54char szConnectionString[255];
55getConnectionString(szConnectionString);
56_variant_t vtConnectionString(szConnectionString);
57pCmdPtr->put_ActiveConnection(vtConnectionString);
58
59pCmdPtr->CommandType = adCmdStoredProc; //CALL SQL SP
60pCmdPtr->CommandText = szTypes ; //YOU SP NAME
61hr = pCmdPtr->Parameters->Refresh();
62
63long lBound,uBound ;
64HRESULT hresult ;
65// Getting Safe Array's Lower and Upper Bounds
66hresult = SafeArrayGetLBound(pSPFields, 1, &lBound);
67hresult = SafeArrayGetUBound(pSPFields, 1, &uBound);
68
69variant_t vtParamVal;
70_variant_t Index;
71Index.vt = VT_I2;
72Index.iVal = 1 ;
73for (long iElements=lBound;iElements<=uBound;iElements++)
74{
75hresult = SafeArrayGetElement(pSPFields, &iElements, &vtParamVal);
76pCmdPtr->GetParameters()->GetItem(Index)->PutValue(vtParamVal) ;
77Index.iVal++ ;
78}
79
80//Execute current Stored Procedure
81_variant_t vEffected ;
82pRecordset = pCmdPtr->Execute(&vEffected,NULL,NULL);
83if (pRecordset->BOF ¦ ¦ pRecordset->EndOfFile)
84throw ;
85// Get result set in the form of array
86vtResultRows = pRecordset->GetRows(-1);
87return vtResultRows.Detach() ;
88}
89catch(_com_error &e)
90{
91ATLTRACE((LPCSTR)e.Description());
92}
93vtResultRows.vt = VT_EMPTY ;
94return vtResultRows.Detach();
95}
96
97long CDatabaseServer::setExecStoredProcedure(char *szTypes,SAFEARRAY *pSPFields)
98{
99_variant_t vtResultRows;
100try
101{
102_CommandPtr pCmdPtr;
103_RecordsetPtr pRecordset;
104HRESULT hr ;
105
106hr = pCmdPtr.CreateInstance(__uuidof(Command));
107
108char szConnectionString[255];
109getConnectionString(szConnectionString);
110_variant_t vtConnectionString(szConnectionString);
111pCmdPtr->put_ActiveConnection(vtConnectionString);
112
113pCmdPtr->CommandType = adCmdStoredProc;
114pCmdPtr->CommandText = szTypes ;
115hr = pCmdPtr->Parameters->Refresh();
116
117long lBound,uBound;
118HRESULT hresult;
119// Getting Safe Array's Lower and Upper Bounds
120hresult = SafeArrayGetLBound(pSPFields, 1, &lBound);
121hresult = SafeArrayGetUBound(pSPFields, 1, &uBound);
122
123variant_t vtParamVal;
124_variant_t Index;
125Index.vt = VT_I2;
126Index.iVal = 1 ;
127for (long iElements=lBound;iElements<=uBound;iElements++)
128{
129hresult = SafeArrayGetElement(pSPFields, &iElements, &vtParamVal);
130pCmdPtr->GetParameters()->GetItem(Index)->PutValue(vtParamVal) ;
131Index.iVal++ ;
132}
133
134_variant_t vEffected ;
135pCmdPtr->Execute(&vEffected,NULL,NULL);
136
137// We Are Expecting That Stored Procedures Return ID for Entity to which
138// NSERT/UPDATE/DELETE operation is being performed
139return (long)pCmdPtr->Parameters->Item["RETURN_VALUE"]->Value ;
140}
141catch(_com_error &e)
142{
143ATLTRACE((LPCSTR)e.Description());
144}
145return 0;
146}
147
148\---------------------------------------------------------------
149
150看一本书如: VC++使用SQLSERVER 或BCB 使用SQLSERVER
151之类的书,你就明白了、
152
153\---------------------------------------------------------------
154
155方向应该没错的,数据库技术的基础是数据库的理论,工具是sql语言。至于和前端语言(vc、vb、delphi、asp....)的结合,可以学一下ado。
156
157(个人意见)
158\---------------------------------------------------------------
159
160不过说VC+数据库的书市面上好像真的不多
161有一本铁道出版社的书很不错,书名忘了,里面写的颇详细。
162\----------------------------------------------------------------
163ado、odbc之类的东东,说到底还是在通过sql处理数据库,对吧?
164要学好数据库还是得先学好sql语言</stdarg.h>