VC sqlserver中获取数据库所有表、字段名、记录数据


  1. <pre class="cpp" name="code">//1、连接数据库类  
  2. BOOL CSqlDlg::Ado(CString strConn)  
  3. {  
  4. ::CoInitialize(NULL);     // 初始化OLE/COM库环境   
  5. try  
  6. {  
  7.    m_pConn.CreateInstance("ADODB.Connection"); //创建Connection对象  
  8.    m_pConn->ConnectionTimeout=5; //设置超时时间为5秒  
  9.    m_pConn->Open((_bstr_t)strConn,"""", adModeUnknown);//连接数据库   
  10. }  
  11.   
  12. catch(_com_error e)   
  13. {  
  14.    CATCH_ERROR;  
  15.    return false;  
  16. }  
  17. return true;  
  18. }  
  19. //2、执行strSQL的SQL语句,返回集录集  
  20. _RecordsetPtr& CSqlDlg::GetRS(CString strSQL)   
  21. {  
  22. try  
  23. {  
  24.    m_pRS.CreateInstance(__uuidof(Recordset));  
  25.    m_pRS->Open((_bstr_t)strSQL,m_pConn.GetInterfacePtr(),adOpenDynamic,adLockOptimistic,adCmdText);//执行SQL语句  
  26. }  
  27. catch(_com_error e)  
  28. {  
  29.    CATCH_ERROR   
  30. }  
  31. return m_pRS;  
  32. }  
  33. //3、获取所有表名-SQL SERVER  
  34. _RecordsetPtr pRS = GetRS("select name from sysobjects where xtype='U'");  
  35. CString user;  
  36. int x=0;  
  37. strArry.RemoveAll();  
  38. try  
  39. {  
  40.    while (pRS->adoEOF==0)  
  41.    {  
  42.     strArry.Add((LPCSTR)(_bstr_t)pRS->GetCollect(_variant_t((long)x)));  
  43.     pRS->MoveNext();  
  44.    }  
  45. }  
  46. catch(_com_error e)  
  47. {  
  48.    CATCH_ERROR   
  49.     return;  
  50. }  
  51.   
  52. //4、将表名写入列表中  
  53. for(int i=0; i<strArry.GetSize(); i++)  
  54. {  
  55.    m_list2.AddString(strArry.GetAt(i));  
  56. }  
  57.   
  58. //5、连接设置为不可用,断开设置为可用   
  59. GetDlgItem(IDC_LIST)->EnableWindow(0);  
  60. GetDlgItem(IDC_OPEN)->EnableWindow(1);  
  61.   
  62.   
  63. //列表控件双击事件读出表中记录  
  64.   
  65. //6、  
  66. m_list1.DeleteAllItems();  
  67.   
  68. UpdateData(1);   
  69. int q=0;  
  70. //获取记录条数  
  71. q=GetNum(m_str_list);  
  72. //获取字段个数======================================  
  73. CString strSql1;  
  74. strSql1="select * from";  
  75. strSql1+=" ";  
  76. strSql1+=m_str_list;  
  77. _RecordsetPtr m_pRS2 = GetRS(strSql1);  
  78.    dataSize=GetFieldsCount(m_pRS2);  
  79. //==================================================  
  80. if (dataSize==0)  
  81. {  
  82.    return;  
  83. }  
  84.   
  85. //获取字段名strName==================================  
  86. CString *strName=new CString[dataSize];  
  87. for (int bb=0;bb<dataSize;bb++)  
  88. {  
  89.    GetFieldsName(m_pRS,bb,*(strName+bb));  
  90. }  
  91. //====================================================  
  92. //清空表头  
  93. while(m_list1.DeleteColumn(0));  
  94. //将字段显示出来  
  95. for (int cc=0;cc<dataSize;cc++)  
  96. {  
  97.    m_list1.InsertColumn(cc, *(strName+cc), LVCFMT_LEFT, 150);  
  98.   
  99. }  
  100.   
  101. if (q==0)  
  102. {  
  103.    return;  
  104. }  
  105.   
  106. CString strSql;  
  107. strSql="select * from";  
  108. strSql+=" ";  
  109. strSql+=m_str_list;  
  110.   
  111.   
  112. _RecordsetPtr pRS = GetRS(strSql);  
  113. CStringArray *strdataArray=new CStringArray[dataSize];  
  114. //获取字段内容,并存入strdataArray+aa中==============  
  115. try{  
  116.     
  117.    for (int aa=0;aa<dataSize;aa++)  
  118.    {  
  119.     while (pRS->adoEOF ==0)  
  120.     {  
  121.      CString str1;  
  122.      _variant_t varTemp;  
  123.     // str1.Format("%s",(LPCSTR)(_bstr_t)pRS->GetCollect(_variant_t((long)aa)));  
  124.      //判断数据库中的NULL值  
  125.      varTemp=pRS->GetCollect(_variant_t((long)aa));  
  126.      if(varTemp.vt ==VT_NULL)  
  127.       str1="<NULL>";  
  128.      else  
  129.       str1.Format("%s",(LPCSTR)(_bstr_t)pRS->GetCollect(_variant_t((long)aa)));  
  130.       
  131.      (strdataArray+aa)->Add(str1);  
  132.      pRS->MoveNext();  
  133.     }  
  134.     pRS->MoveFirst();  
  135.    }  
  136. }  
  137. catch(_com_error e)  
  138. {  
  139.    CATCH_ERROR   
  140.     return;  
  141. }  
  142. //=================================================== CString str="";  
  143.   
  144. CString str;  
  145. for (int tt=0;tt<q;tt++)  
  146.    {  
  147.     m_list1.InsertItem(q,"1",0);//插入行  
  148.     for(int i=0; i<dataSize; i++)  
  149.     {   
  150.      str =(strdataArray+i)->GetAt(tt);  
  151.      TRACE("   行:%d, 列:%d,数据:%s\n",tt,i,str);  
  152.      m_list1.SetItemText(tt,i,str);//插入内容    
  153.      // MessageBox(str);      
  154.     }     
  155. }  
  156. delete []strName;  
  157. delete []strdataArray; //释放申请的空间  
  158. }  
  159.   
  160. //得到记录条数函数  
  161. int CSqlDlg::GetNum(CString strc)  
  162. {  
  163. int nSize=0;  
  164.   
  165. CString strSql;  
  166. strSql="select count(*) from";  
  167. strSql+=" ";  
  168. strSql+=strc;  
  169. _RecordsetPtr pRS = GetRS(strSql);  
  170. CString s=(LPCSTR)(_bstr_t)pRS->GetCollect(_variant_t((long)0));  
  171. char *ch=new char[s.GetLength()];  
  172. ch=(LPSTR)(LPCTSTR)s;  
  173. nSize=atoi(ch);  
  174.        return nSize;  
  175. delete []ch;  
  176.   
  177. }  
  178. //获取字段名函数  
  179. BOOL CSqlDlg::GetFieldsName(_RecordsetPtr RcdPtr, int nField, CString & strFieldName)   
  180.   
  181. {     
  182.   
  183. if(NULL == RcdPtr || nField >= RcdPtr->GetFields()->Count)  
  184.    return FALSE;  
  185.   
  186. _variant_t vt((long)nField);  
  187.   
  188. strFieldName.Format(_T("%s"), (char*)(RcdPtr->GetFields()->Item[vt]->Name));   
  189.   
  190. return true;  
  191.   
  192. }  
  193. //获取字段个数函数  
  194. int CSqlDlg::GetFieldsCount(_RecordsetPtr RcdPtr)    
  195.   
  196. {     
  197.   
  198. int nCount=0;  
  199.   
  200. if(NULL != RcdPtr)  
  201.     
  202. {     
  203.     
  204.    nCount = RcdPtr->GetFields()->Count;     
  205.     
  206. }  
  207.   
  208. return nCount;     
  209.   
  210. }  
  211.   
  212. //断开连接  
  213. void CSqlDlg::OnOpen()   
  214. {  
  215. // TODO: Add your control notification handler code here  
  216. GetDlgItem(IDC_LIST)->EnableWindow(1);  
  217. GetDlgItem(IDC_OPEN)->EnableWindow(0);  
  218. //清空数据  
  219. m_list1.DeleteAllItems();   
  220.   
  221. //清空list列表  
  222. while(m_list2.GetCount())   
  223.    m_list2.DeleteString(0);  
  224. //释放ADO环境   
  225. m_pConn->Close();  
  226. m_pConn = NULL;  
  227. ::CoUninitialize();  
  228. }  
  229. </pre><br>  
  230. <pre></pre>  
  231. <img alt="" src="http://hi.csdn.net/attachment/201110/14/0_1318556215RgFv.gif">   
  232. <p>源代码下载地址:下载地址:<a href="http://download.csdn.net/user/huliang66">http://download.csdn.net/user/huliang66</a></p>  
  233. <p> </p>  
  234. <p> </p>  
  235. <pre></pre>  
  236.       
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值