• <li id="00i08"><input id="00i08"></input></li>
  • <sup id="00i08"><tbody id="00i08"></tbody></sup>
    <abbr id="00i08"></abbr>
  • 新聞中心

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

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

    作者: 時間:2012-12-13 來源:網絡 收藏

    //往表中寫入圖像信息

    EXEC DECLARE @@tmp_data varbinary(16)

    EXEC SELECT @@tmp_data = TEXTPTR(photo)

    FROM teacher WHERE sno= '1001 '

    EXEC WRITETEXT teacher.photo @@tmp_data:*fileout

    //:*fileout圖像文件轉為十六進制文件指針

    ……

    EXEC SQL COMMIT ;

    EXEC SQL DISCONNECT ALL;}

    2.2 SQL Server 2005圖像存儲實現方法[4]

    SQL Server 2005 的 OPENROWSET 函數能夠一次完成遠程數據的連接與存取。可以在 SELECT 語句的 FROM 子句中使用 OPENROWSET 函數,也可以在 INSERT、UPDATE 或 DELETE 語句中把 OPENROWSET 函數當成目標數據表來使用。值得一提的是,SQL Server 2005在OPENROWSET函數中加入了BULK數據列集, 這樣可以直接從文字文件、xml 文件以及圖像等文件中讀取數據。這就意味著可以在一條非常簡單的 INSERT INTO…SELECT 語句中使用OPENROWSET函數將內含大量數據的文件內容存入數據表的對應字段(如簡歷、圖像等)中。OPENROWSET BULK選項自變量可以精確控制數據讀取的開始與結束位置、如何處理錯誤以及數據的解釋,例如將數據文件讀取成 varbinary、varchar 或 nvarchar 類型的字段的數據列集。以下是一個C與SQL Server 2005的的實例,程序給出的是解決這一問題的核心部分。

    Demo2.sqc

    #include

    #include

    EXEC SQL BEGIN DECLARE SECTION;

    char sno[10],sname[10];int ssex;

    EXEC SQL END DECLARE SECTION ;

    EXEC SQL INCLUDE USERCA;

    viod imagetech ()

    { EXEC SQL CONNECT TO Server:mydb USER sa.sa;

    EXEC SQL CREATE TABLE Teacher

    (sno char(9), sname char(20), ssex int,

    resume nvarchar(max),

    //創建可輸入大數據塊文本的簡歷字段

    photo image);

    printf( input sno: ); scanf( %s,sno);

    printf( input sname: ); scanf( %s,sname);

    printf( input?ssex: ); scanf( %d,ssex);

    EXEC SQL INSERT INTO Teacher(sno,sname,ssex,resume,

    photo)

    SELECT :sno, :sname, :ssex,

    WSET(BULK ’C:resume1.txt’, SINGLE_NCLOB),

    OPENROWSET(BULK ’C:photo1.jpg’, SINGLE_BLOB);

    //一種大數據塊及圖像存儲的解決方案

    EXEC SQL COMMIT TRANSACTION;

    EXEC SQL DISCONNECT ALL;

    }

    2.3 預編譯

    C編譯程序不能識別應用程序中的SQL語句,需要經過預處理程序將其轉換成C語句。經過SQL的預編譯之后,原有的SQL會被轉換成一系列函數調用。因此,系統還提供一些列函數庫,以確保能夠把代碼中的函數調用與對應的實現鏈接起來。SQL Server的預處理程序是nsqlprep.exe。通過在操作系統命令窗口運行命令cd c:program filesMicrosoft SQL ServerMSSQLBinn,進入到Binn文件夾,調用預編譯程序nsqlprep.exe程序,執行nsqlprep Demo2,如果成功就會將Demo2.sqc文件預編譯成Demo2.c。接著運行主編譯程序VC++,打開Demo2.c進行編譯,VC++會提示要建立工程,點擊“是”建立工程文件。還需在工程/設置/link中的對象/庫模塊中添加SQLakw32.lib和Caw32.lib才能夠正確鏈接,最后生成目標程序和可執行文件。

    當一個程序既要訪問數據庫,又要處理數據時,把SQL語言嵌入到宿主語言中,將SQL語言訪問數據庫的功能和宿主語言的數據處理功能相結合是解決該問題的有效途徑。作為一種信息表達手段已被人們所熟悉,在數據庫信息管理系統的開發中[5]需要用到圖像等數據時,將有關信息與指定的圖像對應,無疑對圖像數據處理的科研、生產和管理等部門有著重要的實用參考價值。因此,在嵌入式SQL中用數據庫管理系統的預編譯器,無限利用高級語言通過數據庫管理系統的接口存取和檢索數據,來提高對數據庫操作的效率提高。

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

    c語言相關文章:c語言教程



    上一頁 1 2 下一頁

    評論


    相關推薦

    技術專區

    關閉
    主站蜘蛛池模板: 清徐县| 仙桃市| 修武县| 大厂| 岚皋县| 治县。| 云南省| 泽普县| 山阴县| 白沙| 稻城县| 永新县| 沁阳市| 江阴市| 印江| 姜堰市| 印江| 四子王旗| 保德县| 恩施市| 和龙市| 陆川县| 太仓市| 江门市| 百色市| 茶陵县| 中江县| 玉山县| 景德镇市| 彩票| 福海县| 渭源县| 桦甸市| 怀仁县| 旬邑县| 淳化县| 靖宇县| 剑河县| 呈贡县| 攀枝花市| 茌平县|