vc获取Access/ SqlServer 获取主键
2016-01-22 15:31
381 查看
int CDBManager::GetPrimaryKey(CString path, CString dbsource, DATEBASETYPE dbtype,CString ServerStr, CString TableName, vector<CString>& list) { int ok = 1; _bstr_t bstrConn; if(dbtype == ACCESS) bstrConn = "Provider='Microsoft.JET.OLEDB.4.0';Data source="+path; else if(dbtype == SQLSERVER) { CString strMdbConn; strMdbConn.Format("Provider='SQLOLEDB.1';Integrated Security=SSPI;Persist Security Info=False;Initial Catalog=%s;Data Source=%s", dbsource, ServerStr); bstrConn = strMdbConn; } else { return 0; } _ConnectionPtr pConnection=NULL; _RecordsetPtr pRstSchema=NULL; SAFEARRAY FAR* psa = NULL; SAFEARRAYBOUND rgsabound; _variant_t var; _variant_t Array; rgsabound.lLbound = 0; rgsabound.cElements = 3; psa = SafeArrayCreate(VT_VARIANT, 1, &rgsabound); var.vt = VT_EMPTY; long ix; //PK_TABLE_CATALOG ix = 0; SafeArrayPutElement(psa, &ix, &var); //PK_TABLE_SCHEMA ix=1; SafeArrayPutElement(psa, &ix, &var); //PK_TABLE_NAME ix=2; var.vt=VT_BSTR; var.bstrVal=_bstr_t(TableName);//表名 SafeArrayPutElement(psa, &ix, &var); Array.vt = VT_ARRAY|VT_VARIANT; Array.parray = psa; CString strMessage; CString strMsg; try { pConnection.CreateInstance(__uuidof(Connection)); pConnection->Open(bstrConn, "", "",adConnectUnspecified); pRstSchema = pConnection->OpenSchema(adSchemaPrimaryKeys,&Array); while(!pRstSchema->adoEOF) { FieldsPtr fields = pRstSchema->GetFields(); _bstr_t column_name=pRstSchema->GetFields()->GetItem("COLUMN_NAME")->Value; _bstr_t primarykey_name=pRstSchema->GetFields()->GetItem("PK_NAME")->Value; list.push_back((LPCTSTR)column_name); strMsg.Format( "column_name:%s\nprimary key name:%s ",(LPCTSTR)column_name,(LPCTSTR)primarykey_name); //AfxMessageBox(strMsg); pRstSchema->MoveNext(); } } catch (_com_error e) { //AfxMessageBox(e.Description()); CString* pStr = new CString((LPCSTR)e.Description()); PostMessage(m_pDlg->GetSafeHwnd(), TIPINFO, (WPARAM)pStr,0); ok = 0; // PrintComError(e); } SafeArrayDestroy(psa); Array.vt = VT_EMPTY;//重要!可以试试去掉会怎么样 if(pRstSchema != NULL && pRstSchema->State==adStateOpen) pRstSchema->Close(); if(pConnection != NULL && pConnection->State==adStateOpen) { pConnection->Close(); } return ok; }
// 使用前需初始化com
相关文章推荐
- sql基础05
- MySql的存储引擎
- sql语法:inner join on, left join on, right join on详细使用方法
- centos6.5下编译安装mariadb-10.0.20
- centos6.5下编译安装mariadb-10.0.20
- 六种删除数据库重复行的方法
- centos安装memcached
- 欢迎使用CSDN-markdown编辑器
- Oracle ORA-01034,ORA-27101,ORA-00600
- SQL Server中避免触发镜像SUSPEND的N种方法
- ORACLE 存储过程被锁,编译不了,怎么解锁?
- mysql安装一 --- 源码包安装
- 【转】oracle over函数详解
- EF+MySql
- shiro 权限验证 AuthorizingRealm doGetAuthorizationInfo
- oracle 数据库按照条件来统计数据记录
- oracle 根据子节点取出父节点sql
- MySQL基础配置之mysql的默认字符编码的设置(my.ini设置字符编码)
- MySQL C API mysql_free_result() 详解
- Windows下Redis的安装使用