<meter id="pryje"><nav id="pryje"><delect id="pryje"></delect></nav></meter>
          <label id="pryje"></label>

          新聞中心

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

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

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

          //往表中寫入圖像信息

          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圖像文件轉(zhuǎn)為十六進(jìn)制文件指針

          ……

          EXEC SQL COMMIT ;

          EXEC SQL DISCONNECT ALL;}

          2.2 SQL Server 2005圖像存儲(chǔ)實(shí)現(xiàn)方法[4]

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

          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),

          //創(chuàng)建可輸入大數(shù)據(jù)塊文本的簡(jiǎn)歷字段

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

          //一種大數(shù)據(jù)塊及圖像存儲(chǔ)的解決方案

          EXEC SQL COMMIT TRANSACTION;

          EXEC SQL DISCONNECT ALL;

          }

          2.3 預(yù)編譯

          C編譯程序不能識(shí)別應(yīng)用程序中的SQL語(yǔ)句,需要經(jīng)過(guò)預(yù)處理程序?qū)⑵滢D(zhuǎn)換成C語(yǔ)句。經(jīng)過(guò)SQL的預(yù)編譯之后,原有的SQL會(huì)被轉(zhuǎn)換成一系列函數(shù)調(diào)用。因此,系統(tǒng)還提供一些列函數(shù)庫(kù),以確保能夠把代碼中的函數(shù)調(diào)用與對(duì)應(yīng)的實(shí)現(xiàn)鏈接起來(lái)。SQL Server的預(yù)處理程序是nsqlprep.exe。通過(guò)在操作系統(tǒng)命令窗口運(yùn)行命令cd c:program filesMicrosoft SQL ServerMSSQLBinn,進(jìn)入到Binn文件夾,調(diào)用預(yù)編譯程序nsqlprep.exe程序,執(zhí)行nsqlprep Demo2,如果成功就會(huì)將Demo2.sqc文件預(yù)編譯成Demo2.c。接著運(yùn)行主編譯程序VC++,打開(kāi)Demo2.c進(jìn)行編譯,VC++會(huì)提示要建立工程,點(diǎn)擊“是”建立工程文件。還需在工程/設(shè)置/link中的對(duì)象/庫(kù)模塊中添加SQLakw32.lib和Caw32.lib才能夠正確鏈接,最后生成目標(biāo)程序和可執(zhí)行文件。

          當(dāng)一個(gè)程序既要訪問(wèn)數(shù)據(jù)庫(kù),又要處理數(shù)據(jù)時(shí),把SQL語(yǔ)言嵌入到宿主語(yǔ)言中,將SQL語(yǔ)言訪問(wèn)數(shù)據(jù)庫(kù)的功能和宿主語(yǔ)言的數(shù)據(jù)處理功能相結(jié)合是解決該問(wèn)題的有效途徑。作為一種信息表達(dá)手段已被人們所熟悉,在數(shù)據(jù)庫(kù)信息管理系統(tǒng)的開(kāi)發(fā)中[5]需要用到圖像等數(shù)據(jù)時(shí),將有關(guān)信息與指定的圖像對(duì)應(yīng),無(wú)疑對(duì)圖像數(shù)據(jù)處理的科研、生產(chǎn)和管理等部門有著重要的實(shí)用參考價(jià)值。因此,在嵌入式SQL中用數(shù)據(jù)庫(kù)管理系統(tǒng)的預(yù)編譯器,無(wú)限利用高級(jí)語(yǔ)言通過(guò)數(shù)據(jù)庫(kù)管理系統(tǒng)的接口存取和檢索數(shù)據(jù),來(lái)提高對(duì)數(shù)據(jù)庫(kù)操作的效率提高。

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

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



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

          評(píng)論


          相關(guān)推薦

          技術(shù)專區(qū)

          關(guān)閉
          看屁屁www成人影院,亚洲人妻成人图片,亚洲精品成人午夜在线,日韩在线 欧美成人 (function(){ var bp = document.createElement('script'); var curProtocol = window.location.protocol.split(':')[0]; if (curProtocol === 'https') { bp.src = 'https://zz.bdstatic.com/linksubmit/push.js'; } else { bp.src = 'http://push.zhanzhang.baidu.com/push.js'; } var s = document.getElementsByTagName("script")[0]; s.parentNode.insertBefore(bp, s); })();