Access/ SqlServer 获取主键
发布时间:2020-12-12 13:08:38 所属栏目:MsSql教程 来源:网络整理
导读:#include afxdao.h#include icrsint.h#include basetsd.h#include ole2.hint CDBManager::GetPrimaryKey(CString path,CString dbsource,DATEBASETYPE dbtype,CString ServerStr,CString TableName,vectorCString list){_bstr_t bstrConn;if(dbtype == ACCES
#include <afxdao.h> #include <icrsint.h> #include <basetsd.h> #include <ole2.h> int CDBManager::GetPrimaryKey(CString path,CString dbsource,DATEBASETYPE dbtype,CString ServerStr,CString TableName,vector<CString>& list) { _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='SQLNCLI.1';Integrated Security=SSPI;Persist Security Info=False;Initial Catalog=%s;Data Source=%s",dbsource,ServerStr); bstrConn = strMdbConn; } else { return 0; } int ok = 1; 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,&var); //PK_TABLE_NAME ix=2; var.vt=VT_BSTR; var.bstrVal=_bstr_t(TableName);//表名 SafeArrayPutElement(psa,&var); Array.vt = VT_ARRAY|VT_VARIANT; Array.parray = psa; IADORecordBinding *picRs = NULL; _RecordsetPtr pRstSchema("ADODB.Recordset"); _ConnectionPtr pConnection("ADODB.Connection"); pConnection->ConnectionString = bstrConn; if(dbtype==ACCESS) pConnection->Provider = "Microsoft.Jet.OLEDB.4.0"; else if(dbtype == SQLSERVER) pConnection->Provider = "SQL Server"; try { CString strMsg,strMessage; pConnection->Open(pConnection->ConnectionString,"",adModeUnknown); pRstSchema->QueryInterface(__uuidof(IADORecordBinding),(LPVOID*)&picRs); pRstSchema = pConnection->OpenSchema(adSchemaPrimaryKeys,&Array); int ncnt = pRstSchema->GetFields()->Count; for(int i = 0; i < ncnt; i++) { _bstr_t value=pRstSchema->GetFields()->GetItem((long)i)->Name; strMessage.Format("%s,",(LPCTSTR)value); strMsg += strMessage; } while(!(pRstSchema->adoEOF)) { CString strTableType; _bstr_t column_name=pRstSchema->Fields->GetItem("COLUMN_NAME")->Value; _bstr_t primarykey_name=pRstSchema->Fields->GetItem("PK_NAME")->Value; CString StrTableName(pRstSchema->Fields->GetItem("TABLE_NAME")->Value); if(StrTableName == TableName) list.push_back((LPCTSTR)column_name); //strMsg.Format( "column_name:%snprimary key name:%s ",(LPCTSTR)column_name,(LPCTSTR)primarykey_name); pRstSchema->MoveNext(); } SafeArrayDestroy(psa); // Clean up objects before exit. pRstSchema->Close(); pConnection->Close(); } catch (_com_error &e) { CString *ptr = new CString((LPCSTR)e.Description()); PostMessage(m_pDlg->GetSafeHwnd(),TIPINFO,(WPARAM)ptr,0); ok = 0; } return ok; } // 使用前需初始化com (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |