• <strike id="aymay"></strike>
    <strike id="aymay"></strike>
    <ul id="aymay"><dfn id="aymay"></dfn></ul>
    <ul id="aymay"><sup id="aymay"></sup></ul>
  • <del id="aymay"></del>

    C語言與嵌入式SQL混合編程及圖像處理技術

    2013-11-06 14:09 來源:互聯網 作者:洛小辰

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

    1 嵌入式SQL及語法要素

    1.1 C語言嵌入式語句[1]

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

    1.2 嵌入式SQL的語法要素

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

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

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

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

    2 SQL Server中圖像數據處理技術

    2.1 SQL Server 2000圖像存儲方法

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

    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; };

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

    并且存儲到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)

    嵌入式 C語言 SQL

    相關閱讀

    暫無數據

    一周熱門

    主站蜘蛛池模板: 国产精品成人久久久久三级午夜电影| 精品久久久久久亚洲| 精品国产乱码久久久久久郑州公司| 99精品欧美一区二区三区| 国产精品精品自在线拍| 亚洲国产综合精品中文字幕| 国产精品毛片一区二区| 国产成人精品福利网站在线| 亚洲av永久无码精品表情包| 精品人妻少妇嫩草AV无码专区| 欧美精品手机在线播放| 久久精品国产亚洲Aⅴ蜜臀色欲| 你懂的国产精品| 国产探花在线精品一区二区| 亚洲国产午夜中文字幕精品黄网站| 国产精品自在线拍国产电影| 日韩精品成人一区二区三区| 国产成人精品优优av| 亚洲国产精品特色大片观看完整版| 久久国产精品二国产精品| 国产成人无码精品一区在线观看 | 亚洲Av永久无码精品三区在线| 国产亚洲精品无码专区| 99热都是精品久久久久久| 在线观看91精品国产入口| 丝袜美腿国产精品视频一区 | 91麻豆精品国产| 精品福利一区二区三区免费视频| 亚洲中文字幕久久精品无码APP | 青草国产精品久久久久久| 亚洲爆乳无码精品AAA片蜜桃| 国产精品天干天干在线综合| wwwvr高清亚洲精品二区| 777欧美午夜精品影院| 香蕉久久夜色精品国产小说| 久久精品国产半推半就| 四虎精品成人免费观看| 亚洲欧洲国产精品你懂的| 99热精品久久只有精品| 国产精品成人无码久久久久久| 国产三级精品三级在线观看专1 |