如何学习数据库知识?

我是用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,&amp;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-&gt;put_ActiveConnection(vtConnectionString);   
 58  
 59pCmdPtr-&gt;CommandType = adCmdStoredProc; //CALL SQL SP   
 60pCmdPtr-&gt;CommandText = szTypes ; //YOU SP NAME   
 61hr = pCmdPtr-&gt;Parameters-&gt;Refresh();   
 62  
 63long lBound,uBound ;   
 64HRESULT hresult ;   
 65// Getting Safe Array's Lower and Upper Bounds   
 66hresult = SafeArrayGetLBound(pSPFields, 1, &amp;lBound);   
 67hresult = SafeArrayGetUBound(pSPFields, 1, &amp;uBound);   
 68  
 69variant_t vtParamVal;   
 70_variant_t Index;   
 71Index.vt = VT_I2;   
 72Index.iVal = 1 ;   
 73for (long iElements=lBound;iElements&lt;=uBound;iElements++)   
 74{   
 75hresult = SafeArrayGetElement(pSPFields, &amp;iElements, &amp;vtParamVal);   
 76pCmdPtr-&gt;GetParameters()-&gt;GetItem(Index)-&gt;PutValue(vtParamVal) ;   
 77Index.iVal++ ;   
 78}   
 79  
 80//Execute current Stored Procedure   
 81_variant_t vEffected ;   
 82pRecordset = pCmdPtr-&gt;Execute(&amp;vEffected,NULL,NULL);   
 83if (pRecordset-&gt;BOF ¦ ¦ pRecordset-&gt;EndOfFile)   
 84throw ;   
 85// Get result set in the form of array   
 86vtResultRows = pRecordset-&gt;GetRows(-1);   
 87return vtResultRows.Detach() ;   
 88}   
 89catch(_com_error &amp;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-&gt;put_ActiveConnection(vtConnectionString);   
112  
113pCmdPtr-&gt;CommandType = adCmdStoredProc;   
114pCmdPtr-&gt;CommandText = szTypes ;   
115hr = pCmdPtr-&gt;Parameters-&gt;Refresh();   
116  
117long lBound,uBound;   
118HRESULT hresult;   
119// Getting Safe Array's Lower and Upper Bounds   
120hresult = SafeArrayGetLBound(pSPFields, 1, &amp;lBound);   
121hresult = SafeArrayGetUBound(pSPFields, 1, &amp;uBound);   
122  
123variant_t vtParamVal;   
124_variant_t Index;   
125Index.vt = VT_I2;   
126Index.iVal = 1 ;   
127for (long iElements=lBound;iElements&lt;=uBound;iElements++)   
128{   
129hresult = SafeArrayGetElement(pSPFields, &amp;iElements, &amp;vtParamVal);   
130pCmdPtr-&gt;GetParameters()-&gt;GetItem(Index)-&gt;PutValue(vtParamVal) ;   
131Index.iVal++ ;   
132}   
133  
134_variant_t vEffected ;   
135pCmdPtr-&gt;Execute(&amp;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-&gt;Parameters-&gt;Item["RETURN_VALUE"]-&gt;Value ;   
140}   
141catch(_com_error &amp;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>
Published At
Categories with 数据库类
Tagged with
comments powered by Disqus