<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ù)庫的操作一般使用異常機(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)編輯 收藏

    僅列出標(biāo)題  
    <2025年5月>
    27282930123
    45678910
    11121314151617
    18192021222324
    25262728293031
    1234567

    導(dǎo)航

    統(tǒng)計

    常用鏈接

    留言簿

    隨筆檔案

    搜索

    最新評論

    主站蜘蛛池模板: 亚洲情A成黄在线观看动漫软件| 亚洲精品国产精品乱码不卡√| 亚洲制服丝袜第一页| 午夜爽爽爽男女免费观看影院| 久久亚洲国产伦理| 精品免费视在线观看| 亚洲一二成人精品区| 最近最新高清免费中文字幕| 亚洲网站免费观看| 久久久久久久91精品免费观看| 亚洲午夜电影在线观看| a级毛片无码免费真人| 亚洲爆乳无码精品AAA片蜜桃| 波多野结衣中文一区二区免费| eeuss影院ss奇兵免费com| 国产亚洲人成A在线V网站| 国产午夜无码精品免费看动漫| 亚洲第一区香蕉_国产a| 午夜性色一区二区三区免费不卡视频| 中文字幕亚洲综合小综合在线 | 黄网址在线永久免费观看 | 精品福利一区二区三区免费视频| 亚洲喷奶水中文字幕电影| 女人18毛片a级毛片免费| 羞羞视频免费网站日本| 亚洲AV无码精品无码麻豆| 97热久久免费频精品99 | 成人片黄网站色大片免费观看APP| 亚洲第一精品福利| 在线免费观看一级毛片| www免费插插视频| 亚洲欧洲日产专区| 免费**毛片在线播放直播| 国产午夜精品久久久久免费视 | 亚洲大成色www永久网址| 国产美女a做受大片免费| 中文字幕在线免费看| 亚洲一区二区三区国产精品无码| 免费v片在线观看无遮挡| 无码国产精品一区二区免费式芒果 | 色偷偷亚洲男人天堂|