ado跨資料庫
① 如何用ADO連接各種資料庫的代碼
如何用ADO連接各種資料庫的代碼:
簡單介紹一下幾種ADO連接方式:ODBC DSN,ODBC DSN-Less,
OLE DB Provider,和"MS Remote" Provider.
1。ODBC DSN連接
I.DSN
oConn.Open "DSN=AdvWorks;" & _
"UID=Admin;" & _
"PWD=;"
注意:從MDAC2.1開始就不能夠在使用這樣的方式了,就是只把DSN文件名放在ConnectString中
你必須同時使用DSN,UID,PWD標志。例如下面的方式在MDAC 2.1中將會出錯:
oConn.Open "AdvWorks"
II.File DSN
oConn.Open "FILEDSN=\somepath\mydb.dsn;" & _
"UID=Admin;" & _
"PWD=;"
III.ODBC DSN-Less Connections
a)ODBC Text Driver
oConn.Open _
"Driver={Microsoft Text Driver (*.txt; *.csv)};" & _
"Dbq=\somepath\;" & _
"Extensions=asc,csv,tab,txt;" & _
"Persist Security Info=False"
注意:需要在sql語句中指定使用到的文件名。例如:
oRs.Open "Select * From customer.csv", _
oConn, adOpenStatic, adLockReadOnly, adCmdText
b)ODBC Driver for Access
i)普通安全模式:
oConn.Open _
"Driver={Microsoft Access Driver (*.mdb)};" & _
"Dbq=\somepath\mydb.mdb;" & _
"Uid=Admin;" & _
"Pwd=;"
ii)如果使用了System database:
oConn.Open _
"Driver={Microsoft Access Driver (*.mdb)};" & _
"Dbq=\somepath\mydb.mdb;" & _
"SystemDB=\somepath\mydb.mdw;", _
"admin", ""
c)ODBC Driver for SQL Server
i)普通安全模式
oConn.Open "Driver={SQL Server};" & _
"Server=carl2;" & _
"Database=pubs;" & _
"Uid=sa;" & _
"Pwd=;"
ii)使用信任安全模式:
oConn.Open "Driver={SQL Server};" & _
"Server=carl2;" & _
"Database=pubs;" & _
"Uid=;" & _
"Pwd=;"
注意:要使用空白的Uid和Pwdd)ODBC Driver for Oracle
i)使用現有的Oracle ODBC Driver from Microsoft:
oConn.Open _
"Driver={Microsoft ODBC for Oracle};" & _
"Server=OracleServer.world;" & _
"Uid=demo;" & _
"Pwd=demo;"
ii)使用老版本的Oracle ODBC Driver from Microsoft:
oConn.Open _
"Driver={Microsoft ODBC Driver for Oracle};" & _
"ConnectString=OracleServer.world;" & _
"Uid=demo;" & _
"Pwd=demo;"
IIII)使用微軟的OLE DB Data Link Connections方式Data Link File (UDL)
a)使用絕對路徑
oConn.Open "File Name=\somepath\pubs.udl;"
b)使用相對路徑
oConn.Open "File Name=pubs.udl;"
V)OLE DB Provider Connections方式
a)OLE DB Provider for ODBC Databases
i)Access (Jet):
oConn.Open _
"Provider=MSDASQL;" & _
"Driver={Microsoft Access Driver (*.mdb)};" & _
"Dbq=\somepath\mydb.mdb;" & _
"Uid=Admin;" & _
"Pwd=;"
ii)SQL Server:
oConn.Open _
"Provider=MSDASQL;" & _
"Driver={SQL Server};" & _
"Server=carl2;" & _
"Database=pubs;" & _
"Uid=sa;" & _
"Pwd=;"
b)OLE DB Provider for Microsoft Jet (Access)
i)普通安全模式:
oConn.Open _
"Provider=Microsoft.Jet.OLEDB.4.0;" & _
"Data Source=\somepath\mydb.mdb;" & _
"User Id=admin;" & _
"Password=;"
ii)如果使用了System database:
oConn.Open _
"Provider=Microsoft.Jet.OLEDB.4.0;" & _
"Data Source=\somepath\mydb.mdb;" & _
"Jet OLEDB:System Database=system.mdw;", _
"admin", ""
注意:當使用OLE DB Provider4.0版本是,需要把MDB和MDW文件轉換成4.0的資料庫格式
iii)如果MDB需要一個資料庫密碼的話:
oConn.Open _
"Provider=Microsoft.Jet.OLEDB.4.0;" & _
"Data Source=\somepath\mydb.mdb;" & _
"Jet OLEDB:Database Password=MyDbPassword;", _
"admin", ""
c)OLE DB Provider for Excel Spreadsheet:
oConn.Open _
"Provider=Microsoft.Jet.OLEDB.4.0;" & _
"Data Source=\somepath\expenses.xls;" & _
"Extended Properties=""Excel 8.0;HDR=Yes;"";"
注意: "HDR=Yes"表示在第一行中是行標題,在provider中將不把第一行包括入recordset中
d)OLE DB Provider for SQL Server
i)普通安全模式:
oConn.Open "Provider=sqloledb;" & _
"Network Library=DBMSSOCN;" & _
"Data Source=carl2;" & _
"Initial Catalog=pubs;" & _
"User Id=sa;" & _
"Password=;"
ii)使用信任安全模式:
oConn.Open "Provider=sqloledb;" & _
Network Library=DBMSSOCN;" & _
"Data Source=carl2;" & _
"Initial Catalog=pubs;" & _
"Trusted_Connection=yes;"
注意:"Network Library=DBMSSOCN"聲明OLE DB使用TCP/IP替代Named Pipes.
e)OLE DB Provider for Oracle
oConn.Open "Provider=msra;" & _
"Data Source=OracleServer.world;" & _
"User Id=sa;" & _
"Password=;"
(VI)Remote OLE DB Provider Connections方式(就是我一直在研究的RDS方式哦,呵呵。):
a)MS Remote - Access (Jet)
i)ODBC DSN:
oConn.Open "Remote Server=http://carl2;" & _
"Remote Provider=MSDASQL;" & _
"DSN=AdvWorks;" & _
"Uid=admin" & _
"Pwd=;"
ii)OLE DB Provider:
oConn.Open "Provider=MS Remote;" & _
"Remote Server=http://carl2;" & _
"Remote Provider=Microsoft.Jet.OLEDB.4.0;" & _
"Data Source=\somepath\mydb.mdb;", _
"admin", ""
iii)OLE DB Provider自定義事務對象
oConn.Open "Provider=MS Remote;" & _
"Remote Server=http://carl2;" & _
"Handler=MSDFMAP.Handler;" & _
"Data Source=MyAdvworksOLEDBConnectTag;"
b)MS Remote - SQL Server
i)ODBC DSN:
oConn.Open "Remote Server=http://carl2;" & _
"Remote Provider=MSDASQL;" & _
"Network Library=DBMSSOCN;" & _
"DSN=Pubs;" & _
"Uid=sa" & _
"Pwd=;"
ii)OLE DB Provider
oConn.Open "Provider=MS Remote;" & _
"Remote Server=http://carl2;" & _
"Remote Provider=SQLOLEDB;" & _
"Network Library=DBMSSOCN;" & _
"Data Source=carl2;" & _
"Initial Catalog=pubs;" & _
"User ID=sa;" & _
"Password=;"
② 如何使用ADO連接DB2資料庫
連接之前 確保本地客戶端 安裝BD2 資料庫驅動 .(本地安裝DB2 客戶端)
之後通過ADO 配置界面 填寫好 IP 和 對應的資料庫名 就可以.
③ ADO連接跨網段sqlserver2005伺服器資料庫失敗是什麼原因
一般的伺服器都安裝有防火牆,很可能是防火牆設置只接受同一網段的IP地址,而拒絕了其他IP地址訪問資料庫。可以問一下伺服器管理員,具體的防火牆策略。
④ ADO open語句里涉及兩個資料庫怎麼寫
一次只能連一個資料庫!
而你的數據涉及二個庫,那很簡單,在你連的資料庫里添加資料庫鏈接,再用存儲過程直接使用另一個庫的數據和本庫表進行join,最後返回數據
⑤ delphi 關於用ADO控制項連接資料庫的跨資料庫問題
在delphi中使用adoquery實現:adoquery1,adoquery2分別分別連接到資料庫中的表1,表2:adoquery1.close;adoquery2.close;adoquery1.sql.clear;adoquery2.sql.clear;adoquery1.sql.add('select
field1
from
table1');adoquery2.sql.add('select
field1
from
table2');adoquery1.open;adoquery2.openwhile
not
adoquery1.eof
dobegin
adoquery2.insert;
adoquery2.fieldbyname('field1').value:=adoquery1.fieldbyname('field1').value;
adoquery1.next;end;以上只是演示表中只有一個field的情況,多field類似
⑥ C++中ADO訪問資料庫方法
一、ADO概述
ADO是Microsoft為最新和最強大的數據訪問範例 OLE DB 而設計的,是一個便於使用的應用程序層介面。ADO 使您能夠編寫應用程序以通過 OLE. DB 提供者訪問和操作資料庫伺服器中的數據。ADO 最主要的優點是易於使用、速度快、內存支出少和磁碟遺跡小。ADO 在關鍵的應用方案中使用最少的網路流量,並且在前端和數據源之間使用最少的層數,所有這些都是為了提供輕量、高性能的介面。之所以稱為 ADO,是用了一個比較熟悉的暗喻,OLE 自動化介面。
OLE DB是一組」組件對象模型」(COM) 介面,是新的資料庫低層介面,它封裝了ODBC的功能,並以統一的方式訪問存儲在不同信息源中的數據。OLE DB是Microsoft UDA(Universal Data Access)策略的技術基礎。OLE DB 為任何數據源提供了高性能的訪問,這些數據源包括關系和非關系資料庫、電子郵件和文件系統、文本和圖形、自定義業務對象等等。也就是說,OLE DB 並不局限於 ISAM、Jet 甚至關系數據源,它能夠處理任何類型的數據,而不考慮它們的格式和存儲方法。在實際應用中,這種多樣性意味著可以訪問駐留在 Excel 電子數據表、文本文件、電子郵件/目錄服務甚至郵件伺服器,諸如 Microsoft Exchange 中的數據。但是,OLE DB 應用程序編程介面的目的是為各種應用程序提供最佳的功能,它並不符合簡單化的要求。您需要的API 應該是一座連接應用程序和OLE DB 的橋梁,這就是 ActiveX Data Objects (ADO)。
二、在VC中使用ADO(開發步驟如下:)
1、引入ADO庫文件
使用ADO前必須在工程的stdafx.h頭文件里用直接引入符號#import引入ADO庫文件,以使編譯器能正確編譯。代碼如下所示:
用#import引入ADO庫文件
#import "c:\program files\common files\system\ado\msado15.dll"no_namespaces rename("EOF" adoEOF")
這行語句聲明在工程中使用ADO,但不使用ADO的名字空間,並且為了避免常數沖突,將常數EOF改名為adoEOF。現在不需添加另外的頭文件,就可以使用ADO介面了。
2、初始化OLE/COM庫環境
必須注意的是,ADO庫是一組COM動態庫,這意味應用程序在調用ADO前,必須初始化OLE/COM庫環境。在MFC應用程序里,一個比較好的方法是在應用程序主類的InitInstance成員函數里初始化OLE/COM庫環境。
BOOL CMyAdoTestApp::InitInstance()
{
if(!AfxOleInit())//這就是初始化COM庫
{
AfxMessageBox(「OLE初始化出錯!」);
return FALSE;
}
……
}
3、ADO介面簡介
ADO庫包含三個基本介面:_ConnectionPtr介面、_CommandPtr介面和_RecordsetPtr介面。
_ConnectionPtr介面返回一個記錄集或一個空指針。通常使用它來創建一個數據連接或執行一條不返回任何結果的SQL語句,如一個存儲過程。使用_ConnectionPtr介面返回一個記錄集不是一個好的使用方法。對於要返回記錄的操作通常用_RecordserPtr來實現。而用_ConnectionPtr操作時要想得到記錄條數得遍歷所有記錄,而用_RecordserPtr時不需要。
_CommandPtr介面返回一個記錄集。它提供了一種簡單的方法來執行返回記錄集的存儲過程和SQL語句。在使用_CommandPtr介面時,你可以利用全局_ConnectionPtr介面,也可以在_CommandPtr介面里直接使用連接串。如果你只執行一次或幾次數據訪問操作,後者是比較好的選擇。但如果你要頻繁訪問資料庫,並要返回很多記錄集,那麼,你應該使用全局_ConnectionPtr介面創建一個數據連接,然後使用_CommandPtr介面執行存儲過程和SQL語句。
_RecordsetPtr是一個記錄集對象。與以上兩種對象相比,它對記錄集提供了更多的控制功能,如記錄鎖定,游標控制等。同_CommandPtr介面一樣,它不一定要使用一個已經創建的數據連接,可以用一個連接串代替連接指針賦給_RecordsetPtr的connection成員變數,讓它自己創建數據連接。如果你要使用多個記錄集,最好的方法是同Command對象一樣使用已經創建了數據連接的全局_ConnectionPtr介面
,然後使用_RecordsetPtr執行存儲過程和SQL語句。
4、使用_ConnectionPtr介面
_ConnectionPtr主要是一個連接介面,取得與資料庫的連接。它的連接字元串可以是自己直接寫,也可以指向一個ODBC DSN。
_ConnectionPtr pConn;
if (FAILED(pConn.CreateInstance("ADODB.Connection")))
{
AfxMessageBox("Create Instance failed!");
return;
}
CString strSRC;
strSRC="Driver=SQL Server;Server=";
strSRC+="suppersoft";
strSRC+=";Database=";
strSRC+="mydb";
strSRC+=";UID=SA;PWD=";
CString strSQL = "Insert into student(no,name,sex,address) values(3,'aaa','male','beijing')";
_variant_t varSRC(strSRC);
_variant_t varSQL(strSQL);
_bstr_t bstrSRC(strSRC);
if (FAILED(pConn->Open(bstrSRC,"","",-1)))
{
AfxMessageBox("Can not open Database!");
pConn.Release();
return;
}
COleVariant vtOptional((long)DISP_E_PARAMNOTFOUND,VT_ERROR);
pConn->Execute(_bstr_t(strSQL),&vtOptional,-1);
pConn.Release();
AfxMessageBox("ok!");
5、使用_RecordsetPtr介面(以連接SQL Server為例)
_RecordsetPtr pPtr;
if (FAILED(pPtr.CreateInstance("ADODB.Recordset")))
{
AfxMessageBox("Create Instance failed!");
return FALSE;
}
CString strSRC;
strSRC="Driver=SQL Server;Server=";
strSRC+="210.46.141.145";
strSRC+=";Database=";
strSRC+="mydb";
strSRC+=";UID=sa;PWD=";
strSRC+="sa";
CString strSQL = "select id,name,gender,address from personal";
_variant_t varSRC(strSRC);
_variant_t varSQL(strSQL);
if(FAILED(pPtr->Open(varSQL,varSRC,adOpenStatic,adLockOptimistic,adCmdText)))
{
AfxMessageBox("Open table failed!");
pPtr.Release();
return FALSE;
}
while(!pPtr->GetadoEOF())
{
_variant_t varNo;
_variant_t varName;
_variant_t varSex;
_variant_t varAddress;
varNo = pPtr->GetCollect ("id");
varName = pPtr->GetCollect ("name");
varSex = pPtr->GetCollect ("gender");
varAddress = pPtr->GetCollect ("address");
CString strNo =(char *)_bstr_t(varNo);
CString strName =(char *)_bstr_t(varName);
CString strSex =(char *)_bstr_t(varSex);
CString strAddress =(char *)_bstr_t(varAddress);
strNo.TrimRight();
strName.TrimRight();
strSex.TrimRight();
strAddress.TrimRight();
int nCount = m_list.GetItemCount();
int nItem = m_list.InsertItem (nCount,_T(""));
m_list.SetItemText (nItem,0,strNo);
m_list.SetItemText (nItem,1,strName);
m_list.SetItemText (nItem,2,strSex);
m_list.SetItemText (nItem,3,strAddress);
pPtr->MoveNext();
}
pPtr->Close();
pPtr.Release();
6、使用_CommandPtr介面
_CommandPtr介面返回一個Recordset對象,並且提供了更多的記錄集控制功能,以下代碼示例了使用_CommandPtr介面的方法:
代碼:使用_CommandPtr介面獲取數據
_CommandPtr pCommand;
_RecordsetPtr pRs;
pCommand.CreateInstance(__uuidof(Command));
pCommand->ActiveConnection=pConn;
pCommand->CommandText="select * from student";
pCommand->CommandType=adCmdText;
pCommand->Parameters->Refresh();
pRs=pCommand->Execute(NULL,NULL,adCmdUnknown);
_variant_t varValue = pRs->GetCollect("name");
Cstring strValue=(char*)_bstr_t(varValue);
7、關於數據類型轉換由於COM對象是跨平台的,它使用了一種通用的方法來處理各種類型的數據,因此Cstring 類和COM對象是不兼容的,我們需要一組API來轉換COM對象和C++類型的數據。_vatiant_t和_bstr_t就是這樣兩種對象。它們提供了通用的方法轉換COM對象和C++類型的數據。
詳情請見 http://hi..com/lninglove/blog/item/3f6cec22959e4ca34723e833.html
⑦ vb6如何用ado跨資料庫查詢多個xls的數據
你既然單個ado可以操作資料庫,那對於操作多個數據源,應該可以使用多個不同的ado對象分別操作不同的數據源,從而進行所謂的跨數據源操作的呀?
提示:ado1操作資料庫1,ado2操作資料庫2,然後所謂跨資料庫,無非就是在使用數據前的對象指明ado1或ado2就可以了呀!
⑧ vb 用ado連接sql資料庫。。。。
在VB中使用ADO
在程序設計中,ADO不是作為可視化的控制項來使用的,如果要在應用程序中使用ADO組件,需要在"工程"菜單下的"引用"項中選該組件!該組件名稱為:"Mircrosoft ActiveX Data Object 2.0 Library" (注:可能有2.5 2.6 或者其他版本)
3->ADO數據訪問過程概要
使用ADO訪問資料庫類似於高速公路,首先,必須先修好公路,建立城市與城市間的連接,汽車才能在上面運行,ADO首先也需要建立程序與資料庫間的連接,然後在這個連接上執行操作.
因此ADO提供了一個連接對象,該對象負責建立與資料庫的連接,因此提供了一些屬性以供設置,同時也提供了建立連接的方法與相應連接相關的事件!
連接建立之後,連接對像本身也提供了資料庫執行操作的方法,但要更強有力的執行SQL的功能要由另一個命令對象來實現.
此外,一個非常重要的對象是記錄集對像,因為在很多時候,需要執行資料庫的查詢,而查詢的結果返回必須以某個容器來承載,就好比高速公路運送回來的貨物需要建立一個物資倉庫來進行貨物的接收和儲存.
還需要注意的是,要求程序與資料庫之間斷開連接.
連接對象,命令對象,和記錄集對象分別對應ADO的Connection,Command,和Recordset三個對象
4->ADO Connection對象的屬性方法和事件
1.連接對象(Connection)的主要屬性
屬性名稱 屬性說明
Provider 指定要進行連接的提供程序的名稱,該屬性標識要進行數據連接的資料庫類型
CommandTimeOut 設置或者返回產生錯誤之前執行命令期間需等待的時間,單位為秒
ConnectionTimeOut 設置或者返回產生錯誤前建立連接期間所等待的時間,單位為秒
ConnectionString 設置建立到數據源的連接的信息,不同的信息單元以";"號分割
State 說明當前連接的狀態信息
主要屬性說明:
A.Provider
用 Provider 屬性可以設置或返回連接提供者名稱,也可以通過ConnectionString屬性的內容或open方法的ConnectionString參數設置該屬性
例如: Con.Provider="Microsoft.Jet.OLEDB.3.51"
Con.Provider="sqloledb"
分別表示access與Sql Server的連接支持!
B.ConnectionString
例如,可以按以下方式分別設置SQL Server與Access的連接字元串信息
Con.ConnectionString="driver={SQL Server};server=SV1;uid=sa;pwd=;database=pubs"
Con.ConnectionString="Provider=Microsoft.Jet.OLEDB.4.0;Data Source=C:\1.MDB"
請注意Access資料庫與Sql Server資料庫不同的連接方式,Access資料庫需要指定具體的文件名,而Sql Server通過指定資料庫名來訪問
連接方式可以還可以是數據源,例如,可以使用建立的數據源連接:
Con.ConnectionString="DSN=ACCPSQL;server=SV1;uid=sa;pwd=;"
C.State
該屬性是只讀的,不能進行設置,返回值為adStateClosed常數表示連接已關閉,返回值adStateOpen常數表示連接是打開的
附:Provider Parameters 參數
提供程序 參數字元串
Micrusoft Jet Microsoft.Jet.OLEDB.3.51
Oracle MSDAORA
Microsoft ODBC Driver MSDASQL
SQL Server SQLOLEDB