哎呀妈呀!小伙伴们有没有想过要用C语言去链接上数据库呢???嘿嘿嘿,没错,就是OleDbConnection啦,那么今天蒟蒻我就来给大家整整这个操作吧!
首先,我们得知道什么是OleDbConnection?它可是一个能让我们用C语言去链接各种数据库的好东西嘞!它实现了OLE DB协议的一组类,允许以 OleDbCommand、OleDbDataAdaptor 和 OleDbDataReader 等方式使用 OLE DB 访问数据库,妙不可言吧!
好的,既然我们要使用OleDbConnection进行数据库链接,那么我们得先开动手指打一下代码了。(下面的代码是针对Microsoft Access数据库的,其他数据库需要修改ConnectionString参数)
首先,我们需要引入相应的头文件:
#include #include #include #include #include #include #include 接下来,需要定义一些宏和变量,详细的意思注释如下: #define BUFFER_LEN 64 #define TABLENAME _T("PersonInfo") //数据库中的表名 #define STMTLEN 100 TCHAR szProvider[] = _T("Microsoft.Jet.OLEDB.4.0"); TCHAR szDataSource[] = _T("D:\\Data\\students.mdb"); //数据库文件路径 TCHAR szPersist[] = _T("Persist Security Info=False"); TCHAR szConnectString[BUFFER_LEN]; DBPROPIDSET rgPropSet[1]; DWORD dwStatus; HRESULT hr; IDBInitialize *pIDBInitialize = NULL; IOpenRowset *pIOpenRowset = NULL; IDBCreateSession *pIDBCreateSession; ISessionProperties *pISessionProperties = NULL; DBID dbidTable; DBID dbidCol; HACCESSOR hAccessor; 这里面涉及了一些重要的变量和宏的定义,要认真看哟! 然后,我们需要定义一个函数,这个函数是用来建立连接的,代码如下: HRESULT EstablishConnection() { HRESULT hr; TCHAR strFilePath[MAX_PATH] = {0}; // 创建工作空间 hr = CoCreateInstance(CLSID_MSDAINITIALIZE, NULL, CLSCTX_INPROC_SERVER, IID_IDBInitialize, (LPVOID *)&pIDBInitialize); if (FAILED(hr)) { printf("Create workspace failed!\n"); return hr; } // 设置数据源的属性 hr = pIDBInitialize -> Initialize(); if(FAILED(hr)) { printf("Initialize() has failed!\n"); return hr; } // 获取IDBCreateSession接口 hr = pIDBInitialize -> QueryInterface( IID_IDBCreateSession, (void**)&pIDBCreateSession ); if (FAILED(hr)) { printf("Query interface of IDBCreateSession fialed!\n"); return hr; } //建立连接的字符串 _stprintf_s(szConnectString, BUFFER_LEN, _T("Provider=%s;Data Source=%s;Jet OLEDB:Database Password=; %s"),szProvider, szDataSource, szPersist); hr = pIDBCreateSession -> CreateSession(NULL, IID_ISessionProperties, (IUnknown **)&pISessionProperties); if (FAILED(hr)) { printf("CreateSession() failed!\n"); return hr; } //设置数据源属性 hr = pISessionProperties -> SetProperty(DBPROPSET_DBINIT, DBPROP_AUTH_PERSIST_SENSITIVE_AUTHINFO, VARIANT_TRUE); if (FAILED(hr)) { printf("Set DBPROP_AUTH_PERSIST_SENSITIVE_AUTHINFO is failed!\n"); return hr; } hr = pISessionProperties -> SetProperty(DBPROPSET_DBINIT, DBPROP_INIT_PROMPT, (int)FALSE); if (FAILED(hr)) { printf("Set DBPROP_INIT_PROMPT is failed!\n"); return hr; } hr = pISessionProperties -> SetProperty(DBPROPSET_DBINIT, DBPROP_INIT_DATASOURCE, szDataSource); if (FAILED(hr)) { printf("Set DBPROP_INIT_DATASOURCE is failed!\n"); return hr; } hr = pISessionProperties -> SetProperty(DBPROPSET_DBINIT, DBPROP_INIT_PROVIDERSTRING, szConnectString); if (FAILED(hr)) { printf("Set DBPROP_INIT_PROVIDERSTRING is failed!\n"); return hr; } return hr; } 这个函数是我们建立连接的核心所在,在调用此函数之前,需要先设置一些参数以及数据源的属性等。 最后,我们再写一个函数,来释放资源,代码如下: void ReleaseResource() { if (hAccessor) { pIOpenRowset ->ReleaseAccessor(hAccessor, NULL); hAccessor = NULL; } if (pIOpenRowset) { pIOpenRowset -> Release(); pIOpenRowset = NULL; } if (pIDBCreateSession) { pIDBCreateSession -> Release(); pIDBCreateSession = NULL; } if (pIDBInitialize) { pIDBInitialize -> Uninitialize(); pIDBInitialize -> Release(); pIDBInitialize = NULL; } if (pISessionProperties) { pISessionProperties -> Release(); pISessionProperties = NULL; } } 那么,我们现在就可以愉快地使用OleDbConnection 来链接上我们的数据库啦!下面给大家一个简单的查询的例子作为参考: int main(void) { HRESULT hr; IRowset *pIRowset = NULL; HROW hRow; HACCESSOR hAccessor; ULONG ulTableType = 0; DBBINDING dbBind[3]; BYTE buffer[1024] = {0}; TCHAR stmt[100] = _T("Select * from PersonInfo"); TCHAR tchName[100] = { 0 }, tchSex[100] = { 0 }, tchAge[5] = { 0 }; TCHAR strDataSource[MAX_PATH] = { 0 }; //建立连接 hr = EstablishConnection(); if (FAILED(hr)) { printf("EstablishConnection() error!\n"); return -1; } //获取IOpenRowset指针 hr = pIDBCreateSession -> GetDataSource(NULL, IID_IOpenRowset, (IUnknown **)&pIOpenRowset); if (FAILED(hr)) { printf("GetDataSource() failed!\n"); return -1; } //执行查询 hr = pIOpenRowset -> OpenRowset(NULL, &dbidTable, NULL, IID_IRowset, 0, NULL, (IUnknown **)&pIRowset); if (FAILED(hr)) { printf("OpenRowset() failed!\n"); return -1; } //为检索结果创建访问方法 hr = pIRowset -> GetNextRows(0, 0, 1, &ulTableType, &hRow); if (FAILED(hr)) { printf("GetNextRows() failed!\n"); return -1; } //设置访问器 dbBind[0].iOrdinal = 1; dbBind[0].wType = DBTYPE_WSTR; dbBind[0].pTypeInfo= NULL; dbBind[0].pBindExt = NULL; dbBind[0].pObject = NULL; dbBind[0].dwPart = DBPART_VALUE | DBPART_LENGTH | DBPART_STATUS; dbBind[0].pVarData = NULL; dbBind[0].obLength = 0; dbBind[0].obStatus = 0; dbBind[0].cbMaxLen = sizeof(tchName); dbBind[0].obValue = 0; dbBind[1].iOrdinal = 2; dbBind[1].wType = DBTYPE_WSTR; dbBind[1].pTypeInfo= NULL; dbBind[1].pBindExt = NULL; dbBind[1].pObject = NULL; dbBind[1].dwPart = DBPART_VALUE | DBPART_LENGTH | DBPART_STATUS; dbBind[1].pVarData = NULL; dbBind[1].obLength = sizeof(tchName); dbBind[1].obStatus = dbBind[1].obLength + dbBind[1].cbMaxLen; dbBind[1].cbMaxLen = sizeof(tchSex); dbBind[1].obValue = dbBind[1].obStatus + dbBind[1].cbMaxLen; dbBind[2].iOrdinal = 3; dbBind[2].wType = DBTYPE_WSTR; dbBind[2].pTypeInfo= NULL; dbBind[2].pBindExt = NULL; dbBind[2].pObject = NULL; dbBind[2].dwPart = DBPART_VALUE | DBPART_LENGTH | DBPART_STATUS; dbBind[2].pVarData = NULL; dbBind[2].obLength = sizeof(tchName) + sizeof(tchSex); dbBind[2].obStatus = dbBind[2].obLength + dbBind[2].cbMaxLen; dbBind[2].cbMaxLen = sizeof(tchAge); dbBind[2].obValue = dbBind[2].obStatus + dbBind[2].cbMaxLen; hr = pIRowset -> CreateAccessor(DBACCESSOR_ROWDATA, sizeof(dbBind)/sizeof(dbBind[0]), dbBind, 0, &hAccessor, NULL); if (FAILED(hr)) { printf("CreateAccessor() failed!\n"); return -1; } //检索数据 while(hr != DB_S_ENDOFROWSET) { hr = pIRowset -> GetData(hRow, hAccessor, buffer); if (SUCCEEDED(hr)) { tmemcpy(tchName, (TCHAR *)(buffer + dbBind[0].obValue), dbBind[0].cbMaxLen); tmemcpy(tchSex , (TCHAR *)(buffer + dbBind[1].obValue), dbBind[1].cbMaxLen); tmemcpy(tchAge , (TCHAR *)(buffer + dbBind[2].obValue), dbBind[2].cbMaxLen); printf("%s\t%s\t%s\n", tchName, tchSex, tchAge); } } //释放资源 ReleaseResource(); system("pause"); return 0; } 好啦,上面就是关于使用C语言连接OleDbConnection数据库的全部操作步骤啦!在实际使用中,还是要多花时间多练习,熟能生巧嘛! www.0574web.net 宁波海美seo网络优化公司 是网页设计制作,网站优化,企业关键词排名,网络营销知识和开发爱好者的一站式目的地,提供丰富的信息、资源和工具来帮助用户创建令人惊叹的实用网站。 该平台致力于提供实用、相关和最新的内容,这使其成为初学者和经验丰富的专业人士的宝贵资源。
声明本文内容来自网络,若涉及侵权,请联系我们删除! 投稿需知:请以word形式发送至邮箱18067275213@163.com
博主的分享的东西真的很是在有实用,可以学要很多的东西需要慢慢的吸收
无语,刚想把网址.goodcrusher.com放进去,看来不能了,小失落!
不管有没有用,还是要留下踪迹的
如果follow和nofollow一起加进去,会怎么样?
厉害,更清晰简单 ,谷歌优化 非常棒
很不错的分享经验