❶ 怎麼在VC++中用ADO創建資料庫
VC++中使用ADO方式操作ACCESS資料庫是Microsoft資料庫應用程序開發的新介面,是建立在OLEDB之上的高層資料庫訪問技術,即使你對OLEDB,COM不了解也能輕松對付ADO,因為它非常簡單易用,甚至比你以往所接觸的ODBCAPI、DAO、RDO都要容易使用,並不失靈活性。本文詳細地介紹在VisualC++開發環境下如何使用ADO來進行資料庫應用程序開發,並給出示例代碼。為了使讀者朋友都能測試本例提供的代碼,我們採用Access資料庫,您可以直接在我們提供的示例代碼中找到這個test。mdb。程序編譯運行後的效果一所示:
一、實現方法
萬事開頭難,任何一種新技術對於初學者來說最重要的還是"入門",掌握其要點。讓我們來看看ADO資料庫開發的基本流程吧!它的基本步驟如下:
(1)初始化COM庫,引入ADO庫定義文件
(2)用Connection對象連接資料庫
(3)利用建立好的連接,通過Connection、Command對象執行SQL命令,或利用Recordset對象取得結果記錄集進行查詢、處理。
(4)使用完畢後關閉連接釋放對象。
下面我們將詳細介紹上述步驟並給出相關代碼。
1、COM庫的初始化
我們可以使用AfxOleInit()來初始化COM庫,這項工作通常在CWinApp::InitInstance()的重載函數中完成,請看如下代碼:
BOOLCADOTest1App::InitInstance()
{
AfxOleInit();
。。。。。。
}
2、用#import指令引入ADO類型庫
為了引入ADO類型庫,需要在項目的stdafx。h文件中加入如下語句:
#import"c:\programfiles\commonfiles\system\ado\msado15。dll"
no_namespacerename("EOF","adoEOF")
這一語句有何作用呢?其最終作用同我們已經十分熟悉的#include類似,編譯的時候系統會為我們生成msado15。tlh,ado15。tli兩個C++頭文件來定義ADO庫。
需要讀者朋友注意的是:您的開發環境中msado15。dll不一定在這個目錄下,請按實際情況修改;在編譯的時候可能會出現如下警告,對此微軟在MSDN中作了說明,並建議我們不要理會這個警告:msado15。tlh(405):warningC4146:,resultstillunsigned。
3、創建Connection對象並連接資料庫
為了首先我們需要添加一個指向Connection對象的指針_ConnectionPtrm_pConnection,下面的代碼演示了如何創建Connection對象實例及如何連接資料庫並進行異常捕捉:
BOOLCADOTest1Dlg::OnInitDialog()
{
CDialog::OnInitDialog();
HRESULThr;
try
{
hr=m_pConnection。CreateInstance("ADODB。Connection");///創建Connection對象
if(SUCCEEDED(hr))
{
hr=m_pConnection->Open("Provider=Microsoft。Jet。OLEDB。4。0;
DataSource=test。mdb","","",adModeUnknown);///連接資料庫
//上面一句中連接字串中的Provider是針對ACCESS2000環境的,對於ACCESS97,
//需要改為:Provider=Microsoft。Jet。OLEDB。3。51;
}
}
catch(_com_errore)///捕捉異常
{
CStringerrormessage;
errormessage。Format("連接資料庫失敗!\r\n錯誤信息:%s",e。ErrorMessage());
AfxMessageBox(errormessage);///顯示錯誤信息
}
在這段代碼中我們是通過Connection對象的Open方法來進行連接資料庫的,下面是該方法的原型:
HRESULTConnection15::Open(_bstr_tConnectionString,_bstr_tUserID,_bstr_tPassword,longOptions);
上述函數中參數ConnectionString為連接字串;參數UserID是用戶名;參數Password是登陸密碼;參數Options是連接選項,用於指定Connection對象對數據的更新許可權,一般情況下Options可以是如下幾個常量:
adModeUnknown:預設。當前的許可權未設置
❷ C中使用MySQL資料庫的基本操作cpp使用mysql
C中使用MySQL資料庫的基本操作
MySQL是一種常用的關系型資料庫管理系統,在許多應用程序中被廣泛使用。在C語言中,我們可以使用MySQL的C API來與資料庫進行交互。本文將介紹MySQL資料庫的基本操作,包括連接資料庫、執行查詢和更新操作。
一、連接MySQL資料庫
在C程序中連接MySQL資料庫的步驟如下:
1. 引入頭文件和鏈接庫:
#include
#pragma comment(lib, “libmysql.lib”)
2. 獲取連接句柄:
MYSQL *conn;
conn = mysql_init(NULL);
3. 建立連接:
const char *host = “localhost”;
const char *user = “root”;
const char *password = “password”;
const char *database = “mydb”;
unsigned int port = 3306;
if (!mysql_real_connect(conn, host, user, password, database, port, NULL, 0)) {
fprintf(stderr, “%s\n”, mysql_error(conn));
return 1;
}
如果連接失敗,則會輸出錯誤信息並退出程序。
二、執行查詢操作
查詢MySQL資料庫中的記錄,需要執行以下步驟:
1. 構造查詢語句:
const char *query = “SELECT * FROM mytable”;
2. 執行查詢操作:
int ret;
ret = mysql_query(conn, query);
if (ret != 0) {
fprintf(stderr, “Error %u: %s\n”, mysql_errno(conn), mysql_error(conn));
return 1;
}
3. 獲取查詢結果:
MYSQL_RES *result;
result = mysql_store_result(conn);
if (result == NULL) {
fprintf(stderr, “Error %u: %s\n”, mysql_errno(conn), mysql_error(conn));
return 1;
}
4. 遍歷查詢結果:
MYSQL_ROW row;
unsigned int num_fields;
num_fields = mysql_num_fields(result);
while ((row = mysql_fetch_row(result)) != NULL) {
for (unsigned int i = 0; i
printf(“%s “, row[i] ? row[i] : “NULL”);
}
printf(“\n”);
}
遍歷查詢結果時,可以通過mysql_fetch_row函數獲取一行數據,再通過遍歷數組輸出每一列的數據。
三、執行更新操作
更新MySQL資料庫中的記錄,需要執行以下步驟:
1. 構造更新語句:
const char *update = “UPDATE mytable SET name=’new name’ WHERE id=1”;
2. 執行更新操作:
int ret;
ret = mysql_query(conn, update);
if (ret != 0) {
fprintf(stderr, “Error %u: %s\n”, mysql_errno(conn), mysql_error(conn));
return 1;
}
3. 獲取更新結果:
unsigned long num_rows;
num_rows = mysql_affected_rows(conn);
printf(“%lu rows affected\n”, num_rows);
通過mysql_affected_rows函數獲取更新的記錄數,並輸出結果。
四、斷開連接
在程序結束時,需要斷開與MySQL資料庫的連接。可以執行以下步驟:
mysql_close(conn);
以上就是C語言中使用MySQL資料庫的基本操作。通過這些操作,可以完成MySQL資料庫的常規操作,如查詢、更新、刪除等。
❸ 新建Oracle資料庫的3種方法
以下是對新建Oracle資料庫的三種方法進行了詳細的分析介紹 需要的朋友可以過來參考下通過運行Oracle Database Configuration Assistant 創建 配置 或刪除資料庫(也可在命令行下輸入dbca) 用命令行的方式建立資料庫 通過運行自定義的批處理腳本(或create_ORACLE_SID bat(create_ORACLE_SID sql))來創建 配置 或刪除資料庫
詳述 通過運行Oracle Database Configuration Assistant 創建 配置 或刪除資料庫 建議不熟悉創建過程的DBA使用該方法 只需要根據選項「下一步」進行配置 最後生成資料庫的創建腳本(建議保留) 或者直接創建資料庫 優點 GUI方法使用方便 缺點 不過創建過程有些慢
用命令行的方式建立資料庫
復制代碼 代碼如下: CONNECT / AS SYSDBA STARTUP PFILE= C:oracleadmininit_testorcl ora NOMOUNT; CREATE DATABASE testOrcl DATAFILE /u /oracle/testOrcl/system dbf SIZE M LOGFILE GROUP ( /u /oracle/testOrcl/redo a log /u /oracle/testOrcl/redo b log ) SIZE K GROUP ( /u /oracle/testOrcl/redo a log /u /oracle/testOrcl/redo b log ) SIZE K CHARACTER SET ZHS CGB ;將資料庫直接從未建置狀態轉換到打開狀態 ALTER DATABASE OPEN;
刪除資料庫(Dropping a Database) SPOOL C:DROP_DATABASE BAT SELECT DEL ||NAME 刪除資料庫相關數據文件 FROM V$DATAFILE; SELECT DEL ||MEMBER 刪除數據重構日誌文件 FROM V$LOGFILE; SPOOL OFF;
優點 可以熟悉創建指令 創建原理 缺點 配置簡單 要求熟記命令行指令 通過運行自定義的批處理或SQL腳本(create_ORACLE_SID bat或create_ORACLE_SID sql)來創建
復制代碼 代碼如下: create_ORACLE_SID bat set ORACLE_SID= ORACLE_SID del C:ORACLE IdatabasepwdORACLE_SID ora C:ORACLE Ibinoradim new sid ORACLE_SID intpwd oracle startmode manual pfile C:ORACLE IadminORACLE_SIDpfileinit ora C:ORACLE Ibinsvrmgrl @C:_SIDrun sql C:ORACLE Ibinsvrmgrl @C:_SIDrun sql C:ORACLE Ibinoradim edit sid ORACLE_SID startmode auto ORACLE_SIDrun sql spool C:ORACLE IadminORACLE_SIDcreatecreatedb set echo on connect INTERNAL/oracle startup nomount pfile=C:ORACLE IadminORACLE_SIDpfileinit ora CREATE DATABASE ORACLE_SID LOGFILE C:ORACLE IoradataORACLE_SIDredo log SIZE K C:ORACLE IoradataORACLE_SIDredo log SIZE K MAXLOGFILES MAXLOGMEMBERS MAXLOGHISTORY DATAFILE C:ORACLE IoradataORACLE_SIDsystem dbf SIZE M REUSE MAXDATAFILES MAXINSTANCES CHARACTER SET ZHT BIG NATIONAL CHARACTER SET ZHT BIG ; spool off ORACLE_SIDrun sql spool C:ORACLE IadminORACLE_SIDcreatecreatedb set echo on connect INTERNAL/oracle ALTER DATABASE DATAFILE C:ORACLE IoradataORACLE_SIDsystem dbf AUTOEXTEND ON; CREATE ROLLBACK SEGMENT SYSROL TABLESPACE "SYSTEM" STORAGE (INITIAL K NEXT K); ALTER ROLLBACK SEGMENT "SYSROL" ONLINE;Linux平台下Oracle的操作
下面對Oracle的操作都是在Linux平台下進行的! su Oracle sqlplus /logon connect test/test assysdba(test/test是Oracle用戶和密碼) startup lsnrctl 首選啟動資料庫 su Oracle sqlplus /nolog conn /as sysdba startup 然後啟動監聽: 進入/opt/Oracle/proct/ /bin/ lsnrctl start 運行shudown命令關閉資料庫 [Oracle@wing /Oracle]$ sqlplus" / as sysdba" //以sysdba用戶登陸資料庫 SQL> shutdown
啟動Oracle i 資料庫 [Oracle@wing bin]$ sqlplus " /as sysdba" SQL> startup
啟動Oracle i監聽程序 Oracle的監聽程序主要是為客戶端的連接提供介面 [Oracle@wing bin]$ lsnrctl LSNRCTL> start
關閉Oracle i監聽程序 [Oracle@wing bin]$ lsnrctl LSNRCTL> stop 先看看Oracle_SID 環境變數設置是否正確 i $ sqlplus /nolog SQL> connect / as sysdba SQL> startup $ lsnrctl start i $ svrmgrl SVRMGR> connect internal SVRMGR> startup $ lsnrctl start 在哪裡報錯?? 一般只要設置這 處就好了~ /etc/oratab ora :/Oracle/app/Oracle/proct/ :Y /etc/inittab oralce: :wait:/bin/su Oracle c /Oracle/app/Oracle/proct/ /bin/lsnrctl start Oracle: :wait:/bin/su Oracle c /Oracle/app/Oracle/proct/ /bin/dbstart
啟動步驟 su Oracle [Oracle@websvr Oracle]$ sqlplus /nolog SQL> connect / as sysdba SQL> startup SQL> quit [Oracle@websvr Oracle]$ lsnrctl start 可用 [Oracle@websvr Oracle]$ lsnrctl status 查看監聽是否已經啟動
lishixin/Article/program/Oracle/201311/19064
❹ 用C或C++編程實現資料庫的查詢,添加,刪除,修改功能。
一個教材管理系統,給你參考下
void shumingsearch(struct book *head) /*按教材名稱查找*/
{ struct book *p;
char name[20];
int c;
if(head==NULL) {printf("未打開任何文件");getchar();return;}
printf("1,查找專業 2,查找教材名稱:");
scanf("%d",&c);
getchar();
if(c==2)
printf("請輸入要查找的教材名稱:");
else printf("請輸入要查找的專業:");
gets(name);
p=head;
do{ if(c==2)
if(strcmp(p->shuming,name)==0)
{
printf("教材編號:%s\n教材名稱:%s\n數量:%d\n價格:%d\n專業:%s\n作者:%s\n出版社:%s\n備註:%s\n",p->number,p->shuming,p->shuliang,p->jiage,p->zhuanye,p->zuozhe,p->chubanshe,p->beizhu);
}
if(c==1)
if(strcmp(p->zhuanye,name)==0)
{
printf("教材編號:%s\n教材名稱:%s\n數量:%d\n價格:%d\n專業:%s\n作者:%s\n出版社:%s\n備註:%s\n",p->number,p->shuming,p->shuliang,p->jiage,p->zhuanye,p->zuozhe,p->chubanshe,p->beizhu);
}
p=p->next;
}while(p!=NULL);
printf("查找完成");
return;
}
struct book *add(struct book *head) /*增加記錄*/
{ struct book *p,*e,*f,*h;
if(head==NULL) {printf("未打開任何文件");getchar(); return NULL;}
h=f=e=head;
p=(struct book *)malloc(sizeof(struct book));
printf("\n教材編號:");
gets(p->number);
printf("\n教材名稱:");
gets(p->shuming);
printf("\n數量:");
scanf("%d",&p->shuliang);
printf("\n價格:");
scanf("%d",&p->jiage);
getchar();
printf("\n專業:");
gets(p->zhuanye);
printf("\n作者:");
gets(p->zuozhe);
printf("\n出版社:");
gets(p->chubanshe);
printf("\n備注:");
gets(p->beizhu);
if(strcmp(f->number,p->number)>0) { p->next=f;h=p;printf("\n添加成功");return h;}
if(f->next==NULL) { f->next=p;p->next=NULL;printf("\n添加成功");return h;}
do{
if(f->next!=NULL)
if(strcmp(f->number,p->number)>0)
{
e->next=p;p->next=f;printf("\n添加成功");return h;
}
if(f->next==NULL)
{
f->next=p;
p->next=NULL;
printf("\n添加成功");
return h;
}
f=f->next;
e=e->next;
}while(1);
}
struct book *delet(struct book *head) /*刪除記錄*/
{ struct book *p,*e;
char num[20];
if(head==NULL) {printf("未打開任何文件");getchar();return NULL;}
printf("請輸入要刪除的教材編號:");
scanf("%s",num);
p=e=head;
if(strcmp(p->number,num)==0) { head=head->next; print(head);return head;}
else p=p->next;
do{
if(strcmp(p->number,num)==0)
{
if(p->next!=NULL)
e->next=p->next;
if(p->next==NULL) e->next=NULL;
print(head);
return head;
}
p=p->next;
e=e->next;
}while(p!=NULL);
printf("搜索完畢,未找到該記錄");
return head;
}
struct book *change(struct book *head) /*修改記錄*/
{ struct book *p;
char num[20];
if(head==NULL) {printf("未打開任何文件");getchar();return NULL;}
printf("請輸入要修改的教材編號:");
scanf("%s",num);
getchar();
p=head;
do{
if(strcmp(p->number,num)==0)
{
printf("教材編號:%s\n教材名稱:%s\n數量:%d\n價格:%d\n專業:%s\n作者:%s\n出版社:%s\n備註:%s\n",p->number,p->shuming,p->shuliang,p->jiage,p->zhuanye,p->zuozhe,p->chubanshe,p->beizhu);
printf("\n教材編號:");
gets(p->number);
printf("\n教材名稱:");
gets(p->shuming);
printf("\n數量:");
scanf("%d",&p->shuliang);
printf("\n價格:");
scanf("%d",&p->jiage);
getchar();
printf("\n專業:");
gets(p->zhuanye);
printf("\n作者:");
gets(p->zuozhe);
printf("\n出版社:");
gets(p->chubanshe);
printf("\n備注:");
gets(p->beizhu);
printf("修改成功");
return head;
}
p=p->next;
}while(p!=NULL);
printf("未找到要修改的記錄");
return head;
}
int mima()
{ FILE *fp;
char mima1[20],mima2[20];
if((fp=fopen("mima","r"))==NULL)
{ printf("尚未設置密碼請輸入:");
scanf("%s",mima1);
printf("請再次輸入密碼:");
scanf("%s",mima2);
if(strcmp(mima1,mima2)!=0) { printf("兩次密碼不一樣");return 0;}
else {
fp=fopen("mima","w");
fprintf(fp,"%s",mima1);
printf("密碼設置成功");
return 1;
}
}
printf("請輸入初始化密碼:");
scanf("%s",mima1);
fscanf(fp,"%s",mima2);
if(strcmp(mima1,mima2)==0)
{
printf("密碼正確");
printf("請輸入要刪除的文件名:");
scanf("%s",mima1);
if(remove(mima1)==0)
{
printf("刪除成功");
getchar();
return 1;
}
else {
printf("刪除失敗,請檢查是否存在該文件或路徑是否正確");
getchar();
return 0;
}
}
else {
printf("密碼錯誤");
getchar();
return 0;
}
}
void main()
{
struct book *head=NULL;
char i;
getch();
system("cls");
do{
printf(" ☆★☆★☆★ 教材管理系統 ☆★☆★☆★\n");
printf("m--菜單 h--幫助");
printf("\n請輸入命令:");
i=getch();
if(i=='h')
{ printf("\n1,錄入教材信息的時候,每一個項目都必須輸入相應的內容。\n2,修改,增加,刪除,查找記錄前必須先打開一個文件,修改完後必須記得保存教材信息。\n3,必須使用正確的路徑打開文件,建議保存文件時候不用輸入路徑(此時是默認路徑,即保存在程序目錄下。)");
getch();
break;
}
if(i=='m')
break;
system("cls");
}while(i!='m'||i!='h');
system("cls");
do{
printf(" ☆★☆★☆★ 教材管理系統 ☆★☆★☆★\n");
printf("┌————-———┐\n");
printf("│1,錄入教材信息│\n│2,顯示教材信息│\n│3,打開一個記錄│\n│4,編輯一個記錄│\n│5,保存教材信息│\n│6,查找記錄 │\n│s,初始化系統 │\n│e,退出系統 │\n");
printf("└———————-┘\n");
printf("\n請輸入功能編號:");
i=getch();
system("cls");
switch(i)
{
case '1': head=creat();save(head);break;
case '2': print(head);break;
case '3': head=openfile();break;
case '4': system("cls");
printf("┌————-———┐\n");
printf("│1,增加一個記錄│\n");
printf("│2,刪除一個記錄│\n");
printf("│3,修改一個記錄│\n");
printf("└———————-┘\n");
i=getch();
switch(i)
{
case '1':
head=add(head);break;
case '2':
head=delet(head);break;
case '3': head=change(head);break;
default: break;
}
break;
case '5': save(head);break;
case '6': shumingsearch(head);break;
case 's': mima();break;
case 'e': exit(0);
default :break;
}
system("cls");
}while(1);
}