程序師世界是廣大編程愛好者互助、分享、學習的平台,程序師世界有你更精彩!
首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫知識
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
 程式師世界 >> 編程語言 >> 更多編程語言 >> 編程綜合問答 >> ado-關於VS2005對SqlServer數據庫操作的問題

ado-關於VS2005對SqlServer數據庫操作的問題

編輯:編程綜合問答
關於VS2005對SqlServer數據庫操作的問題

對數據庫Student進行查詢時運行到msado.tli文件中的下面這個函數中的raw_Open時就崩潰掉。

 inline HRESULT Recordset15::Open ( const _variant_t & Source, const _variant_t & ActiveConnection, enum CursorTypeEnum CursorType, enum LockTypeEnum LockType, long Options ) {
    HRESULT _hr = raw_Open(Source, ActiveConnection, CursorType, LockType, Options);
    if (FAILED(_hr)) _com_issue_errorex(_hr, this, __uuidof(this));
    return _hr;
}

調用代碼:

        CString strsql = _T("select * from LoginInfo where Name='");
        strsql+=name;
        strsql+="' and Password='";
        strsql+=psw;
        strsql+="'";
        MessageBox(hwnd, strsql, _T("查詢字符串"), MB_OK);
        CString strcolumn[6] = {_T("Name"),_T("Sex"),_T("Password"),_T("School"),_T("Major"),_T("Number")};
        int ncolumn = 6;
        CStringArray strvalue;
        theApp.m_dao.GetData(strsql,strcolumn,ncolumn,strvalue);
 BOOL CDao::GetData(CString strSql,CString *strQueryCloum,int nCloumNum,CStringArray& strDataValue)
{
    HRESULT het;
    //_bstr_t    字符串          _variant_t 多種數據類型集合 vt類型   ..value值                               //com
    _bstr_t bstrSql = strSql;               //執行sql
    _bstr_t bstrConnect = m_strConnect;     //連庫串
    _bstr_t bstrQueryCloum;                 //列名

    Fields *fields;
    FieldPtr fieldPtr;

    CString strValue;
    _variant_t varBLOB;
    try
    {
        //1.打開表
        /*m_pRecordset->Open(查詢SQL語句,連接串,打開方式,數據源更新時如何鎖定結果集,以什麼形式傳入)
            打開方式:
            adOpenUnspecified = -1,  默認的方式打開
            adOpenForwardOnly = 0,    向前移動的游標打開
            adOpenKeyset = 1,         以鍵值打開
            adOpenDynamic = 2,        當你添加數據時別人也有可能往這個表添加數據,誰在前誰添加到前面(多人用數據庫時)
            adOpenStatic = 3          別人也想往裡面添加數據一直停留在打開時候

            鎖定結果集方式:
            adLockReadOnly = 1,         只讀的不能改變數據
            adLockPessimistic = 2,       (保守式鎖定)逐個 – 編輯時立即鎖定數據源的紀錄
            adLockOptimistic = 3,        (開放式鎖定)逐個 – 只在調用update方法時才鎖定紀錄
            adLockBatchOptimistic = 4     開方式 可以更新一批數據更新模式
            +       bstrConnect {"Driver={SQL Native Client};Server=192.168.1.92,2433;Uid=sa;Pwd=sa;Database=colin0716" (1)}    _bstr_t
            +       bstrSql {"select * from student" (1)}   _bstr_t

        */
        het = m_pRecordset->Open(bstrSql,bstrConnect,adOpenDynamic,adLockOptimistic,adCmdText);
        if (!SUCCEEDED(het))
        {
            AfxMessageBox(_T("打開表失敗"));
            m_strErrorMsg = _T("查詢表失敗");
            return FALSE;
        }
        //循環結果
        while(!m_pRecordset->ADOEOF)
        {
                        //按行遍歷
            for(int i=0;i<nCloumNum;i++)
            {
                bstrQueryCloum = strQueryCloum[i];
                fields = m_pRecordset->GetFields(); //fields 結果集中的字段集合。由於一行記錄中可以包含多個字段,因此fileds屬性是一個數組形式,數組中每一個元素代表一個字段

                fieldPtr = fields->GetItem(bstrQueryCloum);//field對象表示記錄集中數據的某個單獨的列。

                varBLOB = fieldPtr->GetValue();//獲得當前列的值

                //long nSize =fieldPtr->ActualSize;


                //注意圖片名稱必須為圖片流的前一個字段
                //strValue = DataToCStringType(varBLOB,nSize,strValue);
                strValue = DataToCStringType(varBLOB);
                strDataValue.Add(strValue);
                //varBLOB.Detach();
            }
            m_pRecordset->MoveNext();
        }

        m_pRecordset->Close();
    }
    catch(_com_error *e)
    {
        m_strErrorMsg = e->ErrorMessage();
        AfxMessageBox(e->ErrorMessage());
    }

    return TRUE;
}

那個_hr是總是返回E_FAIL,然後return的時候就崩潰掉。
這幾天在寫一個對數據庫操作的項目,但是這幾天被這個問題給卡住了,實在是找不到如何解決了,還請各位大神指點迷津。圖片說明

最佳回答:


主要是你的數據庫連接字符串,有兩種類型,你選擇你對應的

 //設置連接字符串
 //一個是數據庫身份驗證
_bstr_t strConnect = "Provider=SQLOLEDB.1;Data Source=ZHOUWEI\\MYSQL;Initial Catalog=AMS;User ID=sa;PWD=123456";
 //下面是Windows身份驗證方式
_bstr_t strConnect = "Provider=SQLOLEDB.1;Integrated Security = SSPI;Persist Security Info = FALSE;Data Source=WANGLIANG\\SQLEXPRESS;Initial Catalog=ADODemo"; 
  1. 上一頁:
  2. 下一頁:
Copyright © 程式師世界 All Rights Reserved