將數組存入數據庫的解決方法及用VC與數據庫交互

          implode()  ---把數組轉換成字符串  
          explode() ---把字符串轉換成數組
          對于一維數組可以簡單的用
          implode()
          explode()
          函數做數組——串的變換,但需注意分隔符要使用數組中不存在的字符
          對于多維數組可以用序列化函數處理
          serialize()
          unserialize()
          ---------------------------------------
          ADO連接數據庫,使用控件
          Microsoft ADO Data Control 6.0 (SP6) (OLEDB)
          ADO庫包含三個基本接口:_ConnectionPtr接口、_CommandPtr接口和_RecordsetPtr接口。
          聲明兩個變量:
          _ConnectionPtr l_pConnection;
          _RecordsetPtr l_pRecordset;
          下面開始連接數據庫
          l_pConnection.CreateInstance("ADODB.Connection");
          也可以是l_pConnection.CreateInstance(__uuidof(Connection));二者選一。

          下面列出了連接三種數據庫的語句
          CString strConn;
          1、連接SQL SERVER
          strConn.Format("driver={SQL Server}; Server=%s; DATABASE=%s; UID=%s; PWD=%s", strServer, dbName, user, psw);
          strServer是服務器名,如果訪問本地數據庫,可是設strServer = “172.0.0.1”或”.”;這是我試過的,都可以。
          dbName是數據庫名稱,user, psw是用戶名和密碼。
          2、連接ORACLE
          trConn.Format("Provider=MSDAORA.1;Data Source=%s;", "%s", "%s", adModeUnknown, dbName, user, psw);
          dbName, user, psw分別是數據庫名,用戶名,密碼。
          3、連接ACCESS
          strConn.Format("Provider=Microsoft.Jet.OLEDB.4.0;Data Source=%s;
          Persist Security Info=False;Jet OLEDB:Database Password=%s", dbName, psw);
          "Provider=Microsoft.Jet.OLEDB.4.0;Data Source=fnamepath","","",adModeUnknown
          dbName是數據庫路徑名,如“F:\\DB\\hermes.mdb”,psw是密碼。

          設置了連接語句,下面要和數據庫進行連接了,對于上面三種數據庫都是要執行下面這個連接的,下面語句是打一開連接的語句。
          connPtr->Open((_bstr_t)strConn, "", "", adModeUnknown);
          adModeUnknown:缺省。當前的許可權未設置
          adModeRead:只讀
          adModeWrite:只寫
          adModeReadWrite:可以讀寫
          adModeShareDenyRead:阻止其它Connection對象以讀權限打開連接
          adModeShareDenyWrite:阻止其它Connection對象以寫權限打開連接
          adModeShareExclusive:阻止其它Connection對象以讀寫權限打開連接
          adModeShareDenyNone:阻止其它Connection對象以任何權限打開連接

          4、連接UDL
          CString strConnect = "File Name=" + udlDir;
          connPtr->Open((_bstr_t)strConnect, (_bstr_t)user, (_bstr_t)psw, adModeUnknown);
          字符串udlDir是udl文件路徑,user和pssw是udl連接數據庫的用戶名和密碼。

          得到記錄集:
          l_pRecordset.CreateInstance("ADODB.Recordset");
          l_pRecordset->Open(_bstr_t(l_strSQLConn),
          _variant_t((IDispatch*)l_pConnection, true),
          adOpenStatic, adLockOptimistic, adCmdText);
          l_strSQLConn是select語句

          // 遍歷結果集
          while( !l_pRecordset->adoEOF)
          {
          ……// 在這里添加操作結果集的代碼如:
          strTemp = (LPCSTR)(_bstr_t)l_pRecordsetTable->GetCollect(_variant_t((long)i));// 得到某個字段的記錄。
          l_pRecordset->MoveNext();
          }
          對數據庫的操作一般使用異常機制。也就是try{…}catch(){..}
          注意,一個_RecordsetPtr的對象只能得到一個記錄集,重復用時就會出錯。當要打開兩個數據庫時最好定義兩個_RecordsetPtr對象

          四、關閉記錄集和連接
          關閉記錄集:
          l_pRecordsetTable->Close();
          l_pRecordsetTable = NULL;

          關閉連接:
          l_pConnection->Close();
          l_pConnection = NULL;

          // 釋放環境
          ::CoUninitialize();
          附加:
          l_pRecordset執行select語句后就可以得到表的字段名,字段數,字段大小,我寫了三個函數,分別得到指定表的字段數,
          指定字段的字段名及字段大小。

          // 得到字段名
          BOOL CLx4Dlg::GetFieldsName(_RecordsetPtr RcdPtr, int nField, CString & strFieldName)
          {
          if(NULL == RcdPtr || nField >= RcdPtr->GetFields()->Count)return FALSE;
          _variant_t vt((long)nField);
          strFieldName.Format(_T("%s"), (char*)(RcdPtr->GetFields()->Item[vt]->Name));
          return true;
          }

          // 得到字段大小
          int CLx4Dlg::GetFieldsSize(_RecordsetPtr RcdPtr, int nField)
          {
          if(NULL == RcdPtr || nField >= RcdPtr->GetFields()->Count)return FALSE;
          _variant_t vt((long)nField);
          int nSize = RcdPtr->GetFields()->Item[vt]->DefinedSize; // 返回已聲明的字段大小
          //int nSize = RcdPtr->GetFields()->Item[vt]->ActualSize; // 返回給定字段中數據的實際大小
          return nSize;
          }
          SQL 語句:
          得到SQL SERVER的所有用戶類型的表
          select name from sysobjects where xtype='U'

          得到ORACLE的所有用戶表
          select tname from tab where tabtype='TABLE'

          得到ACCESS的所有用戶建的表
          SELECT Name FROM MSysObjects WHERE Flags=0 AND Type=1
          SELECT MSysObjects.Name FROM MSysObjects WHERE Type=1

          posted on 2011-12-21 11:09 weisa 閱讀(292) 評論(0)  編輯  收藏


          只有注冊用戶登錄后才能發表評論。


          網站導航:
           
          <2011年12月>
          27282930123
          45678910
          11121314151617
          18192021222324
          25262728293031
          1234567

          導航

          統計

          常用鏈接

          留言簿

          隨筆檔案

          搜索

          最新評論

          主站蜘蛛池模板: 高雄县| 衡南县| 全椒县| 离岛区| 家居| 九龙坡区| 斗六市| 厦门市| 资中县| 太谷县| 彭泽县| 郓城县| 祁东县| 建阳市| 枞阳县| 肃宁县| 海兴县| 准格尔旗| 福安市| 敦化市| 绩溪县| 丰镇市| 通州区| 洪雅县| 克山县| 白河县| 鲁山县| 威海市| 东乡| 浏阳市| 肥西县| 昂仁县| 衢州市| 万荣县| 方城县| 景洪市| 育儿| 台安县| 马鞍山市| 莒南县| 石城县|