您的位置:首页 > 数据库

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
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: