將數(shù)組存入數(shù)據(jù)庫的解決方法及用VC與數(shù)據(jù)庫交互

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

          下面列出了連接三種數(shù)據(jù)庫的語句
          CString strConn;
          1、連接SQL SERVER
          strConn.Format("driver={SQL Server}; Server=%s; DATABASE=%s; UID=%s; PWD=%s", strServer, dbName, user, psw);
          strServer是服務(wù)器名,如果訪問本地數(shù)據(jù)庫,可是設(shè)strServer = “172.0.0.1”或”.”;這是我試過的,都可以。
          dbName是數(shù)據(jù)庫名稱,user, psw是用戶名和密碼。
          2、連接ORACLE
          trConn.Format("Provider=MSDAORA.1;Data Source=%s;", "%s", "%s", adModeUnknown, dbName, user, psw);
          dbName, user, psw分別是數(shù)據(jù)庫名,用戶名,密碼。
          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是數(shù)據(jù)庫路徑名,如“F:\\DB\\hermes.mdb”,psw是密碼。

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

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

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

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

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

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

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

          // 得到字段名
          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; // 返回給定字段中數(shù)據(jù)的實際大小
          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 閱讀(293) 評論(0)  編輯  收藏


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


          網(wǎng)站導(dǎo)航:
           
          <2011年12月>
          27282930123
          45678910
          11121314151617
          18192021222324
          25262728293031
          1234567

          導(dǎo)航

          統(tǒng)計

          常用鏈接

          留言簿

          隨筆檔案

          搜索

          最新評論

          主站蜘蛛池模板: 绵竹市| 朔州市| 北票市| 玉林市| 利川市| 云阳县| 乌拉特前旗| 邮箱| 海安县| 施秉县| 吴堡县| 阿瓦提县| 长海县| 肃宁县| 鹤岗市| 房产| 建水县| 高要市| 太湖县| 黑龙江省| 南康市| 新巴尔虎左旗| 通化市| 绿春县| 邳州市| 南投县| 周口市| 丰原市| 济源市| 化隆| 冷水江市| 平遥县| 台州市| 琼结县| 通化县| 三明市| 桓台县| 宜城市| 平度市| 兴义市| 黄龙县|