vc++链接sql2008r2 如何多数据库多表查询 如何链接

场景:比如有test1,test2,test3,test44个数据库每个数据库都有相同的表例如test1有表TABLE1,TABLE2每个数据库中每个表有id,name,... 场景:比如 有 test1,test2,test3,test4 4个数据库 每个数据库都有相同的表 例如 test1 有表TABLE1, TABLE2 每个数据库中每个表有id,name,phone,class 字段。我想查询所有数据库中所有表中class=123 的人的手机号 vc++用那种方式链接sql2008r2 又如何查询 最好给出详细源码 ,场景确实如此 不要给其他修改数据库建议!非常感谢! 展开
 我来答
joychen_
推荐于2016-03-22 · TA获得超过1747个赞
知道大有可为答主
回答量:1617
采纳率:100%
帮助的人:1832万
展开全部
//c:\Program Files\Common Files\System\ADO\msado15.dll  
#import "msado15.dll" no_namespace rename("EOF", "EndOfFile")   
using namespace std;  
  
int _tmain(int argc, _TCHAR* argv[])  
{  
    ::CoInitialize(NULL);   
    _ConnectionPtr m_pConnection=NULL;  
    _RecordsetPtr m_pRecordset=NULL;  
    m_pConnection.CreateInstance(__uuidof(Connection));  
    m_pRecordset.CreateInstance(__uuidof(Recordset));  
      
    _bstr_t strConnect = "Provider=SQLOLEDB.1;Password=123456;Persist Security Info=True;\  
                         User ID=sa;Initial Catalog=test1;Data Source=192.168.1.3";  
      
    _bstr_t bstrSQL("select phone from test1.dbo.table1 where class='123'");  
    try  
    {  
        m_pConnection->Open(strConnect, "","", adModeUnknown);  
        m_pRecordset->Open(bstrSQL, m_pConnection.GetInterfacePtr(), adOpenDynamic, adLockOptimistic, adCmdText);  
        _variant_t vstr, vuint;  
        while (!m_pRecordset->EndOfFile)  
        {  
            vuint = m_pRecordset->GetCollect("phone");  
            unsigned int uintPhone = vuint.ulVal;  
            //手机号  
            m_pRecordset->MoveNext();  
        }  
        m_pRecordset->Close();  
    }  
    catch (_com_error e)  
    {  
        return 0;  
    }  
  
    if(m_pConnection->State)  
    {  
        m_pConnection->Close();  
    }  
    ::CoUninitialize();  
    return 0;  
}

大致流程如下 :

1.  _bstr_t strConnect = "Provider=SQLOLEDB.1;Password=123456;Persist Security Info=True;  User ID=sa;Initial Catalog=test1;Data Source=192.168.1.3";  

需要修改成你自己的IP,sa,密码

2.   _bstr_t bstrSQL("select phone from test1.dbo.table1 where class='123'"); 

sql需要改成以下这种:

select phone from test1.dbo.table1 where class='123'

union

select phone from test1.dbo.table2 where class='123'

union

select phone from test2.dbo.table1 where class='123'

union

select phone from test2.dbo.table2 where class='123'

union

....

3. int 可以存下一个手机号吗? 没有问题?

追问
只是举例 但是如果一个数据库有100个表 那不是很长 还有如果test1的数据库表到table1--table99结束 test2数据库表 table100--table200 这样写sql 是不是够呛啊!
select phone from test1.dbo.table2 where class='123'
union
追答

那就写个循环,一个表一个表地查询吧。

int db[] = {100, 200}; //表示第几个数据库中有几个Table1这样的表
for (int i=0; i<2; i++)
  for(int j=0; j<db[i]; j++)
  {
    char szBuf[1000];
    sprintf(szBuf, "select phone from test%d.dbo.table%d where class='123'", i+1, j+1);
    _bstr_t bstrSQL(szBuf);
    .....
  }
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

下载百度知道APP,抢鲜体验
使用百度知道APP,立即抢鲜体验。你的手机镜头里或许有别人想知道的答案。
扫描二维码下载
×

类别

我们会通过消息、邮箱等方式尽快将举报结果通知您。

说明

0/200

提交
取消

辅 助

模 式