<dfn id="yhprb"><s id="yhprb"></s></dfn><dfn id="yhprb"><delect id="yhprb"></delect></dfn><dfn id="yhprb"></dfn><dfn id="yhprb"><delect id="yhprb"></delect></dfn><dfn id="yhprb"></dfn><dfn id="yhprb"><s id="yhprb"><strike id="yhprb"></strike></s></dfn><small id="yhprb"></small><dfn id="yhprb"></dfn><small id="yhprb"><delect id="yhprb"></delect></small><small id="yhprb"></small><small id="yhprb"></small> <delect id="yhprb"><strike id="yhprb"></strike></delect><dfn id="yhprb"></dfn><dfn id="yhprb"></dfn><s id="yhprb"><noframes id="yhprb"><small id="yhprb"><dfn id="yhprb"></dfn></small><dfn id="yhprb"><delect id="yhprb"></delect></dfn><small id="yhprb"></small><dfn id="yhprb"><delect id="yhprb"></delect></dfn><dfn id="yhprb"><s id="yhprb"></s></dfn> <small id="yhprb"></small><delect id="yhprb"><strike id="yhprb"></strike></delect><dfn id="yhprb"><s id="yhprb"></s></dfn><dfn id="yhprb"></dfn><dfn id="yhprb"><s id="yhprb"></s></dfn><dfn id="yhprb"><s id="yhprb"><strike id="yhprb"></strike></s></dfn><dfn id="yhprb"><s id="yhprb"></s></dfn>

新聞中心

EEPW首頁(yè) > 嵌入式系統 > 設計應用 > C語(yǔ)言與嵌入式SQL混合編程及圖像處理技術(shù)

C語(yǔ)言與嵌入式SQL混合編程及圖像處理技術(shù)

作者: 時(shí)間:2012-12-13 來(lái)源:網(wǎng)絡(luò ) 收藏

Server是現階段應用程序最普遍采用的數據庫,在數據庫中對圖像、視頻和聲音等數據的存取需要越來(lái)越頻繁。普通數據可直接在用戶(hù)定義的字段上存取,而這類(lèi)被稱(chēng)為二進(jìn)制大對象(Binary Large Object)的大數據塊由于其數據量太大,不是作為數據記錄的一部分被存儲在數據記錄頁(yè)中,而是存儲在其所屬的一組專(zhuān)用頁(yè)中,數據表的對應字段中僅是一個(gè)十六進(jìn)制的指針,該指針指向存放該記錄的頁(yè)面。由于是一種面向集合運算的描述,其本身不具有過(guò)程性結構,使用 Server中的Image類(lèi)型字段存放圖像文件時(shí),Image類(lèi)型字段是只存儲位串,SQL Server不對它進(jìn)行編譯,而是由應用程序完成解釋。又因Image類(lèi)型的字段內容在SQL Server 2000中不能使用INSERT和UPDATA等語(yǔ)句進(jìn)行插入和更新,所以需編寫(xiě)專(zhuān)門(mén)的過(guò)程來(lái)處理圖像字段。盡管在SQL Server 2005可以使用有關(guān)的函數解決這一問(wèn)題,但由于實(shí)際的應用系統是非常復雜的,數據庫訪(fǎng)問(wèn)只是其中一個(gè)部分,有些用戶(hù)交互、圖形化輸入輸出數據只能用高級實(shí)現。利用高級語(yǔ)言的過(guò)程性結構來(lái)彌補SQL語(yǔ)言實(shí)現復雜應用方面的不足, 將SQL語(yǔ)言嵌入到C語(yǔ)言的將有廣泛的應用前景。

本文引用地址:http://dyxdggzs.com/article/148193.htm

1 SQL及語(yǔ)法要素

1.1 C語(yǔ)言語(yǔ)句[1]

SQL語(yǔ)言可以嵌入到C語(yǔ)言中使用,數據庫管理系統一般采用的處理方法是預處理方法。預處理方法就是從含有主程序C語(yǔ)言和SQL語(yǔ)句的程序開(kāi)始的。首先,把程序提交給一個(gè)專(zhuān)門(mén)用于C語(yǔ)言和SQL實(shí)現方式的預編譯器,預編譯器從C語(yǔ)言代碼中剝離SQL語(yǔ)句,把SQL語(yǔ)句轉換成C語(yǔ)言調用語(yǔ)句,以使用C語(yǔ)言編譯程序,并將整個(gè)編譯成目標代碼,鏈接到各數據庫并形成可執行文件。在C語(yǔ)言中嵌入SQL語(yǔ)句產(chǎn)生應用程序的過(guò)程為[2]:編輯C源代碼+嵌入式SQL→SQL預編譯器→C編譯器→鏈接程序(DLL導入庫)→應用程序(數據庫)。

1.2 嵌入式SQL的語(yǔ)法要素

(1)創(chuàng )建嵌入式語(yǔ)句。將SQL嵌入到C語(yǔ)言中,程序中會(huì )含有兩種不同計算模型的語(yǔ)句。為了區別SQL語(yǔ)句與C語(yǔ)句,須在所有的SQL語(yǔ)句前加前綴EXEC SQL,且以分號結束,一般形式為“EXEC SQL ”。嵌入式語(yǔ)句分為可執行語(yǔ)句和說(shuō)明性語(yǔ)句,可執行語(yǔ)句用來(lái)完成在交互式環(huán)境下的SQL語(yǔ)句中的數據定義、數據操縱和數據控制任務(wù),說(shuō)明性語(yǔ)句用于聲明通信區和SQL變量等。

(2)SQL通信區。SQL Server數據庫管理系統提供了一個(gè)通信區SQLCA,用于存儲SQL語(yǔ)句運行時(shí)DBMS反饋給應用程序的狀態(tài),這些信息主要描述系統當前工作狀態(tài)以及運行環(huán)境等。應用程序從SQLCA中取出這些狀態(tài)信息,以決定接下來(lái)執行的語(yǔ)句。在C語(yǔ)言中定義為SQL通信區的語(yǔ)句為:EXEC SQL INCLUDE SQLCA。

(3)主變量。嵌入式SQL語(yǔ)句中可以使用C語(yǔ)言的程序變量及主變量來(lái)輸入或輸出數據。一個(gè)主變量可以附帶一個(gè)任選的指示變量用來(lái)指示返回給主變量的值是否為NULL值以及返回給主變量的字符串是否發(fā)生了截斷。輸入主變量出現于SQL語(yǔ)句中時(shí),可在前面加冒號(:)以區別表字段名。而定義輸出變量用指示變量的方法,是在SQL語(yǔ)句EXEC SQL BEGIN DECLARE SECTION與EXEC SQL END DECLARE SECTION之間進(jìn)行說(shuō)明。

(4)鏈接數據庫。C程序的主函數中應包含一條登錄語(yǔ)句,向預編譯和程序提供用戶(hù)名和口令,以實(shí)現與SQL Server數據庫管理系統建立鏈接。其命令語(yǔ)法為:EXEC SQL CONNECT TO 服務(wù)器名.數據庫名AS鏈接名 USER 用戶(hù)名.口令。

2 SQL Server中圖像數據處理

2.1 SQL Server 2000圖像存儲方法

SQL Server 2000中,對于小于8 000 B的圖像數據可以使用二進(jìn)制數據類(lèi)型(binary、varbinary)表示,但通常要保存的圖像都大于8 000 B,對于這類(lèi)大對像數據,系統提供了Image數據類(lèi)型。Image數據類(lèi)型不同于其他數據類(lèi)型,該字段內容不能使用標準INSERT和UPDATE等語(yǔ)句進(jìn)行插入和更新,因此用C語(yǔ)言程序[3]來(lái)編寫(xiě)處理圖像文件,需要先將圖像文件等數據轉換成十六進(jìn)制后存儲,再將Image列中的數據存儲為位串。SQL Server不能對它進(jìn)行解釋?zhuān)琁mage列數據的解釋必須由應用程序完成,這與普通的數據存儲方式是不同的。Image列所做的全部工作就是提供一個(gè)位置用來(lái)存儲組成圖像數據值的位流,這需用到SQL Server中的TEXTPTR、WRITETEXT和UPDATETEXT等函數進(jìn)行圖形的添加和修改。以下是一個(gè)C語(yǔ)言與SQL Server 2000的嵌入式的實(shí)例,程序給出的是解決該問(wèn)題的核心部分。

Demo1.sqc

#include

#include

#define Buffer_Size 1024

EXEC SQL INCLUDE USERCA;

//filein為.jpg文件,fileout為.txt文件

void imagetofield(char *filein,char * fileout)

{

EXEC SQL BEGIN DECLARE SECTION;

FILE *fin,*fout; int j, Len;

unsigned char buffer1[Buffer_Size+1];

unsigned char buffer2[Buffer_Size*3+1];

unsigned char *Temp;

EXEC SQL END DECLARE SECTION;

if(!(fin=fopen(filein, rb )))

return;

if(!(fout=fopen(fileout, w)))

{fclose(fin);return;}

Len=fread(buffer1, sizeof(char), Buffer_Size, fin);

Temp=buffer2;

while(Len==Buffer_Size)

{ for(j=0;j

{ fprintf(fout,%X,buffer1[j]);

Temp+= 3; };

//這樣就把二進(jìn)制的數據轉換成為16進(jìn)制的字符串,

并且存儲到buffer1當中了

fwrite(buffer1, sizeof(char), nLen*3, fout);

Len=fread(buffer1, sizeof(char), Buffer_Size, fin); }

fclose(fin);

fclose(fout);

……

EXEC SQL CONNECT Serverl:mydb USER sa.sa;

EXEC SQL CREATE TEALE(sno char(9), sname char

(20), resume nvarchar(max),photo image);

//表中插入一條記錄,并初始化photo字段

EXEC SQL INSERT INTO teacher VALUES (’1001’,

’Arlen’,’’,0xfffffff)

linux操作系統文章專(zhuān)題:linux操作系統詳解(linux不再難懂)

c語(yǔ)言相關(guān)文章:c語(yǔ)言教程



上一頁(yè) 1 2 下一頁(yè)

評論


相關(guān)推薦

技術(shù)專(zhuān)區

關(guān)閉
国产精品自在自线亚洲|国产精品无圣光一区二区|国产日产欧洲无码视频|久久久一本精品99久久K精品66|欧美人与动牲交片免费播放
<dfn id="yhprb"><s id="yhprb"></s></dfn><dfn id="yhprb"><delect id="yhprb"></delect></dfn><dfn id="yhprb"></dfn><dfn id="yhprb"><delect id="yhprb"></delect></dfn><dfn id="yhprb"></dfn><dfn id="yhprb"><s id="yhprb"><strike id="yhprb"></strike></s></dfn><small id="yhprb"></small><dfn id="yhprb"></dfn><small id="yhprb"><delect id="yhprb"></delect></small><small id="yhprb"></small><small id="yhprb"></small> <delect id="yhprb"><strike id="yhprb"></strike></delect><dfn id="yhprb"></dfn><dfn id="yhprb"></dfn><s id="yhprb"><noframes id="yhprb"><small id="yhprb"><dfn id="yhprb"></dfn></small><dfn id="yhprb"><delect id="yhprb"></delect></dfn><small id="yhprb"></small><dfn id="yhprb"><delect id="yhprb"></delect></dfn><dfn id="yhprb"><s id="yhprb"></s></dfn> <small id="yhprb"></small><delect id="yhprb"><strike id="yhprb"></strike></delect><dfn id="yhprb"><s id="yhprb"></s></dfn><dfn id="yhprb"></dfn><dfn id="yhprb"><s id="yhprb"></s></dfn><dfn id="yhprb"><s id="yhprb"><strike id="yhprb"></strike></s></dfn><dfn id="yhprb"><s id="yhprb"></s></dfn>