『壹』 vc++.net ADO 資料庫開發問題
很容易了。
先設好ADO的連接;
下面用ADO讀取相關的數據:
adodc1.recordsource="select ***** from *** where ***"(具體語句我沒寫,根據你要查詢的內容而定,不會的話另行討論)
adodc1.refresh
adodc1.recordset.movefirst
清空列表框
combo1.clear
添加數據
for i=1 to adodc1.recordset.recordcount
combo1.additem adodc1.recordset.fields("****")
nexti
這樣就應該行了,我的程序里都是這么用的,當然,你還可以在讀取數據時進行排序
『貳』 請簡描述ADO.NET訪問資料庫的步驟
1.創建資料庫連接字元創抄
2.導入命名空間System.data.sqlcen...
3.jia創建SQLCONNECTION 對象 把鏈接字元創 放進去
4. 打開資料庫
5.聲明SQLcommand對象 括弧內放 執行命令的SQL語句 和connection對象
6command對象。方法執行相關命令
『叄』 Ado.net訪問資料庫的方法和步驟
不論從語法來看 還是從風格和設計目標來看 ADO NET都和ADO有顯著的不同 在ASP中通過ADO訪問資料庫 一般要通過以下四個步驟
創建一個到資料庫的鏈路 即ADO Connection
查詢一個數據集合 即執行SQL 產生一個Recordset
對數據集合進行需要的操作
關閉數據鏈路
在ADO NET里 這些步驟有很大的變化 ADO NET的最重要概念之一是DataSet DataSet是不依賴於資料庫的獨立數據集合 所謂獨立 就是 即使斷開數據鏈路 或者關閉資料庫 DataSet依然是可用的 如果你在ASP裡面使用過非連接記錄集合(Connectionless Recordset) 那麼DataSet就是這種技術的最徹底的替代品
有了DataSet 那麼 ADO NET訪問資料庫的步驟就相應地改變了
◆創建一個資料庫鏈路 ◆請求一個記錄集合 ◆把記錄集合暫存到DataSet ◆如果需要 返回第 步 (DataSet可以容納多個數據集合) ◆關閉資料庫鏈路 ◆在DataSet上做所需要的操作
lishixin/Article/program/net/201311/15216
『肆』 labview中怎麼用ado創建資料庫
eW;中利用介面訪問資料庫的方法;黎洪生;李超;劉俊剛;(武漢理工大學西院信息學院;450070);摘要較對LabView中的幾種資料庫訪問方法作了;關鍵詞:LabVjew資料庫ADO;SQL;引言;LabView(1aboratoryVinual;engineering;利用其他語言如visualc++編寫DLL程序訪;利用中間文件存取數據,先將數據
eW
中利用AD0介面訪問資料庫的方法
黎洪生
李超
劉俊剛
(武漢理工大學西院信息學院
450070)
摘要較對LabView中的幾種資料庫訪問方法作了一些比較。詳細說明了利用ADO介面訪問資料庫的方法,並利用該方法實現了對實時資料庫的訪問。
關鍵詞:LabVjew資料庫ADO
SQL
1
引言
LabView(1aboratoryVinualinstnlment
engineering
利用其他語言如visualc++編寫DLL程序訪問資料庫,利用LabView所帶的DLL介面訪問該程序,可以實現間接的訪問資料庫。用這種方法實現需要的工作量比較大。
利用中間文件存取數據,先將數據存入文件之中,在一定的時刻或者是需要的時候再將數據導入到資料庫之中。這種方法的實現比較簡單,但是需要單獨的軟體對數據文件導入導出,不能對數據進行實時的存取。
這幾種方法雖然可以實現對資料庫的訪問,但各有缺點,不能滿足監控系統中對實時資料庫訪問的要求。本
文提出的利用ADO介面訪問資料庫的方法則可以較好的
workbench實驗室虛擬儀器工程平台)是美國NI(NationalInstmments)公司標志性的虛擬儀器產品,是一種基於圖形化語言的開發、調試和運行的集成化環境。它主要用於來開發數據採集、儀器控制、測試測量及過程監測和控制等領域的應用程序。它使用圖形語言,即各種圖表,圖形符號、連線等編程,界面非常宦觀形象,相對於傳統的編程方式而言,它不僅簡單易學而且執行的效率也很高。LabView中自帶豐富的函數庫,包括數據採集、數據分析、網路、Activex等集成庫,提供了DLL庫和cIN節點和大量的儀器驅動器、網路VIs與其他外部程序或外部
設備進行連接。它所提供的自動化Activex、DDE、SQL
解決這個問題。
等功能可以很方便的與其他Windows應用程序一起集成用戶的應用程序。
基於LabView的上述特點和功能,在開發某監控系統的工程中筆者選擇了LabView作為開發工具。
3
利用ADO介面訪問資料庫簡介
AD0(ActiveX
Data
0bjects)是Microsoft為最新數據
訪問介面OLEDB設計的應用層介面,它為一致的數據
訪問介面提供了良好的擴展性,不再局限於特定的數據
源。這種特徵使此技術具有非常靈活的訪問特性
『伍』 ADO是什麼麻煩告訴我
一種程序對象,用於表示用戶資料庫中的數據結構和所包含的數據。
在Microsoft Visual Basic編輯器中,可以使用ADO對象以及ADO的附加組件(稱為Microsoft ADO Extensions for DLL and Security(ADOX))來創建或修改表和查詢、檢驗資料庫、或者訪問外部數據源。還可在代碼中使用ADO來操作資料庫中的數據。
ADO(ActiveX Data Objects,ActiveX數據對象)是Microsoft提出的應用程序介面(API)用以實現訪問關系或非關系資料庫中的數據。
例如,如果希望編寫應用程序從DB2或Oracle資料庫中向網頁提供數據,可以將ADO程序包括在作為活動伺服器頁(ASP)的HTML文件中。當用戶從網站請求網頁時,返回的網頁也包括了數據中的相應數據,這些是由於使用了ADO代碼的結果。
(5)ado資料庫怎麼開發擴展閱讀:
ADO介面簡介
1、_ConnectionPtr介面
返回一個記錄集或一個空指針。通常使用它來創建一個數據連接或執行一條不返回任何結果的SQL語句,如一個存儲過程。
2、_CommandPtr介面
返回一個記錄集。它提供了一種簡單的方法來執行返回記錄集的存儲過程和SQL語句。
3、_RecordsetPtr介面
是一個記錄集對象。與以上兩種對象相比,它對記錄集提供了更多的控制功能,如記錄鎖定,游標控制等。
『陸』 ADO是什麼它的作用是什麼
ADO是一種程序對象,用於表示用戶資料庫中的數據結構和所包含的數據。
在Microsoft Visual Basic編輯器中,可以使用ADO對象以及ADO的附加組件(稱為Microsoft ADO Extensions for DLL and Security(ADOX))來創建或修改表和查詢、檢驗資料庫、或者訪問外部數據源。還可在代碼中使用ADO來操作資料庫中的數據。
(6)ado資料庫怎麼開發擴展閱讀
像Microsoft的其它系統介面一樣,ADO是面向對象的。它是Microsoft全局數據訪問(UDA)的一部分,Microsoft認為與其自己創建一個數據,不如利用UDA訪問已有的資料庫。
為達到這一目的,Microsoft和其它資料庫公司在它們的資料庫和Microsoft的OLE資料庫之間提供了一個「橋」程序,OLE資料庫已經在使用ADO技術。
ADO技術優勢
1、ADO的優勢就是擁有更好的LINQ提供程序、文檔,並且是由微軟所支持的。
2、ADO具有大量Entity Framework 4.0所不具備的特性,像批量讀/寫、「額外的」延遲、集合過濾器、調整等等。
3、ADO工具的普遍開發速度快。
參考資料:網路—ActiveX Data Objects
『柒』 關於vc++6.0中 通過ADO連接資料庫的問題!!
執行SQL命令並取得結果記錄集
為了取得結果記錄集,我們定義一個指向Recordset對象的指針:_RecordsetPtr m_pRecordset;
並為其創建Recordset對象的實例: m_pRecordset.CreateInstance("ADODB.Recordset");
SQL命令的執行可以採用多種形式,下面我們一進行闡述。
(1)利用Connection對象的Execute方法執行SQL命令
Execute方法的原型如下所示:
_RecordsetPtr Connection15::Execute ( _bstr_t CommandText, VARIANT * RecordsAffected, long Options ) 其中CommandText是命令字串,通常是SQL命令。參數RecordsAffected是操作完成後所影響的行數, 參數Options表示CommandText中內容的類型,Options可以取如下值之一:
adCmdText:表明CommandText是文本命令
adCmdTable:表明CommandText是一個表名
adCmdProc:表明CommandText是一個存儲過程
adCmdUnknown:未知
Execute執行完後返回一個指向記錄集的指針,下面我們給出具體代碼並作說明。
_variant_t RecordsAffected;
///執行SQL命令:CREATE TABLE創建表格users,users包含四個欄位:整形ID,字元串username,整形old,日期型birthday
m_pConnection- >Execute("CREATE TABLE users(ID INTEGER,username TEXT,old INTEGER,birthday DATETIME)",&RecordsAffected,adCmdText);
///往表格裡面添加記錄
m_pConnection- >Execute("INSERT INTO users(ID,username,old,birthday) VALUES (1, "Washington ",25, "1970/1/1 ")",&RecordsAffected,adCmdText);
///將所有記錄old欄位的值加一
m_pConnection- >Execute("UPDATE users SET old = old+1",&RecordsAffected,adCmdText);
///執行SQL統計命令得到包含記錄條數的記錄集
m_pRecordset = m_pConnection- >Execute("SELECT COUNT(*) FROM users",&RecordsAffected,adCmdText);
_variant_t vIndex = (long)0;
_variant_t vCount = m_pRecordset- >GetCollect(vIndex);///取得第一個欄位的值放入vCount變數
m_pRecordset- >Close();///關閉記錄集
CString message;
message.Format("共有%d條記錄",vCount.lVal);
AfxMessageBox(message);///顯示當前記錄條數
(2)利用Command對象來執行SQL命令
_CommandPtr m_pCommand;
m_pCommand.CreateInstance("ADODB.Command");
_variant_t vNULL;
vNULL.vt = VT_ERROR;
vNULL.scode = DISP_E_PARAMNOTFOUND;///定義為無參數
m_pCommand- >ActiveConnection = m_pConnection;///非常關鍵的一句,將建立的連接賦值給它
m_pCommand- >CommandText = "SELECT * FROM users";///命令字串
m_pRecordset = m_pCommand- >Execute(&vNULL,&vNULL,adCmdText);///執行命令,取得記錄集
在這段代碼中我們只是用Command對象來執行了SELECT查詢語句,Command對象在進行存儲過程的調用中能真正體現它的作用。下次我們將詳細介紹。
(3)直接用Recordset對象進行查詢取得記錄集
例如
m_pRecordset- >Open("SELECT * FROM users",_variant_t((IDispatch *)m_pConnection,true),adOpenStatic,adLockOptimistic,adCmdText);
Open方法的原型是這樣的:
HRESULT Recordset15::Open ( const _variant_t & Source, const _variant_t & ActiveConnection, enum CursorTypeEnum CursorType, enum LockTypeEnum LockType, long Options )
其中:
①Source是數據查詢字元串
②ActiveConnection是已經建立好的連接(我們需要用Connection對象指針來構造一個_variant_t對象)
③CursorType游標類型,它可以是以下值之一,請看這個枚舉結構:
enum CursorTypeEnum
{
adOpenUnspecified = -1,///不作特別指定
adOpenForwardOnly = 0,///前滾靜態游標。這種游標只能向前瀏覽記錄集,比如用MoveNext向前滾動,這種方式可以提高瀏覽速度。但諸如BookMark,RecordCount,AbsolutePosition,AbsolutePage都不能使用
adOpenKeyset = 1,///採用這種游標的記錄集看不到其它用戶的新增、刪除操作,但對於更新原有記錄的操作對你是可見的。
adOpenDynamic = 2,///動態游標。所有資料庫的操作都會立即在各用戶記錄集上反應出來。
adOpenStatic = 3///靜態游標。它為你的記錄集產生一個靜態備份,但其它用戶的新增、刪除、更新操作對你的記錄集來說是不可見的。
};
④LockType鎖定類型,它可以是以下值之一,請看如下枚舉結構:
enum LockTypeEnum
{
adLockUnspecified = -1,///未指定
adLockReadOnly = 1,///只讀記錄集
adLockPessimistic = 2,悲觀鎖定方式。數據在更新時鎖定其它所有動作,這是最安全的鎖定機制
adLockOptimistic = 3,樂觀鎖定方式。只有在你調用Update方法時才鎖定記錄。在此之前仍然可以做數據的更新、插入、刪除等動作
adLockBatchOptimistic = 4,樂觀分批更新。編輯時記錄不會鎖定,更改、插入及刪除是在批處理模式下完成。
};
⑤Options請參考本文中對Connection對象的Execute方法的介紹
【5】記錄集的遍歷、更新
根據我們剛才通過執行SQL命令建立好的users表,它包含四個欄位:ID,username,old,birthday
以下的代碼實現:打開記錄集,遍歷所有記錄,刪除第一條記錄,添加三條記錄,移動游標到第二條記錄,更改其年齡,保存到資料庫。
_variant_t vUsername,vBirthday,vID,vOld;
_RecordsetPtr m_pRecordset;
m_pRecordset.CreateInstance("ADODB.Recordset");
m_pRecordset- >Open("SELECT * FROM users",_variant_t((IDispatch*)m_pConnection,true),adOpenStatic,adLockOptimistic,adCmdText);
while(!m_pRecordset- >adoEOF)///這里為什麼是adoEOF而不是EOF呢?還記得rename("EOF","adoEOF")這一句嗎?
{
vID = m_pRecordset- >GetCollect(_variant_t((long)0));///取得第1列的值,從0開始計數,你也可以直接給出列的名稱,如下一行
vUsername = m_pRecordset- >GetCollect("username");///取得username欄位的值
vOld = m_pRecordset- >GetCollect("old");
vBirthday = m_pRecordset- >GetCollect("birthday");
///在DEBUG方式下的OUTPUT窗口輸出記錄集中的記錄
if(vID.vt != VT_NULL && vUsername.vt != VT_NULL && vOld.vt != VT_NULL && vBirthday.vt != VT_NULL)
TRACE("id:%d,姓名:%s,年齡:%d,生日:%s\r\n",vID.lVal,(LPCTSTR)(_bstr_t)vUsername,vOld.lVal,(LPCTSTR)(_bstr_t)vBirthday);
m_pRecordset- >MoveNext();///移到下一條記錄
}
m_pRecordset- >MoveFirst();///移到首條記錄
m_pRecordset- >Delete(adAffectCurrent);///刪除當前記錄
///添加三條新記錄並賦值
for(int i=0;i <3;i++)
{
m_pRecordset- >AddNew();///添加新記錄
m_pRecordset- >PutCollect("ID",_variant_t((long)(i+10)));
m_pRecordset- >PutCollect("username",_variant_t("葉利欽"));
m_pRecordset- >PutCollect("old",_variant_t((long)71));
m_pRecordset- >PutCollect("birthday",_variant_t("1930-3-15"));
}
m_pRecordset- >Move(1,_variant_t((long)adBookmarkFirst));///從第一條記錄往下移動一條記錄,即移動到第二條記錄處
m_pRecordset- >PutCollect(_variant_t("old"),_variant_t((long)45));///修改其年齡
m_pRecordset- >Update();///保存到庫中
【6】關閉記錄集與連接
記錄集或連接都可以用Close方法來關閉
m_pRecordset- >Close();///關閉記錄集
m_pConnection- >Close();///關閉連接
至此,我想您已經熟悉了ADO操作資料庫的大致流程,也許您已經胸有成竹,也許您還有點胡塗,不要緊!建議你嘗試寫幾個例子,這樣會更好地熟悉ADO
------------------------------------------------------------------------------------
給你粘一篇文章
基本流程
萬事開頭難,任何一種新技術對於初學者來說最重要的還是「入門」,掌握其要點。讓我們來看看ADO資料庫開發的基本流程吧!
(1)初始化COM庫,引入ADO庫定義文件
(2)用Connection對象連接資料庫
(3)利用建立好的連接,通過Connection、Command對象執行SQL命令,或利用Recordset對象取得結果記錄集進行查詢、處理。
(4)使用完畢後關閉連接釋放對象。
准備工作:
為了大家都能測試本文提供的例子,我們採用Access資料庫,您也可以直接在我們提供的示例代碼中找到這個test.mdb。
下面我們將詳細介紹上述步驟並給出相關代碼。
【1】COM庫的初始化
我們可以使用AfxOleInit()來初始化COM庫,這項工作通常在CWinApp::InitInstance()的重載函數中完成,請看如下代碼:
BOOL CADOTest1App::InitInstance()
{
AfxOleInit();
......
【2】用#import指令引入ADO類型庫
我們在stdafx.h中加入如下語句:(stdafx.h這個文件哪裡可以找到?你可以在FileView中的Header Files里找到)
#import "c:\program files\common files\system\ado\msado15.dll" no_namespace rename("EOF","adoEOF")
這一語句有何作用呢?其最終作用同我們熟悉的#include類似,編譯的時候系統會為我們生成msado15.tlh,ado15.tli兩個C++頭文件來定義ADO庫。
幾點說明:
(1) 您的環境中msado15.dll不一定在這個目錄下,請按實際情況修改
(2) 在編譯的時候肯能會出現如下警告,對此微軟在MSDN中作了說明,並建議我們不要理會這個警告。
msado15.tlh(405) : warning C4146: unary minus operator applied to unsigned type, result still unsigned
【3】創建Connection對象並連接資料庫
首先我們需要添加一個指向Connection對象的指針:
_ConnectionPtr m_pConnection;
下面的代碼演示了如何創建Connection對象實例及如何連接資料庫並進行異常捕捉。
BOOL CADOTest1Dlg::OnInitDialog()
{
CDialog::OnInitDialog();
HRESULT hr;
try
{
hr = m_pConnection.CreateInstance("ADODB.Connection");///創建Connection對象
if(SUCCEEDED(hr))
{
hr = m_pConnection- >Open("Provider=Microsoft.Jet.OLEDB.4.0;Data Source=test.mdb","","",adModeUnknown);///連接資料庫
///上面一句中連接字串中的Provider是針對ACCESS2000環境的,對於ACCESS97,需要改為:Provider=Microsoft.Jet.OLEDB.3.51;
}
}
catch(_com_error e)///捕捉異常
{
CString errormessage;
errormessage.Format("連接資料庫失敗!\r\n錯誤信息:%s",e.ErrorMessage());
AfxMessageBox(errormessage);///顯示錯誤信息
}
在這段代碼中我們是通過Connection對象的Open方法來進行連接資料庫的,下面是該方法的原型
HRESULT Connection15::Open ( _bstr_t ConnectionString, _bstr_t UserID, _bstr_t Password, long Options )
ConnectionString為連接字串,UserID是用戶名, Password是登陸密碼,Options是連接選項,用於指定Connection對象對數據的更新許可權,
Options可以是如下幾個常量:
adModeUnknown:預設。當前的許可權未設置
adModeRead:只讀
adModeWrite:只寫
adModeReadWrite:可以讀寫
adModeShareDenyRead:阻止其它Connection對象以讀許可權打開連接
adModeShareDenyWrite:阻止其它Connection對象以寫許可權打開連接
adModeShareExclusive:阻止其它Connection對象以讀寫許可權打開連接
adModeShareDenyNone:阻止其它Connection對象以任何許可權打開連接
我們給出一些常用的連接方式供大家參考:
(1)通過JET資料庫引擎對ACCESS2000資料庫的連接
m_pConnection- >Open("Provider=Microsoft.Jet.OLEDB.4.0;Data Source=C:\\test.mdb","","",adModeUnknown);
(2)通過DSN數據源對任何支持ODBC的資料庫進行連接:
m_pConnection- >Open("Data Source=adotest;UID=sa;PWD=;","","",adModeUnknown);
(3)不通過DSN對SQL SERVER資料庫進行連接:
m_pConnection- >Open("driver={SQL Server};Server=127.0.0.1;DATABASE=vckbase;UID=sa;PWD=139","","",adModeUnknown);
其中Server是SQL伺服器的名稱,DATABASE是庫的名稱
Connection對象除Open方法外還有許多方法,我們先介紹Connection對象中兩個有用的屬性ConnectionTimeOut與State
ConnectionTimeOut用來設置連接的超時時間,需要在Open之前調用,例如:
m_pConnection- >ConnectionTimeout = 5;///設置超時時間為5秒
m_pConnection- >Open("Data Source=adotest;","","",adModeUnknown);
State屬性指明當前Connection對象的狀態,0表示關閉,1表示已經打開,我們可以通過讀取這個屬性來作相應的處理,例如:
if(m_pConnection- >State)
m_pConnection- >Close(); ///如果已經打開了連接則關閉它
------------------------------------------------------------------------------------
呵呵,是啊,我以前不做VC的,所以這次老闆有個項目要做,沒辦法啊!!以後多請教啊!!
------------------------------------------------------------------------------------
你現在不少基礎的不會,上來就連接資料庫有點難
------------------------------------------------------------------------------------
要是你用vc6,就右健點擊要添加變數的控制項,選擇classwizard,選擇member variables選項卡,它會自動指到你想要添加變數的控制項,你直接點選擇add variable,起個名字就可以了
------------------------------------------------------------------------------------
我關鍵是不知道怎麼給控制項添加與之相對應的變數!!請明示啊!!
------------------------------------------------------------------------------------
CBaseEditBox是什麼東西?你不要這樣定義。應該先把控制項放在對話框窗體上,再給這個控制項添加與之相對應的變數,這樣,VC就自動把控制項和變數聯系起來了
------------------------------------------------------------------------------------
剛弄,不怎麼會,請明示!!!
我想把從資料庫中讀出來的記錄放在一個文本框中!
然後在界面上放置了一個edit box
我在類C***Dlg中添加了變數
public:
CBaseEditBox m_list
接下來我在一個按鈕的onOK事件里連接資料庫並想把得到的記錄放到m_list里
// 讀入庫中各欄位並加入列表框中
while(!m_pRecordset- >adoEOF)
{
var = m_pRecordset- >GetCollect("UserName");
if(var.vt != VT_NULL)
strName = (LPCSTR)_bstr_t(var);
var = m_pRecordset- >GetCollect("Password");
if(var.vt != VT_NULL)
strAge = (LPCSTR)_bstr_t(var);
m_list.AddString( strName + " -- > "+strAge );
m_pRecordset- >MoveNext();
}
// 默認列表指向第一項,同時移動記錄指針並顯示
m_list.SetCurSel(0);
然後一大堆錯誤:
d:\microsoft visual studio\myprojects\testado\testadodlg.h(18) : error C2146: syntax error : missing "; " before identifier "m_list "
d:\microsoft visual studio\myprojects\testado\testadodlg.h(18) : error C2501: "CBaseEditBox " : missing storage-class or type specifiers
d:\microsoft visual studio\myprojects\testado\testadodlg.h(18) : error C2501: "m_list " : missing storage-class or type specifiers
TestADODlg.cpp
d:\microsoft visual studio\myprojects\testado\testadodlg.h(18) : error C2146: syntax error : missing "; " before identifier "m_list "
d:\microsoft visual studio\myprojects\testado\testadodlg.h(18) : error C2501: "CBaseEditBox " : missing storage-class or type specifiers
d:\microsoft visual studio\myprojects\testado\testadodlg.h(18) : error C2501: "m_list " : missing storage-class or type specifiers
D:\Microsoft Visual Studio\MyProjects\TestADO\TestADODlg.cpp(195) : error C2065: "m_list " : undeclared identifier
D:\Microsoft Visual Studio\MyProjects\TestADO\TestADODlg.cpp(195) : error C2228: left of ".AddString " must have class/struct/union type
D:\Microsoft Visual Studio\MyProjects\TestADO\TestADODlg.cpp(201) : error C2228: left of ".SetCurSel " must have class/struct/union type
Generating Code...
Error executing cl.exe.
請問什麼原因那?
------------------------------------------------------------------------------------
http://www.vckbase.com/document/viewdoc/?id=496
把文章中連接Access的語句換成:
連接SQL資料庫:
m_pConnection- >Open("Provider=SQLOLEDB.1;Server=192.168.1.6;DATABASE=mysql;UID=sa;PWD=;","","",adModeUnknown);
其中Server是SQL伺服器的名稱,DATABASE是庫的名稱
------------------------------------------------------------------------------------