<rt id="bn8ez"></rt>
<label id="bn8ez"></label>

  • <span id="bn8ez"></span>

    <label id="bn8ez"><meter id="bn8ez"></meter></label>

    2011年12月21日

    將數(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ù)庫的操作一般使用異常機制。也就是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 @ 2011-12-21 11:09 weisa 閱讀(290) | 評論 (0)編輯 收藏

    <2011年12月>
    27282930123
    45678910
    11121314151617
    18192021222324
    25262728293031
    1234567

    導(dǎo)航

    統(tǒng)計

    常用鏈接

    留言簿

    隨筆檔案

    搜索

    最新評論

    主站蜘蛛池模板: 亚洲欧美成人综合久久久| 亚洲av一综合av一区| 亚洲乱码国产乱码精华| 成年人网站免费视频| 亚洲成aⅴ人片在线影院八| 日韩在线播放全免费| 亚洲高清日韩精品第一区| 16女性下面无遮挡免费| 亚洲精品免费在线| 青青青国产在线观看免费网站| 亚洲欧洲日本天天堂在线观看| 妻子5免费完整高清电视| 亚洲一区二区三区无码国产| 美女网站免费福利视频| 亚洲色大网站WWW永久网站| 日本免费一区尤物| 免费一级做a爰片久久毛片潮| 亚洲日韩国产精品乱| 国产无遮挡裸体免费视频在线观看| 国产v亚洲v天堂无码网站| 88av免费观看入口在线| 色天使亚洲综合在线观看| 四虎影视精品永久免费网站| 国产精品免费在线播放| 亚洲色四在线视频观看| 成人免费一级毛片在线播放视频| 亚洲av日韩精品久久久久久a| 国产乱辈通伦影片在线播放亚洲| 久久精品免费电影| 亚洲欧美国产国产一区二区三区 | 久久亚洲AV成人无码国产电影| 亚洲片国产一区一级在线观看| 国产免费无码一区二区| 亚洲综合一区国产精品| 久久激情亚洲精品无码?V | 日韩高清免费观看| 国产成人高清精品免费观看| 亚洲视频一区调教| 免费吃奶摸下激烈视频| 真实国产乱子伦精品免费| 亚洲av无码一区二区三区人妖|