導航:首頁 > 編程語言 > 嵌入式sql編程c

嵌入式sql編程c

發布時間:2022-08-12 20:41:07

linux gcc mysql 如何在C語言中使用嵌入式SQL編程

我,我發給你,全面覆蓋了gcc編程,當然是簡單版本,不過基本夠用了

❷ C語言中使用嵌入式sql

嵌入式SQL程序的VC+SQL server 2000實現的環境配置

嵌入SQL的C應用程序具體到VC++6.0, SQL Server2000 下調試可分為五步:1、環境初始化;2、預編譯;3、編譯;4、連接;5、運行。下面就其中重要的的操作方法給以詳細說明。
1、環境初始化
(1) SQL Server2000為其嵌入式SQL提供了一此特殊的介面;默認的安裝方式沒有安裝這此介面;因此,需要把devtools.rar解壓到SQLServer的系統日錄下(即文件夾devtools中的所有文件);如果操作系統安裝在C盤,則SQL Server的系統目錄是C:\Program Files\Microsoft SQL Server。(或 在安裝Microsoft SQL Server 2000時選擇安裝Development Tools,為使用嵌入式SQL語言准備必要的頭文件和庫文件。)
( 2)初始化Visual C++ 6.0編譯器環境。在命令行方式下運行文件\Microsoft Visual Studio\VC98\Bin\vcvars32.bat。
(3)初始化SQL Server的預編譯環境。在命令行方式下運行文件:\Devtools\samples\esqlc\setenv.bat。
( 4) VC++6.0環境配置。具體配置分為如下三步[:
①Tools->options->directories->Include Files:添加 C:\Program Files\Microsoft SQL Server\devtools\include。將SQL server自帶的用於資料庫開發的頭文件包含到工程環境中。
②Tools->options->directories->Lib Files:添加C:\Program Files\Microsoft SQL Server\devtools\x861ib。將開發用到的包包含到工程中。
③project->Settings->Link->Object/Library Moles,添加庫文件:SQLakw32.lib, Caw32.lib。這兩個文件之間用空格分開。

2、預編譯
C語言編譯程序不能識別應用程序中的SQL語句,需要經過預處理程序將其轉換成C語句。SQL Server的預處理程序是nsqlprep.exe。 nsqlprep.exe在SQL Server安裝日錄的MSSQL\Binn下。若SQL Server資料庫採用的是默任安裝方式,則需要把binn.rar的內容拷貝到指定目錄下。

Microsoft SQL Server 2000提供的預編譯程序nsqlprep.exe,用於對嵌入式SQL程序進行預編譯處理,生成C語言源程序.實際上就是將嵌入式SQL程序中的嵌入式SQL語句替換為對運行時庫文件Sqlakw32. dll的函數調用,接著運行時庫文件調用動態連接庫Ntwdblib. dll通過網路來存取Microsoft SQL Server 2000資料庫伺服器.
預編譯程序nsqlprep的常用語法為:
nsqlprep ESQL_File /SQLACCESS /DB server_name.database_name /PASS login.password
其中ESQL_File是要預編譯的嵌入式SQL程序;/SQLACCESS通知nsqlprep自動地為嵌入式SQL程序中的靜態SQL語句創建相應的存儲過程;/DB server_name.database_name指明要連接的伺服器以及資料庫名稱;/PASS login.password給出登錄名及相應的口令.

下面的程序demo.sqc實現了從資料庫伺服器hushaobo的資料庫pubs中的authors表中讀取au_lname為white的人對應的 au_fname 值,並保存到變數first_name 中顯示出來。(連接資料庫的用戶為sa,對應密碼為1982)

#include<stdio.h>
void main()
{
EXEC SQL BEGIN DECLARE SECTION;
char first_name[40];
char last_name[]="White";
EXEC SQL END DECLARE SECTION;
EXEC SQL CONNECT TO hushaobo.pubs
USER sa.1982;
EXEC SQL SELECT au_fname INTO :first_name from authors WHERE au_lname = :last_name;
EXEC SQL DISCONNECT ALL;
printf("first name: %s \n",first_name);
}

在命令行下運行:nsqlprep demo.sqc /SQLACCESS /DB hushaobo.pubs /PASS sa.1982
則生成demo.c,將該文件添加到VC工程中編譯即可。

3、編譯,連接與運行
在VC++6.0中創建一個 "WIN32 Console Application"的Proiect,然後將預編譯生成的c文件加入Proiect,編譯連接即可生成訪問SQL Server的可執行程序。 Visual C++ 6.0進行編譯連接時需要用到動態鏈接庫SQLakw32.d11與SQLaiw32.d11;盡管這兩個文件已經隨同binn.rar被拷貝到SQLServer安裝目錄的MSSQL\Binn文件夾下,但仍然需要把它們的路徑加到系統路徑變數中,以使得程序運行時能找到它們,具體添加方法如下:
方法1:把這兩個文件拷貝到操作系統目錄下的system32子目錄中。
方法2:我的電腦->屬性->高級->環境變數->path->編輯,在變數值中加入路徑值;新路徑與已有路徑間用;間隔。

注意調適程序時,文件名中不要包含cursor,否則可能會出錯。

❸ db2 嵌入式sql編程的問題(c語言)

兩個異常應該沒有關系啊,上一個是說指針類型不同,一個是struct sqlda的指針,一個是struct sqlda的二維指針。你看看2152的源碼是什麼 。

後面就是說找不到not_found的label,應該是個goto語句,你看看函數下面有沒有
not_found:

❹ 嵌入式sql語句怎麼才能在C語言運行,比如這個C程序,需要什麼頭文件之類的嗎

這種程序需要先使用資料庫編程軟體的編譯器編譯生成.c文件後,才可以再使用C編譯器對.c文件進行編譯。比如Oracle的ProC和informix的ESQL/C。

建議查看一下ProC和ESQL/C方面的資料。

❺ 如何用C實現對SQL資料庫的操作

連接到SAMPLE資料庫,查詢LASTNAME為JOHNSON的FIRSTNAME信息。
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include "util.h"
#include <sqlca.h>``
EXEC SQL INCLUDE SQLCA;

main()
{
EXEC SQL BEGIN DECLARE SECTION;

char firstname[13];
char userid[9];
char passwd[19];
EXEC SQL END DECLARE SECTION;
EXEC SQL CONNECT TO sample;

EXEC SQL SELECT FIRSTNME INTO :firstname

FROM employee
WHERE LASTNAME = 'JOHNSON';
printf( "First name = %s\n", firstname );
EXEC SQL CONNECT RESET;
return 0;
}
上面是一個簡單的靜態嵌入SQL語句的應用程序。它包括了嵌入SQL的主要部分:
(1)中的include SQLCA語句定義並描述了SQLCA的結構。SQLCA用於應用程序和資料庫之間的通訊,其中的SQLCODE返回SQL語句執行後的結果狀態。
(2)在BEGIN DECLARE SECTION和END DECLARE SECTION之間定義了宿主變數。宿主變數可被SQL語句引用,也可以被C語言語句引用。它用於將程序中的數據通過SQL語句傳給資料庫管理器,或從資料庫管理器接收查詢的結果。在SQL語句中,主變數前均有「:」標志以示區別。
(3)在每次訪問資料庫之前必須做CONNECT操作,以連接到某一個資料庫上。這時,應該保證資料庫實例已經啟動。
(4)是一條選擇語句。它將表employee中的LASTNAME為「JOHNSON」的行數據的FIRSTNAME查出,並將它放在firstname變數中。該語句返回一個結果。可以通過游標返回多個結果。當然,也可以包含update、insert和delete語句。
(5)最後斷開資料庫的連接。
從上例看出,每條嵌入式SQL語句都用EXEC SQL開始,表明它是一條SQL語句。這也是告訴預編譯器在EXEC SQL和「;」之間是嵌入SQL語句。如果一條嵌入式SQL語句佔用多行,在C程序中可以用續行符「\」。

❻ mysql中能在C程序中通過嵌入式SQL訪問資料庫么

先看結構體
----------------------------------------------
以下代碼塊是用來連接資料庫的通訊過程,要連接MYSQL,必須建立MYSQL實例,通過mysql_init初始化方能開始進行連接.
typedefstructst_mysql{
NETnet;/*Communicationparameters*/
gptrconnector_fd;/*ConnectorFdforSSL*/
char*host,*user,*passwd,*unix_socket,
*server_version,*host_info,*info,*db;
unsignedintport,client_flag,server_capabilities;
unsignedintprotocol_version;
unsignedintfield_count;
unsignedintserver_status;
unsignedlongthread_id;/*Idforconnectioninserver*/
my_ulonglongaffected_rows;
my_ulonglonginsert_id;/*idifinsertontablewithNEXTNR*/
my_ulonglongextra_info;/*Usedbymysqlshow*/
unsignedlongpacket_length;
enummysql_statusstatus;
MYSQL_FIELD*fields;
MEM_ROOTfield_alloc;
my_boolfree_me;/*Iffreeinmysql_close*/
my_boolreconnect;/*setto1ifautomaticreconnect*/
structst_mysql_optionsoptions;
charscramble_buff[9];
structcharset_info_st*charset;
unsignedintserver_language;
}MYSQL;

這個結構代表返回行的一個查詢的(SELECT,SHOW,DESCRIBE,EXPLAIN)的結果。返回的數據稱為「數據集」,用過資料庫的朋友應該對資料庫中查詢後得到的結果集不會陌生,在C的API里對應的就是MYSQL_RES了,從資料庫讀取數據,最後就是從MYSQL_RES中讀取數據。

typedefstructst_mysql_res{
my_ulonglongrow_count;
unsignedintfield_count,current_field;
MYSQL_FIELD*fields;
MYSQL_DATA*data;
MYSQL_ROWS*data_cursor;
MEM_ROOTfield_alloc;
MYSQL_ROWrow;/*Ifunbufferedread*/
MYSQL_ROWcurrent_row;/*buffertocurrentrow*/
unsignedlong*lengths;/*columnlengthsofcurrentrow*/
MYSQL*handle;/*forunbufferedreads*/
my_booleof;/*Usedmymysql_fetch_row*/
}MYSQL_RES;

----------------------------------------------
再看函數:

C語言操作mysql數據常用函數
所需頭文件:#include<mysql/mysql.h>
功能:獲得或初始化一個MYSQL結構
函數原型:MYSQL*mysql_init(MYSQL*mysql)
函數返回值:一個被始化的MYSQL*句柄
備註:在內存不足的情況下,返回NULL
所需頭文件:#include<mysql/mysql.h>
函數功能:關閉一個伺服器連接,並釋放與連接相關的內存
函數原型:voidmysql_close(MYSQL*mysql);
函數傳入值:MYSQL:類型的指針
函數返回值:無
所需頭文件:#include<mysql/mysql.h>
函數功能:連接一個MySQL伺服器
函數原型:MYSQL*mysql_connect(MYSQL*mysql,constchar*host,constchar*user,constchar*passwd);
函數傳入值:mysql表示一個現存mysql結構的地址
host表示MYSQL伺服器的主機名或IP
user表示登錄的用戶名
passwd表示登錄的密碼
函數返回值:如果連接成功,一個MYSQL*連接句柄:如果連接失敗,NULL
備註:該函數不推薦,使用mysql_real_connect()代替
所需文件:#include<mysql/mysql.h>
函數功能:MYSQL*mysql_real_connect(MYSQL*mysql,constchar*host,constchar*user,constchar*passwd,constchar*db,unsignedintport,constchar*unix_socket,unsignedintclient_flag);
函數傳入值:mysql表示一個現存mysql結構的地址
host表示MYSQL伺服器的主機名或IP
user表示登錄的用戶名
passwd表示登錄的密碼
db表示要連接的資料庫
port表示MySQL伺服器的TCP/IP埠
unix_socket表示連接類型
client_flag表示MySQL運行ODBC資料庫的標記
函數返回值:如果連接成功,一個MYSQL*連接句柄:如果連接失敗,NULL
所需頭文件:#include<mysql/mysql.h>
函數功能:返回最新的UPDATE,DELETE或INSERT查詢影響的行數
函數傳入值:MYSQL:類型指針
函數返回值:大於零的一個整數表示受到影響或檢索出來的行數。零表示沒有區配查序中WHERE子句的記錄或目前還沒有查詢被執行;-1表示查詢返回一個錯誤,或對於一個SELECT查詢
所需頭文件:#include<mysql/mysql.h>
函數功能:對指定的連接執行查詢
函數原型:intmysql_query(MYSQL*mysql,constchar*query);
函數傳入值:query表示執行的SQL語句
函數返回值:如果查詢成功,為零,出錯為非零。
相關函數:mysql_real_query
所需頭文件:#include<mysql/mysql.h>
函數功能:為無緩沖的結果集獲得結果標識符
函數原形:MYSQL_RES*mysql_use_result(MYSQL*mysql);
函數傳入值:MYSQL:類型的指針
函數返回值:一個MYSQL_RES結果結構,如果發生一個錯誤發NULL
#incluee<mysql/mysql.h>
檢索一個結果集合的下一行
MYSQL_ROWmysql_fetch_row(MYSQL_RES*result);
MYSQL_RES:結構的指針
下一行的一個MYSQL_ROW結構。如果沒有更多的行可檢索或如果出現一個錯誤,NULL
#include<mysql/mysql.h>
返回指定結果集中列的數量
unsignedintmysql_num_fields(MYSQL_RES*res);
MYSQL_RES結構的指針
結果集合中欄位數量的一個無符號整數
#include<mysql/mysql.h>
創建一個資料庫
intmysql_create_db(MYSQL*mysql,constchar*db);
MYSQL:類型的指針
db:要創建的資料庫名
如果資料庫成功地被創建,返回零,如果發生錯誤,為非零。
#include<mysql/mysql.h>
選擇一個資料庫
intmysql_select_db(MYSQL*mysql,constchar*db);
MYSQL:類型的指針
db:要創建的資料庫名
如果資料庫成功地被創建,返回零,如果發生錯誤,為非零。
----------------------------------------------
再看例子:
很多人用到MySQL來開發一些項目,有時為了性能,我們會直接用C語言來開發相關的模塊,尤其在我們的web應用中,雖然php、JSP等腳本均提供了MySQL的介面,但是顯然直接使用C語言具有更好的安全性和性能,Michael以前用PHP開發的多個項目中就使用了C語言編寫的這類介面,然後再編譯到php裡面,供php腳本直接使用,這方面的話題就不多說了,下面主要說一下在Linux下如何用C語言連接MySQL資料庫,並且讀取裡面的數據返回,同時如何進行編譯。
這里的大部分代碼參考了MySQL發行包裡面的.c源文件,大家也可以去裡面找找相關的代碼,下面這段代碼實現了連接到本地MySQL伺服器上9tmd_bbs_utf8資料庫,從數據表tbb_user中根據輸入的userid取得該用戶的用戶名並列印輸出到終端。
#ifdefined(_WIN32)||defined(_WIN64)//為了支持windows平台上的編譯
#include<windows.h>
#endif
#include<stdio.h>
#include<stdlib.h>
#include"mysql.h"//我的機器上該文件在/usr/local/include/mysql下

//定義資料庫操作的宏,也可以不定義留著後面直接寫進代碼
#defineSELECT_QUERY"selectusernamefromtbb_userwhereuserid=%d"

intmain(intargc,char**argv)//char**argv相當於char*argv[]
{
MYSQLmysql,*sock;//定義資料庫連接的句柄,它被用於幾乎所有的MySQL函數
MYSQL_RES*res;//查詢結果集,結構類型
MYSQL_FIELD*fd;//包含欄位信息的結構
MYSQL_ROWrow;//存放一行查詢結果的字元串數組
charqbuf[160];//存放查詢sql語句字元串

if(argc!=2){//檢查輸入參數
fprintf(stderr,"usage:mysql_select<userid> ");
exit(1);
}

mysql_init(&mysql);
if(!(sock=mysql_real_connect(&mysql,"localhost","dbuser","dbpwd","9tmd_bbs_utf8",0,NULL,0))){
fprintf(stderr,"Couldn'tconnecttoengine! %s ",mysql_error(&mysql));
perror("");
exit(1);
}

sprintf(qbuf,SELECT_QUERY,atoi(argv[1]));
if(mysql_query(sock,qbuf)){
fprintf(stderr,"Queryfailed(%s) ",mysql_error(sock));
exit(1);
}

if(!(res=mysql_store_result(sock))){
fprintf(stderr,"Couldn'tgetresultfrom%s ",mysql_error(sock));
exit(1);
}

printf("numberoffieldsreturned:%d ",mysql_num_fields(res));

while(row=mysql_fetch_row(res)){
printf("Theruserid#%d'susernameis:%s ",atoi(argv[1]),(((row[0]==NULL)&&(!strlen(row[0])))?"NULL":row[0]));
puts("queryok! ");
}

mysql_free_result(res);
mysql_close(sock);
exit(0);
return0;//.為了兼容大部分的編譯器加入此行
}
編譯的時候,使用下面的命令
gcc-omysql_select./mysql_select.c-I/usr/local/include/mysql-L/usr/local/lib/mysql-lmysqlclient(-lz)(-lm)後面兩個選項可選,根據您的環境情況
運行的時候,執行下面的命令
./mysql_select1
將返回如下結果:
numberoffieldsreturned:1
Theruserid#1'susernameis:Michael
queryok!

❼ 嵌入式SQL怎麼實現

C++ 本來就不識別SQL,要在C++里對SQL類的資料庫進行操作的正確做法的原理是:
1、使用控制項,向SQL類伺服器(比如MS SQL Server或Oracle,或最簡單的ACCESS資料庫)發送SQL語句,SQL類伺服器響應後就會針對語句的要求進行返回數據集或結果,控制項可以收到結果,然後進行展現或處理。
2、一般最常見的是ADO Data類的控制項,比如C++Builder里的ADOQUERY,ADODataset。又比如VC里的ADO Data控制項,等等。
3、想具體的學習如何進行SQL資料庫編程,可自個網路關鍵詞:「SQL資料庫編程」,或「C++Builder SQL資料庫編程 」。

❽ linux gcc mysql 如何在C語言中使用嵌入式SQL編程 要什麼頭文件如何編譯越詳細越好

最起碼包含mysql.h
實例代碼:
#include <stdlib.h>
#include <stdio.h>

#include "mysql.h"

int main(int argc, char *argv[]) {
MYSQL *conn_ptr;

conn_ptr = mysql_init(NULL);
if (!conn_ptr) {
fprintf(stderr, "mysql_init failed\n");
return EXIT_FAILURE;
}

conn_ptr = mysql_real_connect(conn_ptr, "localhost", "rick", "secret",
"foo", 0, NULL, 0);//連接資料庫

if (conn_ptr) {
printf("Connection success\n");
} else {
printf("Connection failed\n");
}

mysql_close(conn_ptr);

return EXIT_SUCCESS;
}
編譯:(假定上面文件取名 con.c,在當前目錄下)
gcc -I/usr/include/mysql con.c -L/usr/lib/mysql -lmysqlclient -o con

❾ C語言db2嵌入式SQL編程,編譯問題 undefined reference to `sqlastrt'

1、要有類似的定義:
……
EXEC SQL INCLUDE SQLDA; /* or #include <sqlda.h> */
2、編譯環境要有db2的許可權和sqllib的路徑
3、我已經上傳了一份相關的文檔,預計明後天審核通過就可以看到了
《DB2開發基礎》
http://passport..com/?business&aid=6&un=chinacmouse#7

補充一個程序:
#include <time.h>
#include "stdio.h"

EXEC SQL INCLUDE SQLCA;

int main()
{
int i=0;
struct tm *pt;
time_t t1;
t1 = time(NULL);
pt = localtime(&t1);
printf("%4d%02d%02d", pt->tm_year+1900, pt->tm_mon+1, pt->tm_mday);
printf("%02d:%02d:%02d\n",pt->tm_hour,pt->tm_min,pt->tm_sec);

EXEC SQL CONNECT TO db;
i=0;
while (i<3000)
{
int j=0;
while (j<1000)
{
EXEC SQL update cc.fund set cc_code='095' where cc_no='0950031359';
j++;
}
i++;
}
EXEC SQL COMMIT;
t1 = time(NULL);
pt = localtime(&t1);
printf("%4d%02d%02d", pt->tm_year+1900, pt->tm_mon+1, pt->tm_mday);
printf("%02d:%02d:%02d\n",pt->tm_hour,pt->tm_min,pt->tm_sec);
EXEC SQL CONNECT RESET;
return 1;
}

編譯腳本:
db2 prep testdb.sqc target cplusplus bindfile using testdb.bnd package using testdb
db2 bind testdb.bnd
db2 grant execute on package testdb to public
gcc -I/app/db2inst1/sqllib/include -I./ -c -g testdb.C
gcc -L/app/db2inst1/sqllib/lib -ldb2 -L/usr/lib -lm -o testdb testdb.o

閱讀全文

與嵌入式sql編程c相關的資料

熱點內容
解壓的密碼htm被屏蔽 瀏覽:502
冬天太冷冰箱壓縮機不啟動怎麼辦 瀏覽:82
手機打開vcf需要什麼編譯器 瀏覽:909
加密磁碟後開機很慢 瀏覽:270
長沙智能雲控系統源碼 瀏覽:256
阿里雲伺服器如何設置操作系統 瀏覽:999
超級命令的英文 瀏覽:782
做賬為什麼要用加密狗 瀏覽:586
考研群體怎麼解壓 瀏覽:156
linux修改命令提示符 瀏覽:226
圓圈裡面k圖標是什麼app 瀏覽:60
pdf加空白頁 瀏覽:945
linux伺服器如何看網卡狀態 瀏覽:318
解壓新奇特視頻 瀏覽:707
圖書信息管理系統java 瀏覽:554
各種直線命令詳解 瀏覽:864
程序員淚奔 瀏覽:147
素材怎麼上傳到伺服器 瀏覽:517
android百度離線地圖開發 瀏覽:191
web可視化編程軟體 瀏覽:294