91超碰碰碰碰久久久久久综合_超碰av人澡人澡人澡人澡人掠_国产黄大片在线观看画质优化_txt小说免费全本

溫馨提示×

溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊×
其他方式登錄
點擊 登錄注冊 即表示同意《億速云用戶服務條款》

Windows中怎么使用ADO遠程訪問PostgreSQL

發布時間:2021-08-05 17:43:31 來源:億速云 閱讀:267 作者:Leah 欄目:大數據

這篇文章將為大家詳細講解有關Windows中怎么使用ADO遠程訪問PostgreSQL,文章內容質量較高,因此小編分享給大家做個參考,希望大家閱讀完這篇文章后對相關知識有一定的了解。

Windows使用odbc訪問PostgreSQL

1.下載

postgresql相應的odbc驅動安裝文件(32位或者64位),msi文件,網址:

http://www.postgresql.org/ftp/odbc/versions/msi/ 

next安裝,安裝目錄為C:\Program Files (x86)\psqlODBC或者C:\Program Files\psqlODBC

2.配置

打開控制面板->管理工具->數據源(ODBC),如下:

Windows中怎么使用ADO遠程訪問PostgreSQL

根據系統進行相應的選擇,其實32位和64位的ODBC數據源對應的是同一個可執行文件C:\Windows\System32\odbcad32.exe;打開,如下:

 Windows中怎么使用ADO遠程訪問PostgreSQL

可以’Test’按鈕測試連接成功,連接成功說明可以在VS中使用;

 Windows中怎么使用ADO遠程訪問PostgreSQL

3.32位和64位的問題

雖然上面調用同一個odbcad32.exe文件,但配置結果是有區別的;

對應關系如下:

ODBC數據源(32位)->只能添加和編輯32位的ODBC驅動(PostgreSQL同理)->注冊表“HKEY_CURRENT_USER\Software\ODBC\ODBC.INI\PostgreSQL35W”下面的Drive對應的是32位的psqlodbc35w.dll文件->只能應用于VS上的win32程序;

64位映射關系同理,同時修改注冊表或者數據源其中一個,例外一個也會隨著更改,二者相對應;

同時注意,連接使用的Data Source是PostgreSQL 35W,這個Data Source的設置在VS的C++程序中會用到;

4.VS程序連接

程序代碼在最后,此類方法使用ado連接,只是把數據源即Data Source改為ODBC對應的PostgreSQL35W;

VS使用ADO遠程訪問PostgreSQL

1.odbc不足

使用ODBC遠程連接PostgreSQL對數據庫的配置,例如IP,Port,User ID,PWD等都要在windows系統上進行配置,不能再程序中修改,不利于程序的遷移;

2.具體實現

實現如代碼

出現的問題:

1.要使用ado操作數據庫,引入代碼如下

#import "C:\Program Files\Common Files\System\ado\msado15.dll" no_namespace rename("EOF", "adoEOF") 

編譯器會提示:
intelliSense: 無法打開源文件 …/Debug/msado15.tlh
的錯誤,解決辦法很簡單
在 生成 菜單點擊 重新生成 即可。
原因是:
當編譯器遇到#import語句時,它會為引用組件類型庫中的接口生成包裝類,#import語句實際上相當于執行了API涵數LoadTypeLib()。#import語句會在工程可執行程序輸出目錄中產生兩個文件,分別為*.tlh(類型庫頭文件)及*.tli(類型庫實現文件),它們分別為每一個接口產生智能指針,并為各種接口方法、枚舉類型,CLSID等進行聲明,創建一系列包裝方法。
在沒有經過編譯器編譯之前,文件還沒有生成。所以,會出現錯誤提示。

2.代碼問題

在下面的程序中加***號的部分,如果添加上,關閉控制臺或者終止程序后會出現下面的問題(有時候會出現也有時候不會),如下:

close():當一個對象被關閉,不會從內存中刪除,資源部會釋放。它有可能改變其設置,以后再打開它,可以在使用open函數打開使用。

release():釋放對象所占資源,前提是m_pConnection和m_pRecordset所指向的資源后面不再用到(好像關閉程序或控制臺會再銷毀一次);

下面的解釋還有問題:(望知道的大牛給點指點)

理解是:close()調用后,m_pRecordset指針不再指向結果集,故不能再release();

調用release()后,該指針不再存在,關閉程序或控制臺仍要釋放該指針,就會報錯誤;


代碼:(安裝上面配置后可以運行成功親測,win32)

#include <iostream>
using namespace std;
#import "C:\Program Files\Common Files\System\ado\msado15.dll" no_namespace rename("EOF", "adoEOF") 
int main(){
::CoInitialize(NULL);
_ConnectionPtr m_pConnection;
HRESULT hr;
//使用ADO連接的數據配置
//_bstr_t strConnect = "Provider=PostgreSQL OLE DB Provider;Data Source=211.87.224.138;Location=shape;";
//使用ODBC連接的數據配置
_bstr_t strConnect = "Data Source=PostgreSQL35W";
try{
hr = m_pConnection.CreateInstance("ADODB.Connection");///創建Connection對象
if (SUCCEEDED(hr)){
hr = m_pConnection->Open(strConnect, "xhuyong", "123456", adModeUnknown);
if (m_pConnection->State)
cout << "數據庫已連接!" << endl;
}
}catch (_com_error e) { //COM錯誤取得,當執行COM功能的時候,如果出錯,可以捕捉到_com_error的異常
cout << "error message " << e.ErrorMessage() << endl;
}
/*********操作數據庫表*********/
_RecordsetPtr m_pRecordset;
try{
hr = m_pRecordset.CreateInstance("ADODB.Recordset");
if (SUCCEEDED(hr)){
m_pRecordset->Open("SELECT * FROM object", _variant_t((IDispatch*)m_pConnection, true), adOpenStatic, adLockOptimistic, adCmdText);
while (!m_pRecordset->adoEOF){
cout << (_bstr_t)m_pRecordset->GetCollect("label") << "  " << (_bstr_t)m_pRecordset->GetCollect("describe") << endl;
m_pRecordset->MoveNext();
}
}
}catch (_com_error e){
cout << "讀取數據庫失敗!\r\n錯誤信息: " << e.ErrorMessage() << endl;
}
//釋放資源
if (m_pRecordset != NULL && m_pRecordset->GetState() == adStateOpen)
m_pRecordset->Close();
if (m_pConnection != NULL && m_pConnection->GetState() == adStateOpen)
m_pConnection->Close();
//m_pRecordset->Release();   ***
//m_pConnection->Release();   ***
//釋放COM資源,否則會有內存泄露
//::CoUninitialize();   ***
 
cout << "hello world" << endl;
getchar();
return 0;
}

關于Windows中怎么使用ADO遠程訪問PostgreSQL就分享到這里了,希望以上內容可以對大家有一定的幫助,可以學到更多知識。如果覺得文章不錯,可以把它分享出去讓更多的人看到。

向AI問一下細節

免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。

AI

斗六市| 曲水县| 达孜县| 宜阳县| 中山市| 嵩明县| 砀山县| 新巴尔虎右旗| 卓尼县| 射洪县| 修水县| 大同县| 道孚县| 资溪县| 迁西县| 东方市| 建湖县| 宜君县| 宁海县| 崇州市| 万全县| 修武县| 陆川县| 安平县| 桦南县| 福安市| 蒙山县| 玉溪市| 贵阳市| 万宁市| 耒阳市| 胶南市| 桦川县| 黎城县| 奈曼旗| 铁力市| 大余县| 沙田区| 浠水县| 凤城市| 易门县|