c封裝資料庫
㈠ 用C編寫資料庫怎麼寫
一個萬能的DBHelper就可以解決都事情,直接對資料庫中的存儲過程進行調用,只需要傳入參數就可以和你調用的存儲過程就可以。有關萬能DBHelper的參考代碼如下:using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Data;
using System.Data.sqlClient;
namespace Clock
{
public static class DBHelper
{
private static SqlConnection connection;//這里的SqlConnection 自己寫//對數據進行查詢時候調用的
public static SqlConnection Connection
{
get
{
string connectionString = "Data Source=PC-Ahsun;Initial Catalog=Clock; uid=sa;pwd=striveahsun";
if (connection == null)
{
connection = new SqlConnection(connectionString);
connection.Open();
}
else if (connection.State == System.Data.ConnectionState.Closed)
{
connection.Open();
}
else if (connection.State == System.Data.ConnectionState.Broken)
{
connection.Close();
connection.Open();
}
return connection;
}
}//對數據進行增刪改時候調用的
public static int ExecuteCommand(string sql)
{
SqlCommand cmd = new SqlCommand(sql,connection);
int resualt = cmd.ExecuteNonQuery();
return resualt;
}
}
}
㈡ 用c語言怎麼連接資料庫呢
25.2.2. C API函數概述
這里歸納了C API可使用的函數,並在下一節詳細介紹了它們。請參見25.2.3節,「C API函數描述」。
函數
描述
mysql_affected_rows()
返回上次UPDATE、DELETE或INSERT查詢更改/刪除/插入的行數。
mysql_autocommit()
切換 autocommit模式,ON/OFF
mysql_change_user()
更改打開連接上的用戶和資料庫。
mysql_charset_name()
返回用於連接的默認字元集的名稱。
mysql_close()
關閉伺服器連接。
mysql_commit()
提交事務。
mysql_connect()
連接到MySQL伺服器。該函數已不再被重視,使用mysql_real_connect()取代。
mysql_create_db()
創建資料庫。該函數已不再被重視,使用SQL語句CREATE DATABASE取而代之。
mysql_data_seek()
在查詢結果集中查找屬性行編號。
mysql_debug()
用給定的字元串執行DBUG_PUSH。
mysql_drop_db()
撤銷資料庫。該函數已不再被重視,使用SQL語句DROP DATABASE取而代之。
mysql_mp_debug_info()
讓伺服器將調試信息寫入日誌。
mysql_eof()
確定是否讀取了結果集的最後一行。該函數已不再被重視,可以使用mysql_errno()或mysql_error()取而代之。
mysql_errno()
返回上次調用的MySQL函數的錯誤編號。
mysql_error()
返回上次調用的MySQL函數的錯誤消息。
mysql_escape_string()
為了用在SQL語句中,對特殊字元進行轉義處理。
mysql_fetch_field()
返回下一個表欄位的類型。
mysql_fetch_field_direct()
給定欄位編號,返回表欄位的類型。
mysql_fetch_fields()
返回所有欄位結構的數組。
mysql_fetch_lengths()
返回當前行中所有列的長度。
mysql_fetch_row()
從結果集中獲取下一行
mysql_field_seek()
將列游標置於指定的列。
mysql_field_count()
返回上次執行語句的結果列的數目。
mysql_field_tell()
返回上次mysql_fetch_field()所使用欄位游標的位置。
mysql_free_result()
釋放結果集使用的內存。
mysql_get_client_info()
以字元串形式返回客戶端版本信息。
mysql_get_client_version()
以整數形式返回客戶端版本信息。
mysql_get_host_info()
返回描述連接的字元串。
mysql_get_server_version()
以整數形式返回伺服器的版本號。
mysql_get_proto_info()
返回連接所使用的協議版本。
mysql_get_server_info()
返回伺服器的版本號。
mysql_info()
返回關於最近所執行查詢的信息。
mysql_init()
獲取或初始化MYSQL結構。
mysql_insert_id()
返回上一個查詢為AUTO_INCREMENT列生成的ID。
mysql_kill()
殺死給定的線程。
mysql_library_end()
最終確定MySQL C API庫。
mysql_library_init()
初始化MySQL C API庫。
mysql_list_dbs()
返回與簡單正則表達式匹配的資料庫名稱。
mysql_list_fields()
返回與簡單正則表達式匹配的欄位名稱。
mysql_list_processes()
返回當前伺服器線程的列表。
mysql_list_tables()
返回與簡單正則表達式匹配的表名。
mysql_more_results()
檢查是否還存在其他結果。
mysql_next_result()
在多語句執行過程中返回/初始化下一個結果。
mysql_num_fields()
返回結果集中的列數。
mysql_num_rows()
返回結果集中的行數。
mysql_options()
為mysql_connect()設置連接選項。
mysql_ping()
檢查與伺服器的連接是否工作,如有必要重新連接。
mysql_query()
執行指定為「以Null終結的字元串」的SQL查詢。
mysql_real_connect()
連接到MySQL伺服器。
mysql_real_escape_string()
考慮到連接的當前字元集,為了在SQL語句中使用,對字元串中的特殊字元進行轉義處理。
mysql_real_query()
執行指定為計數字元串的SQL查詢。
mysql_refresh()
刷新或復位表和高速緩沖。
mysql_reload()
通知伺服器再次載入授權表。
mysql_rollback()
回滾事務。
mysql_row_seek()
使用從mysql_row_tell()返回的值,查找結果集中的行偏移。
mysql_row_tell()
返回行游標位置。
mysql_select_db()
選擇資料庫。
mysql_server_end()
最終確定嵌入式伺服器庫。
mysql_server_init()
初始化嵌入式伺服器庫。
mysql_set_server_option()
為連接設置選項(如多語句)。
mysql_sqlstate()
返回關於上一個錯誤的SQLSTATE錯誤代碼。
mysql_shutdown()
關閉資料庫伺服器。
mysql_stat()
以字元串形式返回伺服器狀態。
mysql_store_result()
檢索完整的結果集至客戶端。
mysql_thread_id()
返回當前線程ID。
mysql_thread_safe()
如果客戶端已編譯為線程安全的,返回1。
mysql_use_result()
初始化逐行的結果集檢索。
mysql_warning_count()
返回上一個SQL語句的告警數。 詳見:http://dev.mysql.com/doc/refman/5.1/zh/apis.html#c-api-function-overview
http://dev.mysql.com/doc/refman/5.0/en/c.html
㈢ C語言中如何做資料庫(c語言寫資料庫)
CDatabase對象表示到數據源的連接,通過它可以操作數據源。數據源是位於一些資料庫管理系統(DBMS)的數據的指定實例,包括Server,MicrosoftAess,BorlanddBASE和xBASE。在應用中可以同時使一個或多個CDatabase對象活動。
注意讓高氏:
如果在處理數據訪問對象(DAO)類而不是開放資料庫連接(念瞎ODBC)類,可使用類。有關的更多信息,請參閱聯機文檔「VisualC程序員指南」中的「資料庫主題(通用)」與「DAO和MFC」。
為使用CDatabase,構造一個CDatabase對象並調用它的OpenEx成員函數。這打開了一個連接。在接著構造CRecordset對象以操縱連接的數據源時,向CDatabase對象傳遞記錄集構造程序指針。完成使用連接時坦散調用Close成員函數並銷毀CDatabase對象。Close關閉以前沒有關閉的任何記錄集。
㈣ 如何用C語言建立資料庫
用SQLITE吧,像ACCESS.你可以去www.sqlite.org那裡下載類庫.頭文件.以及管理工具.
㈤ C語言 如何將變數 插入mySQL資料庫,mySQL C語言封裝變數的問題
假如用戶輸入的姓名和年齡值分別保存在變數name,age中:
char sql_insert[200];
sprintf(sql_insert, "INSERT INTO table values('%s','%d');", name, age);
mysql_query(&mysql_conn, sql_insert);
上述語句在執行完sprintf語句後,sql_insert中保存的是INSERT查詢語句字元串,sql_insert作為mysql_query()語句的參數即可實現正確的插入。
㈥ 鐢╒isual C++寮鍙戞暟鎹搴撳簲鐢ㄧ▼搴(2)
3銆 浣跨敤MFC璁塊棶ODBC鏁版嵁婧
3錛1 姒傝堪
VisualC++鐨凪FC綾誨簱瀹氫箟浜嗗嚑涓鏁版嵁搴撶被銆傚湪鍒╃敤ODBC緙栫▼鏃訛紝緇忓父瑕佷嬌鐢ㄥ埌CDatabase(鏁版嵁搴撶被)錛孋RecordSet(璁板綍闆嗙被)鍜孋RecordView(鍙瑙嗚板綍闆嗙被)銆 鍏朵腑錛
CDatabase綾誨硅薄鎻愪緵浜嗗規暟鎹婧愮殑榪炴帴錛岄氳繃瀹冧綘鍙浠ュ規暟鎹婧愯繘琛屾搷浣溿
CRecordView綾誨硅薄鑳戒互鎺у埗鐨勫艦寮 鏄劇ず鏁版嵁搴撹板綍銆傝繖涓瑙嗗浘鏄鐩存帴榪炲埌涓涓狢RecordSet瀵硅薄鐨勮〃瑙嗗浘銆
CRecordSet綾誨硅薄鎻愪緵浜嗕粠鏁版嵁婧 涓鎻愬彇鍑虹殑璁板綍闆嗐侰RecordSet瀵硅薄閫氬父鐢ㄤ簬涓ょ嶅艦寮忥細 鍔ㄦ佽岄泦錛坉ynasets錛夊拰蹇鐓ч泦錛坰napshots錛夈傚姩鎬佽岄泦鑳戒繚 鎸佷笌鍏朵粬鐢ㄦ埛鎵鍋氱殑鏇存敼淇濇寔鍚屾ャ傚揩鐓ч泦鍒欐槸鏁版嵁鐨勪竴涓闈欐佽嗗浘銆傛瘡涓縐嶅艦寮忓湪璁板綍闆嗚鎵撳紑鏃墮兘鎻愪緵涓緇勮板綍錛屾墍涓嶅悓鐨勬槸錛屽綋浣犲湪涓涓鍔ㄦ佽岄泦閲屾粴 鍔ㄥ埌涓鏉¤板綍鏃訛紝鐢卞叾浠栫敤鎴鋒垨鏄浣犲簲鐢ㄧ▼搴忎腑鐨勫叾浠栬板綍闆嗗硅ヨ板綍鎵鍋氱殑鏇存敼浼氱浉搴斿湴鏄劇ず鍑烘潵銆
Visual C++鎻愪緵浜嗗嚑縐嶈板綍闆嗭紝鍙浠ョ敤鏉ュ畾鍒跺簲鐢ㄧ▼搴忕殑宸ヤ綔鏂瑰紡銆傛煡鐪嬭繖浜涗笉鍚岄夐」鐨勬渶蹇鏂瑰紡瑕佸吋欏鵑熷害鍜岀壒寰併備綘浼氬彂鐜幫紝鍦ㄥ緢澶氭儏鍐典笅錛屽傛灉鎯蟲坊鍔犵壒寰侊紝灝卞繀欏諱粯鍑虹▼搴忔墽琛岄熷害闄嶄綆鐨勪唬浠楓備笅闈㈠憡璇変綘涓浜涘彲浠ヨ嚜鐢辨敮閰嶇殑璁板綍闆嗛夐」銆傛洿閲嶈佺殑鏄錛岃佸憡璇変綘浠庤繖涓閫夐」鍙浠ヨ幏寰楁洿蹇鐨勯熷害榪樻槸鏇村氱殑鐗瑰緛銆
1銆丼napshot錛堝揩鐓э級 榪欎釜閫夐」瑕乂isual C++鍦ㄤ竴嬈″揩鐓т腑涓嬭澆鏁翠釜鏌ヨ銆傛崲璦涔嬶紝鍙婃椂蹇閫熷湴緇欐暟鎹搴撳唴瀹規媿鐓э紝騫舵妸瀹冧綔涓烘湭鏉ュ伐浣滅殑鍩虹銆傝繖縐嶆柟娉曟湁涓変釜緙虹偣銆傜涓錛屼綘鐪嬩笉鍒板埆浜哄湪緗戠粶涓婂仛鐨勬洿鏂幫紝榪欏彲鑳芥剰鍛崇潃浣犵殑鍐沖畾鏄寤虹珛鍦ㄨ佷俊鎮鐨勫熀紜涓娿傜浜岋紝涓嬈″氨涓嬭澆鎵鏈夎繖浜涜板綍錛岃繖鎰忓懗鐫鍦ㄤ笅杞芥湡闂寸粰緗戠粶澧炲姞浜嗘矇閲嶇殑璐熸媴銆傜涓夛紝璁板綍涓嬭澆鏃剁敤鎴蜂細緇撴潫絳夊緟錛岃繖鎰忓懗鐫緗戠粶鐨勫懠鍙鎬ц兘鍙樺緱鏇翠綆銆傜劧鑰岃繖縐嶆柟娉曚篃鏈変袱涓浼樼偣銆傜涓錛岃板綍涓鏃﹁涓嬭澆錛岃ュ伐浣滅珯鎵闇鐨勭綉緇滄椿鍔ㄥ嚑涔庡氨娌℃湁浜嗘灒榪欎負鍏跺畠璇鋒眰閲婃斁浜嗗甫瀹姐傛諱箣錛屼綘浼氱湅鍒扮綉緇滅殑鍚炲悙閲忓炲ぇ浜嗐傜浜岋紝鍥犱負鎵鏈夎鐢寵風殑璁板綍閮藉湪鐢ㄦ埛鐨勬満鍣ㄤ笂錛屾墍浠ョ敤鎴峰疄闄呬笂浼氬緱鍒板簲鐢ㄧ▼搴忔洿浣崇殑鎬諱綋鎬ц兘銆備綘鍙鑳芥兂鎶婂揩鐓х殑鏂規硶闄愬埗鍦ㄨ緝灝忕殑鏁版嵁搴撲笂浣跨敤錛屽師鍥犲湪浜庡揩鐓ч傜敤浜庣敤鎴瘋鋒眰淇℃伅鑰屼笉閫傜敤浜庢暟鎹緙栬緫浼氳瘽銆
2銆丏ynaset錛堝姩鎬侀泦錛 浣跨敤榪欎釜閫夐」鏃訛紝Visual C++鍒涘緩鎸囧悜鎵璇鋒眰鐨勬瘡涓璁板綍鐨勫疄闄呮寚閽堛傚彟澶栵紝鍙鏈夊~鍏呭睆騫曟椂瀹為檯闇瑕佺殑璁板綍鏄浠庢湇鍔″櫒涓婁笅杞芥潵鐨勩傝繖縐嶆柟娉曠殑濂藉勫緢鏄庢樉銆傚嚑涔庨┈涓婂氨鑳藉湪灞忓箷涓婄湅鍒拌板綍銆傝屼笖榪樹細鐪嬪埌鍏跺畠鐢ㄦ埛瀵規暟鎹搴撴墍鍋氱殑鏇存敼銆傛渶鍚庯紝鍏跺畠鐢ㄦ埛涔熶細鐪嬪埌浣犲仛鐨勬洿鏀癸紝鍥犱負鍔ㄦ侀泦鍦ㄤ綘鏇存敼璁板綍鏃惰涓婅澆鍒版湇鍔″櫒涓娿傚緢鏄庢樉錛岃繖縐嶆柟娉曡佹眰瀵規湇鍔″櫒鐨勫疄鏃惰塊棶錛屽畠鍑忓皬浜嗙綉緇滄誨悶鍚愰噺騫墮檷浣庝簡搴旂敤紼嬪簭鐨勬ц兘銆傝繖涓閫夐」閫傚悎浜庡壋寤虹敤鎴瘋佽姳璐瑰緢澶氭椂闂存潵緙栬緫鏁版嵁鐨勫簲鐢ㄧ▼搴忋傚悓鏃訛紝瀹冧篃鏄澶у瀷鏁版嵁搴撶殑鏈浣抽夋嫨錛屽師鍥犲湪浜庡彧闇涓嬭澆鐢ㄦ埛瀹為檯闇瑕佺殑淇℃伅銆
3錛2 搴旂敤ODBC緙栫▼
鍙浠ュ簲鐢ˋppWizard鏉ュ緩絝嬩竴涓狾DBC鐨勫簲鐢ㄧ▼搴忔嗘灦錛屼篃鍙浠ョ洿鎺ヤ嬌鐢∣DBC鏉ヨ繘琛屾暟鎹搴撶紪紼嬶紝榪欐椂錛屽簲鍖呮嫭澶存枃浠禷fxdb.h銆
搴旂敤ODBC緙栫▼涓や釜鏈閲嶈佺殑綾繪槸CDatabase鍜孋RecordSet錛屼絾鍦ㄥ簲鐢ㄧ▼搴忎腑錛屼笉搴旂洿鎺ヤ嬌鐢–RecordSet綾伙紝鑰屽繀欏諱粠CRecordSet綾諱駭鐢熶竴涓瀵煎嚭綾伙紝騫舵坊鍔犵浉搴斾簬鏁版嵁搴撹〃涓瀛楁電殑鎴愬憳鍙橀噺銆傞殢鍚庯紝閲嶈澆CRecordset綾葷殑鎴愬憳鍑芥暟DoFieldExchange錛岃ュ嚱鏁伴氳繃浣跨敤RFX鍑芥暟瀹屾垚鏁版嵁搴撳瓧孌典笌璁板綍闆嗗煙鏁版嵁鎴愬憳鍙橀噺鐨勬暟鎹浜ゆ崲錛孯FX鍑芥暟鍚屽硅瘽妗嗘暟鎹浜ゆ崲錛圖DX錛夋満鍒剁浉綾諱技錛岃礋璐e畬鎴愭暟鎹搴撲笌鎴愬憳鍙橀噺闂寸殑鏁版嵁浜ゆ崲銆
涓嬮潰涓句緥璇存槑鍦╒isualC++鐜澧冧腑ODBC 鐨勭紪紼嬫妧宸э細
3錛21 鏁版嵁搴撹繛鎺
鍦–RecordSet綾諱腑瀹氫箟浜嗕竴涓鎴愬憳鍙 閲弇_pDatabase:
CDatabase *m_pDatabase;
瀹冩槸鎸囧悜瀵硅薄鏁版嵁搴撶被鐨勬寚閽堛傚傛灉鍦–RecordSet綾誨硅薄璋冪敤Open()鍑芥暟涔嬪墠錛屽皢涓涓宸茬粡鎵撳紑鐨凜Database綾誨硅薄鎸囬拡浼犵粰m_pDatabase錛屽氨鑳藉叡浜鐩稿悓 鐨凜Database綾誨硅薄銆傚傦細
CDatabase m_db;
CRecordSet m_set1,m_set2;
m_db.Open(_T("Super_ES")); // 寤 絝嫿DBC 榪 鎺
m_set1.m_pDatabase=m_db; //m_set1 澶 鐢╩_db 瀵 璞
m_set2.m_pDatabse=m_db; // m_set2 澶 鐢╩_db 瀵 璞
鎴栧備笅錛
Cdatabase db;
db.Open(鈥淒atabase鈥); //寤虹珛ODBC榪炴帴
CrecordSet m_set(db); //鏋勯犺板綍闆嗗硅薄,浣挎暟鎹搴撴寚鍚慸b
3錛22 鏌ヨ㈣板綍
鏌ヨ㈣板綍浣跨敤CRecordSet::Open()鍜 CRecordSet::Requery()鎴愬憳鍑芥暟銆傚湪浣跨敤CRecordSet綾誨硅薄涔嬪墠錛屽繀欏諱嬌鐢 CRecordSet::Open()鍑芥暟鏉ヨ幏寰楁湁鏁堢殑璁板綍闆嗐備竴鏃﹀凡緇忎嬌鐢ㄨ繃CRecordSet::Open() 鍑芥暟錛屽啀嬈℃煡璇㈡椂灝卞彲浠ュ簲鐢–RecordSet::Requery()鍑芥暟銆傚湪璋 鐢–RecordSet::Open()鍑芥暟鏃訛紝濡傛灉宸茬粡灝嗕竴涓宸茬粡鎵撳紑鐨凜Database 瀵硅薄鎸囬拡浼犵粰CRecordSet綾誨硅薄鐨刴_pDatabase鎴愬憳鍙橀噺錛屽垯浣 鐢ㄨユ暟鎹搴撳硅薄寤虹珛ODBC榪炴帴錛涘惁鍒欏傛灉m_pDatabase涓虹┖鎸 閽堬紝灝辨柊寤轟竴涓狢Database綾誨硅薄騫朵嬌鍏朵笌緙虹渷鐨勬暟鎹婧 鐩歌繛錛岀劧鍚庤繘琛孋RecordSet綾誨硅薄鐨勫垵濮嬪寲銆傜己鐪佹暟鎹婧 鐢盙etDefaultConnect()鍑芥暟鑾峰緱銆備綘涔熷彲浠ユ彁渚涗綘鎵闇瑕佺殑SQL 璇鍙ワ紝騫朵互瀹冩潵璋冪敤CRecordSet::Open()鍑芥暟錛屼緥濡傦細
m_Set.Open(AFX_DATABASE_USE_DEFAULT,strSQL);
濡傛灉娌℃湁鎸囧畾鍙傛暟錛岀▼搴忓垯浣 鐢ㄧ己鐪佺殑SQL璇鍙ワ紝鍗沖瑰湪GetDefaultSQL()鍑芥暟涓鎸囧畾鐨凷QL璇 鍙ヨ繘琛屾搷浣滐細
CString CTestRecordSet::GetDefaultSQL()
{return _T("[BasicData],[MainSize]");}
瀵逛簬GetDefaultSQL()鍑芥暟榪斿洖鐨勮〃鍚嶏紝 瀵瑰簲鐨勭己鐪佹搷浣滄槸SELECT璇鍙ワ紝鍗籌細
SELECT * FROM BasicData,MainSize
鏌ヨ㈣繃紼嬩腑涔熷彲浠ュ埄鐢–RecordSet鐨 鎴愬憳鍙橀噺m_strFilter鍜宮_strSort鏉ユ墽琛屾潯浠舵煡璇㈠拰緇撴灉鎺掑簭銆俶_strFilter 涓鴻繃婊ゅ瓧絎︿覆錛屽瓨鏀劇潃SQL璇鍙ヤ腑WHERE鍚庣殑鏉′歡涓詫紱m_strSort 涓烘帓搴忓瓧絎︿覆錛屽瓨鏀劇潃SQL璇鍙ヤ腑ORDERBY鍚庣殑瀛楃︿覆銆 濡傦細
m_Set.m_strFilter="TYPE='鐢靛姩鏈'";
m_Set.m_strSort="VOLTAGE";
m_Set.Requery();
瀵瑰簲鐨凷QL璇鍙ヤ負錛
SELECT * FROM BasicData,MainSize
WHERE TYPE='鐢靛姩鏈'
ORDER BY VOLTAGE
闄や簡鐩存帴璧嬪肩粰m_strFilter浠ュ栵紝榪 鍙浠ヤ嬌鐢ㄥ弬鏁板寲銆傚埄鐢ㄥ弬鏁板寲鍙浠ユ洿鐩磋傦紝鏇存柟渚垮湴 瀹屾垚鏉′歡鏌ヨ浠誨姟銆備嬌鐢ㄥ弬鏁板寲鐨勬ラゅ備笅錛
(1)錛庡0鏄庡弬鍙橀噺錛
Cstring p1;
Float p2;
(2)錛庡湪鏋勯犲嚱鏁頒腑鍒濆嬪寲鍙傚彉閲
p1=_T("");
p2=0.0f;
m_nParams=2;
(3)錛庡皢鍙傚彉閲忎笌瀵瑰簲鍒楃粦瀹
pFX-SetFieldType(CFieldExchange::param)
RFX_Text(pFX,_T("P1"),p1);
RFX_Single(pFX,_T("P2"),p2);
瀹屾垚浠ヤ笂姝ラや箣鍚庡氨鍙浠ュ埄鐢ㄥ弬鍙橀噺榪涜屾潯浠舵煡璇浜嗭細
m_pSet-m_strFilter="TYPE=?ANDVOLTAGE=?";
m_pSet-p1="鐢靛姩鏈";
m_pSet-p2=60.0;
m_pSet-Requery();
鍙傚彉閲忕殑鍊兼寜緇戝畾鐨勯『搴忔浛鎹 鏌ヨ㈠瓧涓蹭腑鐨勨?鈥濋傞厤絎︺
濡傛灉鏌ヨ㈢殑緇撴灉鏄澶氭潯璁板綍鐨 璇濓紝鍙浠ョ敤CRecordSet綾葷殑鍑芥暟Move()錛孧oveNext()錛孧ovePrev()錛孧oveFirst() 鍜孧oveLast()鏉ョЩ鍔ㄥ厜鏍囥
3錛23 澧炲姞璁板綍
澧炲姞璁板綍浣跨敤AddNew()鍑芥暟錛岃佹眰鏁版嵁搴撳繀欏繪槸浠ュ厑璁稿炲姞鐨勬柟寮忔墦寮錛
m_pSet-AddNew(); //鍦ㄨ〃鐨勬湯灝懼炲姞鏂拌板綍
m_pSet-SetFieldNull((m_pSet-m_type),FALSE);
m_pSet-m_type="鐢靛姩鏈";
... //杈撳叆鏂扮殑瀛楁靛
m_pSet- Update(); //灝嗘柊璁板綍瀛樺叆鏁版嵁搴
m_pSet-Requery(); //閲嶅緩璁板綍闆
3錛24 鍒犻櫎璁板綍
鐩存帴浣跨敤Delete()鍑芥暟錛屽苟涓斿湪璋冪敤Delete() 鍑芥暟涔嬪悗涓嶉渶璋冪敤Update()鍑芥暟錛
m_pSet-Delete();
if(!m_pSet-IsEOF())
m_pSet-MoveNext();
else
m_pSet-MoveLast();
3錛25 淇鏀硅板綍
淇鏀硅板綍浣跨敤Edit()鍑芥暟錛
m_pSet-Edit(); //淇鏀瑰綋鍓嶈板綍
m_pSet-m_type="鍙戠數鏈"; //淇鏀瑰綋鍓嶈板綍瀛楁靛
...
m_pSet-Update(); //灝嗕慨鏀圭粨鏋滃瓨鍏ユ暟鎹搴
m_pSet-Requery();
3錛26 緇熻¤板綍
緇熻¤板綍鐢ㄦ潵緇熻¤板綍闆嗙殑鎬繪暟銆傚彲浠ュ厛澹版槑涓涓狢Recordset瀵硅薄m_pSet銆傚啀緇戝畾涓涓鍙橀噺m_lCount錛岀敤鏉ョ粺璁¤板綍鎬繪暟銆傛墽琛屽備笅璇鍙ワ細
m_pSet-Open(鈥淪elect Count(*) from 琛ㄥ悕 where 闄愬畾鏉′歡鈥);
RecordCount=m_pSet-m_lCount;
m_pSet-Close();
RecordCount鍗充負瑕佺粺璁$殑璁板綍鏁般
鎴栧備笅錛
CRecordset m_Set(db); //db 涓篊Database瀵硅薄
CString strValue;
m_Set.Open(Select count(*) from 琛ㄥ悕 where 闄愬畾鏉′歡鈥);
m_pSet.GetFieldValue((int)0,strValue);
long count=atol(strValue);
m_set.Close();
count涓鴻板綍鎬繪暟銆
3錛27 鎵ц孲QL璇鍙
鉶界劧閫氳繃CRecordSet綾伙紝鎴戜滑鍙浠ュ畬鎴 澶у氭暟鐨勬煡璇㈡搷浣滐紝鑰屼笖鍦–RecordSet::Open()鍑芥暟涓涔熷彲浠 鎻愪緵SQL璇鍙ワ紝浣嗘槸鏈夌殑鏃跺欐垜浠榪樻兂榪涜屼竴浜涘叾浠栨搷 浣滐紝渚嬪傚緩絝嬫柊琛錛屽垹闄よ〃錛屽緩絝嬫柊鐨勫瓧孌電瓑絳夛紝榪 鏃跺氨闇瑕佷嬌鐢ㄥ埌CDatabase綾葷殑鐩存帴鎵ц孲QL璇鍙ョ殑鏈哄埗銆傞 榪囪皟鐢–Database::ExecuteSQL()鍑芥暟鏉ュ畬鎴怱QL璇鍙ョ殑鐩存帴鎵ц岋細
濡備笅浠g爜鎵紺
BOOL CDB::ExecuteSQLAndReportFailure(const CString strSQL)
{
TRY
{
m_pdb-ExecuteSQL(strSQL); //鐩存帴鎵ц孲QL璇鍙
}
CATCH (CDBException,e)
{
CString strMsg;
strMsg.LoadString(IDS_EXECUTE_SQL_FAILED);
strMsg+=strSQL;
return FALSE;
}
END_CATCH
return TRUE;
}
搴斿綋鎸囧嚭鐨勬槸錛岀敱浜庝笉鍚孌BMS鎻 渚涚殑鏁版嵁鎿嶄綔璇鍙ヤ笉灝界浉鍚岋紝鐩存帴鎵ц孲QL璇鍙ュ彲鑳戒細鐮村潖杞浠剁殑DBMS鏃犲叧鎬э紝鍥犳ゅ湪搴旂敤涓搴斿綋鎱庣敤姝ょ被鎿嶄綔銆
3錛28 娉ㄦ剰
浠嶤RecordSet瀵煎嚭鐨勭被涓濡傛灉鍖呭惈DataTime綾誨瀷鐨勬暟鎹錛屽湪VC涓鏄鐢–Time綾誨瀷鏉ユ浛浠g殑錛岃繖鏃訛紝鏋勯犲嚱鏁版病鏈夎祴浜庣己鐪佸箋傝繖鏃訛紝鎴戜滑搴斿綋鎵嬪伐璧嬪箋傚備笅鎵紺:
CTime m_time;
m_time=NULL;#p#鍓鏍囬#e#
3錛3 鎬葷粨
VisualC++涓鐨凮DBC綾誨簱鍙浠ュ府鍔╃▼搴忓憳瀹屾垚緇濆ぇ澶氭暟鐨勬暟鎹搴撴搷浣溿傚埄鐢∣DBC鎶鏈浣垮緱紼嬪簭鍛樹粠鍏蜂綋鐨凞BMS涓瑙h劚鍑烘潵錛屼粠鑰屾瀬澶х殑鍑忓皯浜嗚蔣浠跺紑鍙戠殑宸ヤ綔閲忥紝緙╃煭寮鍙戝懆鏈燂紝鎻愰珮浜嗘晥鐜囧拰杞浠剁殑鍙闈犳с
4銆佷嬌鐢―AO
4錛1 姒傝堪
Visual C++鎻愪緵浜嗗笵AO鐨勫皝瑁咃紝MFC DAO綾誨皝瑁呬簡DAO錛堟暟鎹搴撹塊棶瀵硅薄錛夌殑澶ч儴鍒嗗姛鑳斤紝浠庨潰Visual C++紼嬪簭灝卞彲浠ヤ嬌鐢╒isual C++鎻愪緵鐨凪FC DAO綾繪柟渚跨殑璁塊棶Microsoft Jet 鏁版嵁搴擄紝緙栧埗綆媧併佹湁Visaul C++鐗硅壊鐨勬暟鎹搴撳簲鐢ㄧ▼搴忋
鏁版嵁搴撹塊棶瀵硅薄錛圖AO錛夋彁渚涗簡涓縐嶉氳繃紼嬪簭浠g爜鍒涘緩鍜屾搷綰墊暟鎹搴撶殑鏈哄埗銆傚氫釜DAO瀵硅薄鏋勬垚涓涓浣撶郴緇撴瀯錛屽湪榪欎釜緇撴瀯閲岋紝鍚勪釜DAO瀵硅薄鍗忓悓宸ヤ綔銆侱AO鏀鎸佷互涓嬪洓涓鏁版嵁搴撻夐」錛
鎵撳紑璁塊棶鏁版嵁搴擄紙MDB鏂囦歡錛夆斺擬DB鏂囦歡鏄涓涓鑷鍖呭惈鐨勬暟鎹搴擄紝瀹冨寘鎷鏌ヨ㈠畾涔夈佸畨鍏ㄤ俊鎮銆佺儲寮曘佸叧緋伙紝褰撶劧榪樻湁瀹為檯鐨勬暟鎹琛ㄣ傜敤鎴峰彧欏繪寚瀹歁DB鏂囦歡鐨勮礬寰勫悕銆
鐩存帴鎵撳紑ODBC鏁版嵁婧愨斺旇繖閲屾湁涓涓寰堥噸瑕佺殑闄愬埗銆備笉鑳芥壘寮浠Jet寮曟搸浣滀負椹卞姩紼嬪簭鐨凮DBC鏁版嵁婧愶紱鍙鍙浠ヤ嬌鐢ㄥ叿鏈夎嚜宸辯殑ODBC椹卞姩紼嬪簭DLL鐨勬暟鎹婧愩
鐢↗et寮曟搸鎵懼紑ISAM鍨嬶紙緔㈠紩欏哄簭璁塊棶鏂規硶錛夋暟鎹婧愶紙鍖呮嫭dBase,FoxPro,Paradox,Btrieve,Excel鎴栨枃鏈鏂囦歡錛夆斺斿嵆浣垮凡緇忚劇疆浜哋DBC鏁版嵁婧愶紝瑕佺敤Jet寮曟搸鏉ヨ塊棶榪欎簺鏂囦歡綾誨瀷涓鐨勪竴縐嶏紝涔熷繀欏諱互ISAM鍨嬫暟鎹婧愮殑鏂瑰紡鏉ユ壘寮鏂囦歡錛岃屼笉鏄浠ODBC鏁版嵁婧愮殑鏂瑰紡銆
緇橝CCESS鏁版嵁搴撻檮鍔犲栭儴琛ㄢ斺旇繖瀹為檯涓婃槸鐢―AO璁塊棶ODBC鏁版嵁婧愮殑棣栭夋柟娉曘傞栧厛浣跨敤ACCESS鎶奜DBC琛ㄦ坊鍔犲埌涓涓狹DB鏂囦歡涓婏紝鐒跺悗渚濈収絎涓閫夐」涓浠嬬粛鐨勬柟娉曠敤DAO鎵懼紑榪欎釜MDB鏂囦歡灝卞彲浠ヤ簡銆傜敤鎴蜂篃鍙浠ョ敤ACCESS鎶奍ASM鏂囦歡闄勫姞鍒頒竴涓狹DB鏂囦歡涓娿
4錛2 搴旂敤DAO緙栫▼
4錛21 鎵撳紑鏁版嵁搴
CDaoWorkspace瀵硅薄浠h〃涓涓狣AO Workspace瀵硅薄錛屽湪MFC DAO浣撶郴緇撴瀯涓澶勪簬鏈楂樺勶紝瀹氫箟浜嗕竴涓鐢ㄦ埛鐨勫悓鏁版嵁搴撶殑浼氳瘽錛屽苟鍖呭惈鎵撳紑鐨勬暟鎹搴擄紝璐熻矗瀹屾垚鏁版嵁搴撶殑浜嬪姟澶勭悊銆傛垜浠鍙浠ヤ嬌鐢ㄩ殣鍚鐨剋orkspace瀵硅薄銆
CDaoDatabase瀵硅薄浠h〃浜嗕竴涓鍒版暟鎹搴撶殑榪炴帴錛屽湪MFC涓錛屾槸閫氳繃CDaoDatabase灝佽呯殑銆
鍦ㄦ瀯閫燙DaoDatabase瀵硅薄鏃訛紝鏈夊備笅涓ょ嶆柟娉:
鍒涘緩涓涓狢DaoDatabase瀵硅薄錛屽苟鍚戝叾浼犻掍竴涓鎸囧悜涓涓宸茬粡鎵懼紑鐨凜Workspace瀵硅薄鐨勬寚閽堛
鍒涘緩涓涓狢DaoDatabase瀵硅薄錛岃屼笉鏄庣『鍦版寚瀹氫嬌鐢ㄧ殑workspace,姝ゆ椂錛孧FC灝嗗壋寤轟竴涓鏂扮殑涓存椂鐨凜DaoWorkspace瀵硅薄銆
濡備笅浠g爜鎵紺猴細
CDaoDatabase db;
db.Open(鈥渢est.mdb鈥,FALSE,FALSE,_T(鈥溾);
鍏朵腑鍙傛暟涓鍖呮嫭瑕佹墦寮鐨勬枃浠剁殑鍏ㄨ礬寰勫悕銆
4錛22 鏌ヨ㈣板綍
涓涓狣AO recordset瀵硅薄錛屼唬琛ㄤ竴涓鏁版嵁璁板綍鐨勯泦鍚堬紝璇ラ泦鍚堟槸涓涓搴撹〃鎴栬呮槸涓涓鏌ヨ㈢殑榪愯岀粨鏋滀腑鐨勫叏閮ㄨ板綍銆侰DaoRecorset瀵硅薄鏈変笁縐嶇被鍨嬶細琛ㄣ佸姩鎬侀泦銆佸揩鐓с
閫氬父鎯呭喌涓嬶紝鎴戜滑鍦ㄥ簲鐢ㄧ▼搴忎腑鍙浠ヤ嬌鐢–DaoRecordset鐨勫煎嚭綾伙紝榪欎竴鑸鏄閫氳繃ClassWizard鎴朅ppWizard鏉ョ敓鎴愮殑銆備絾鎴戜滑涔熷彲浠ョ洿鎺ヤ嬌鐢–DaoRecordset綾葷敓鎴愮殑瀵硅薄銆傛ゆ椂錛屾垜浠鍙浠ュ姩鎬佸湴緇戝畾recordset瀵硅薄鐨勬暟鎹鎴愬憳銆
濡備笅浠g爜鎵紺猴細
COleVariant var;
long id;
CString str;
CDaoRecordset m_Set(db);
m_Set.Open(鈥滄煡璇㈢殑SQL璇鍙モ);
while(!m_Set.IsEOF())
{
/*
澶勭悊
m_Set.GetFieldValue(鈥淚D鈥,var);
id=V_I4(var);
m_Set.GetFieldValue(鈥淣ame鈥,var);
str=var.pbVal;
*/
m_Set.MoveNext();
}
m_Set.Close();
4錛23 娣誨姞璁板綍
娣誨姞璁板綍鐢ˋddNew鍑芥暟錛屾ゆ椂鐢⊿etFieldValue鏉ヨ繘琛岃祴鍊箋
濡備笅浠g爜鎵紺:
m_pDaoRecordset-AddNew ();
sprintf(strValue,"%s",m_UserName );
m_pDaoRecordset-SetFieldValue ("UserName",strValue);
sprintf(strValue,"%d",m_PointId );
m_pDaoRecordset-SetFieldValue ("PointId",strValue);
dataSrc.SetDateTime (m_UpdateTime .GetYear ),m_UpdateTime .GetMonth ),m_UpdateTime .GetDay (),
m_UpdateTime .GetHour (),m_UpdateTime .GetMinute (),m_UpdateTime .GetSecond ());
valValue=dataSrc;
m_pDaoRecordset-SetFieldValue ("UpdateTime",valValue);
sprintf(strValue,"%f",m_pRecordset-m_OldValue );
m_pDaoRecordset-SetFieldValue ("OldValue",strValue);
sprintf(strValue,"%f",m_pRecordset-m_NewValue );
m_pDaoRecordset-SetFieldValue ("NewValue",strValue);
m_pDaoRecordset-Update ();
姝ゆ椂錛岃佹敞鎰忥紝鏃ユ湡鏃墮棿鍨嬫暟鎹瑕佺敤SetDataTime鍑芥暟鏉ヨ祴鍊,榪欓噷闈㈣佺敤鍒癈OleVariant綾誨瀷鏁版嵁錛屽叿浣撶敤娉曞彲浠ュ弬鑰冩湁鍏沖府鍔┿
4錛24 淇鏀硅板綍
淇鏀硅板綍鐢‥dit()鍑芥暟錛屾妸璁板綍瀹氫綅鍒拌佷慨鏀圭殑浣嶇疆錛岃皟鐢‥dit鍑芥暟錛屼慨鏀瑰畬鎴愬悗錛岃皟鐢║pdate鍑芥暟銆
濡備笅浠g爜鎵紺猴細
m_Set.Edit();
m_Set.SetFieldValue(鈥滃垪鍚嶁,鈥濆瓧絎︿覆鈥);
m_Set.Update();
4錛25 鍒犻櫎璁板綍
鍒犻櫎璁板綍鐢―elete()鍑芥暟錛屼嬌鐢ㄥ悗涓嶉渶璋冪敤Update()鍑芥暟銆
4錛26 緇熻¤板綍
鍙浠ヤ嬌鐢ㄥ備笅浠g爜鏉ョ粺璁¤板綍鏁幫細
COleVariant varValue;
CDaoRecordset m_Set(db);
m_Set.Open(dbOpenDynaset,鈥漇QL璇鍙モ);
varValue=m_Set.GetFieldValue(0);
m_lMaxCount=V_I4(varValue);
m_Set.Close();
濡傛灉鏄緇熻′竴寮犺〃涓鎬昏板綍錛屽彲浠ヤ嬌鐢–DaoTableDef瀵硅薄錛屽備笅浠g爜鎵紺猴細
CDaoTableDef m_Set(gUseDB);
Count=m_Set.GetRecordCount();
m_Set.Close();
涓嶈兘鐢–DaoRecordset瀵硅薄鐨凣etRecordCount()鏉ュ彇寰楄板綍鏁般
4錛3 鎬葷粨
浣跨敤DAO鎶鏈鍙浠ヤ究鎴戜滑鏂逛究鐨勮塊棶Microsoft Jet寮曟搸鏁版嵁搴擄紝鐢變簬Microsoft Jet涓嶆敮鎸佸氱嚎紼嬶紝鍥犳わ紝蹇呴』闄愬埗璋冪敤鍒板簲鐢ㄧ▼搴忎富綰跨▼鐨勬墍鏈塂AO銆
5 浣跨敤OLE DB
5錛1 姒傝堪
OLE DB鐨勫瓨鍦ㄤ負鐢ㄦ埛鎻愪緵浜嗕竴縐嶇粺涓鐨勬柟娉曟潵璁塊棶鎵鏈変笉鍚岀嶇被鐨勬暟鎹婧愩侽LE DB鍙浠ュ湪涓嶅悓鐨勬暟鎹婧愪腑榪涜岃漿鎹銆傚埄鐢∣LE DB錛屽㈡埛絝鐨勫紑鍙戜漢鍛樺湪榪涜屾暟鎹璁塊棶鏃跺彧闇鎶婄簿鍔涢泦涓鍦ㄥ緢灝戠殑涓浜涚粏鑺備笂錛岃屼笉蹇呭紕鎳傚ぇ閲忎笉鍚屾暟鎹搴撶殑璁塊棶鍗忚銆
OLE DB鏄涓濂楅氳繃COM鎺ュ彛璁塊棶鏁版嵁鐨凙ctiveX鎺ュ彛銆傝繖涓狾LE DB鎺ュ彛鐩稿綋閫氱敤錛岃凍浠ユ彁渚涗竴縐嶈塊棶鏁版嵁鐨勭粺涓鎵嬫碉紝鑰屼笉綆″瓨鍌ㄦ暟鎹鎵浣跨敤鐨勬柟娉曞備綍銆傚悓鏃訛紝OLE DB榪樺厑璁稿紑鍙戜漢鍛樼戶緇鍒╃敤鍩虹鏁版嵁搴撴妧鏈鐨勪紭鐐癸紝鑰屼笉蹇呬負浜嗗埄鐢ㄨ繖浜涗紭鐐硅屾妸鏁版嵁縐誨嚭鏉ャ
5錛2 浣跨敤ATL浣跨敤OLE DB鏁版嵁浣跨敤紼嬪簭
鐢變簬鐩存帴浣跨敤OLE DB鐨勫硅薄鍜屾帴鍙h捐℃暟鎹搴撳簲鐢ㄧ▼搴忛渶瑕佷功鍐欏ぇ閲忕殑浠g爜銆備負浜嗙畝鍖栫▼搴忚捐★紝Visual C++鎻愪緵浜咥TL妯℃澘鐢ㄤ簬璁捐OLE DB鏁版嵁搴旂敤紼嬪簭鍜屾暟鎹鎻愪緵紼嬪簭銆
鍒╃敤ATL妯℃澘鍙浠ュ緢瀹規槗鍦板皢OLE DB涓嶮FC緇撳悎璧鋒潵錛屼嬌鏁版嵁搴撶殑鍙傛暟鏌ヨ㈢瓑澶嶆潅鐨勭紪紼嬪緱鍒扮畝鍖栥侻FC鎻愪緵鐨勬暟鎹搴撶被浣縊LE DB鐨勭紪紼嬫洿鍏鋒湁闈㈠悜瀵硅薄鐨勭壒鎬с俈iual C++鎵鎻愪緵鐢ㄤ簬OLE DB鐨凙TL妯℃澘鍙鍒嗕負鏁版嵁鎻愪緵紼嬪簭鐨勬ā鏉垮拰鏁版嵁浣跨敤紼嬪簭鐨勬ā鏉褲
浣跨敤ATL妯℃澘鍒涘緩鏁版嵁搴旂敤紼嬪簭涓鑸鏈変互涓嬪嚑姝ラわ細
鍒涘緩搴旂敤妗嗘灦
鍔犲叆ATL浜х敓鐨勬ā鏉跨被
鍦ㄥ簲鐢ㄤ腑浣跨敤浜х敓鐨勬暟鎹璁塊棶瀵硅薄
涓嶇敤ATL浣跨敤OLE DB鏁版嵁浣跨敤紼嬪簭
鍒╃敤ATL妯℃澘浜х敓鏁版嵁浣跨敤紼嬪簭杈冧負綆鍗曪紝浣嗛傜敤鎬т笉騫匡紝涓嶈兘鍔ㄦ侀傚簲鏁版嵁搴撶殑鍙樺寲銆備笅闈㈡垜浠浠嬬粛鐩存帴浣跨敤MFC OLE DB綾繪潵鐢熸垚鏁版嵁浣跨敤紼嬪簭銆
妯℃澘鐨勪嬌鐢
OLE DB鏁版嵁浣跨敤鑰呮ā鏉挎槸鐢變竴浜涙ā鏉跨粍鎴愮殑錛屽寘鎷濡備笅涓浜涙ā鏉匡紝涓嬮潰瀵逛竴浜涘父鐢ㄧ被浣滀竴浜涗粙緇嶃
浼氳瘽綾
CDataSource綾
CDataSource綾諱笌OLE DB鐨勬暟鎹婧愬硅薄鐩稿瑰簲銆傝繖涓綾諱唬琛ㄤ簡OLE DB鏁版嵁鎻愪緵紼嬪簭鍜屾暟鎹婧愪箣闂寸殑榪炴帴銆傚彧鏈夊綋鏁版嵁婧愮殑榪炴帴琚寤虹珛涔嬪悗錛屾墠鑳戒駭鐢熶細璇濆硅薄錛屽彲浠ヨ皟鐢∣pen鏉ユ墦寮鏁版嵁婧愮殑榪炴帴銆
CSession綾
CSession鎵鍒涘緩鐨勫硅薄浠h〃浜嗕竴涓鍗曠嫭鐨勬暟鎹搴撹塊棶鐨勪細璇濄備竴涓鐢–DataSource綾諱駭鐢熺殑鏁版嵁婧愬硅薄鍙浠ュ壋寤轟竴涓鎴栬呭氫釜浼氳瘽錛岃佸湪鏁版嵁婧愬硅薄涓婁駭鐢熶竴涓浼氳瘽瀵硅薄錛岄渶瑕佽皟鐢ㄥ嚱鏁癘pen()鏉ユ墦寮銆傚悓鏃訛紝浼氳瘽瀵硅薄榪樺彲鐢ㄤ簬鍒涘緩浜嬪姟鎿嶄綔銆
CEnumeratorAccessor綾
CEnumeratorAccessor綾繪槸鐢ㄦ潵璁塊棶鏋氫婦鍣ㄦ煡璇㈠悗鎵浜х敓鐨勮岄泦涓鍙鐢ㄦ暟鎹鎻愪緵紼嬪簭鐨勪俊鎮鐨勮塊棶鍣錛屽彲鎻愪緵褰撳墠鍙鐢ㄧ殑鏁版嵁鎻愪緵紼嬪簭鍜屽彲瑙佺殑璁塊棶鍣ㄣ
璁塊棶鍣ㄧ被
CAcessor綾
CAccessor綾諱唬琛ㄤ笌璁塊棶鍣ㄧ殑綾誨瀷銆傚綋鐢ㄦ埛鐭ラ亾鏁版嵁搴撶殑綾誨瀷鍜岀粨鏋勬椂錛屽彲浠ヤ嬌鐢ㄦょ被銆傚畠鏀鎸佸逛竴涓琛岄泦閲囩敤澶氫釜璁塊棶鍣錛屽苟涓旓紝瀛樻斁鏁版嵁鐨勭紦鍐插尯鏄鐢辯敤鎴峰垎閰嶇殑銆
CDynamicAccessor綾
CDy