睡眠障碍挂什么科| 10月16日出生的是什么星座| 手上长小水泡是什么原因| 推杯换盏什么意思| 有容乃大是什么意思| 35属什么生肖| 芝麻吃多了有什么坏处| vocabulary是什么意思| 跑步腰疼是什么原因| 鱼头和什么搭配煲汤好| 下午4点到5点是什么时辰| 火加田读什么| 9999是什么意思| 老年人吃什么钙片好| 手脚发烫是什么原因造成的| 武则天什么朝代| 2009年是什么生肖年| 长沙有什么特产| 甘草长什么样| 支气管炎吃什么好| 结石有什么症状| 地球绕着什么转| 小孩咳嗽吃什么药好| 河南的特产是什么| 流产后吃什么食物| 酥油是什么| 开救护车需要什么驾照| 骨膜炎用什么药| 吃什么可以生发| 一面之词是什么意思| 住院送什么花好| 减肥期间晚上可以吃什么| 胆切除后吃什么好| 干燥综合症是什么病| 窈窕淑女是什么意思| 黄瓜有什么营养| 肆无忌惮的意思是什么| 云南白药气雾剂保险液有什么作用| 为什么会得肺结核| mcv偏低是什么意思| 潜血阳性是什么意思| 男人为什么会得前列腺炎| 潭柘寺求什么最灵验| 豚鼠吃什么| 梦见离家出走是什么意思| 金乐什么字| 没有子宫会有什么影响| 大便红褐色是什么原因| 和田玉对身体有什么好处| 抑制素b检测是什么意思| 月经量多吃什么药调理| 跳梁小丑是什么生肖| 奶嚼口是什么| 血压低有什么症状表现| 什么的鸟儿| 神疲乏力是什么症状| 13太保是什么意思| 加拿大现在是什么时间| 加持是什么意思| 悠悠岁月什么意思| 苯佐卡因是什么| 梦见吃饭是什么意思| 癌抗原125是什么意思| 爽字代表什么生肖| 爱长闭口用什么护肤品| 吃什么肝脏排毒| 夏枯草有什么作用| 排卵试纸什么时候测最准| 湿气是什么原因引起的| 十一月三号是什么星座| 颈椎反弓有什么症状| silk是什么意思| 呀啦嗦是什么意思| 胆汁有什么作用| 笃定什么意思| 为什么眼皮会一直跳| 送女生什么生日礼物比较好| 蓝牙耳机什么牌子好| 0型血和b型血生的孩子是什么血型| 甲状腺肿大挂什么科| 宫缩是什么感觉| 什么的珍珠| 文理分科什么时候开始| 眼发花是什么病的征兆| 脑梗前期有什么症状| 一个月一个泉是什么字| 胎盘位于前壁是什么意思| 血脂高胆固醇高吃什么食物最好| 感冒了挂什么科| 吃白萝卜有什么好处| 什么是骨癌| 李子不能和什么一起吃| 荨麻疹可以涂什么药膏| 转述句是什么意思| 二十年是什么婚| 白子画什么时候爱上花千骨的| 查幽门螺杆菌挂什么科| 来月经可以吃什么水果| 卵巢筛查要做什么检查| 肚脐眼右边是什么器官| 九一年属什么生肖| 双子座女和什么座最配| 半斤八两什么意思| 窝沟封闭什么意思| 肛门瘙痒用什么药好| 曲安奈德是什么药| 海参是补什么| 妄想症有什么症状| 无用功是什么意思| 移花接木的意思是什么| 养肝护肝吃什么药效果最好| 炖牛肉放什么料| 什么是官方旗舰店| bf什么意思| 鼠的本命佛是什么佛| 不是你撞的为什么要扶| 四个火念什么| 做梦买鞋是什么意思| 小孩积食发烧吃什么药| 血常规查的是什么项目| 蚯蚓吃什么食物| 工匠精神的核心是什么| 办理护照需要什么资料| 葡萄胎是什么原因造成的| 持续发烧不退是什么原因| 肚脐眼发炎是什么原因| 再生障碍性贫血是什么病| 榴莲壳可以做什么| 体内湿气重用什么药| 腔隙脑梗吃什么药最好| 荆芥的别名叫什么| 欣赏一个人是什么意思| 支气管炎哮喘吃什么药| 维生素c什么时候吃效果最好| 喝枸杞有什么好处| 韶关有什么特产| 高硼硅玻璃是什么材质| 什么属相不能挂山水画| 藏风聚气是什么意思| 生命之水是什么| 六月十九是什么星座| 张钧甯为什么读mi| dha什么牌子最好最安全| 鲱鱼罐头那么臭为什么还有人吃| 山竹不能和什么一起吃| 孕妇吃花生对胎儿有什么好处| 龙利鱼是什么鱼| 亚米是什么意思| 什么动物捉害虫| 蓝色妖姬的花语是什么| 何德何能是什么意思| 米醋和白醋有什么区别| 心电轴不偏是什么意思| 孔雀开屏是什么意思| 鳕鱼是什么鱼| 女生适合做什么工作| 梦见猫咪会有什么预兆| 日光性皮炎用什么药| 脚后跟痒是什么原因| 头部mra是什么检查| 洛神花是什么| 鹿茸是什么| 血糖高的人吃什么水果| chevy是什么车| 左什么右什么| 精满自溢是什么意思| 右眼睛跳是什么原因| 肝内脂质沉积是什么意思| 应届是什么意思| 土的行业有什么工作| 空姐在飞机上干什么| 舒张压是什么| 机车是什么意思| 谷维素片治什么病| 告状是什么意思| 屋上土是什么意思| 兔和什么生肖最配| 出来混迟早要还的什么意思| 1212是什么星座| 支气管炎吃什么| 鸳鸯是什么意思| 睾丸炎吃什么药最有效| 嗓子疼吃什么药好| 皮肤过敏用什么药| 特别能睡觉是什么原因引起的| 蟑螂讨厌什么味道| 皮卡丘什么意思| 吃牛肉对身体有什么好处| 甲胎蛋白是什么指标| 检查是否怀孕挂什么科| 军级相当于什么级别| 商业保险报销需要什么材料| 白细胞低吃什么补得快| 热痱子用什么药| 仕女图是什么意思| 梦见弟弟是什么意思| 高处不胜寒是什么意思| 吕布的武器叫什么| 什么是虚无主义| 山楂泡酒有什么功效| 内分泌失调吃什么| 指腹为婚是什么意思| 怀孕三个月吃什么对胎儿好| 菠萝蜜的核有什么功效| 九个月的宝宝吃什么辅食食谱| 隔天是什么意思| 腋下痛是什么病| 梦代表什么生肖| 21三体综合征是指什么| 医保定点医院是什么意思| id医学上是什么意思| 什么高什么长| 嬴稷是秦始皇的什么人| 贵族是什么意思啊| 物业费都包括什么服务| 胃寒吃什么药好| 怎么判断脸上是什么斑| 韭菜吃多了有什么坏处| 胃经当令是什么时辰| sp是什么意思| cr是什么| 梦见和别人结婚是什么意思| 男性生殖痒是什么原因| 孩子多动缺什么| 白细胞一个加号什么意思| 乳头长什么样| 尿检肌酐高是什么原因| 慎独什么意思| bape是什么品牌| 姓郑的男孩取什么名字好| 血脂高可以吃什么水果| 甘油三酯偏高说明什么| 藿香正气水有什么功效| 什么叫物理| 跖疣念什么字| 驴打滚是什么| 障碍性贫血是什么病| 六月十六是什么星座| 农历六月十五是什么星座| IA是什么| 什么油炒菜好吃又健康| 眼皮发肿是什么原因| 胖大海是什么东西| 总流口水是什么原因| 肠胃炎吃什么消炎药| 什么是组织| 茵芙莎属于什么档次| 做梦梦到狗是什么征兆| 乳腺一类是什么意思| 宫腔内囊性结构是什么意思| 一什么无什么| 爱马仕是什么意思| 10属什么| 泛指是什么意思| 西米露是什么材料做的| 咽炎要注意什么饮食| 宫腔镜是什么检查| 月经什么颜色的血是正常的| 软笔书法是什么| 子宫大是什么原因| 法图麦是什么意思| 用什么泡脚可以脸上祛斑| 乘务员是干什么的| 婴儿泡奶粉用什么水好| 百度
工业控制 | 能源技术 | 汽车电子 | 通信网络 | 安防监控 | 智能电网 | 移动手持 | 无线技术 | 家用电器 | 数字广播 | 消费电子 | 应用软件 | 其他方案

电路设计->综合电路图->嵌入式系统电路图->C语言与嵌入式SQL混合编程及图像处理技术

分享单车有效弥补公租自行车短板

发布人:angelazhang 时间:2025-08-04 收藏
百度 为保障北京市房地产调控工作的顺利进行,中信银行调整了相关业务的审批政策,确保信贷资金真实用于个人客户的企业经营和生活消费,落实差别化住房信贷政策。

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语句中的数据定义、数据操纵和数据控制任务,说明性语句用于声明通信区和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 <stdio.h>       
     #include <stdlib.h>         
     #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<Len;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)
                                   //往表中写入图像信息
    EXEC SQL DECLARE @@tmp_data varbinary(16)
     EXEC SQL SELECT @@tmp_data = TEXTPTR(photo)
         FROM teacher WHERE sno= '1001 '
     EXEC SQL 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 <stdio.h>       
     #include <stdlib.h>
       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 files\Microsoft SQL Server\MSSQL\Binn,进入到Binn文件夹,调用预编译程序nsqlprep.exe程序,执行nsqlprep Demo2,如果成功就会将Demo2.sqc文件预编译成Demo2.c。接着运行主语言编译程序VC++,打开Demo2.c进行编译,VC++会提示要建立工程,点击“是”建立工程文件。还需在工程/设置/link中的对象/库模块中添加SQLakw32.lib和Caw32.lib才能够正确链接,最后生成目标程序和可执行文件。



当一个程序既要访问数据库,又要处理数据时,把SQL语言嵌入到宿主语言中,将SQL语言访问数据库的功能和宿主语言的数据处理功能相结合是解决该问题的有效途径。图像处理作为一种信息表达手段已被人们所熟悉,在数据库信息管理系统的开发中[5]需要用到图像等数据时,将有关信息与指定的图像对应,无疑对图像数据处理的科研、生产和管理等部门有着重要的实用参考价值。因此,在嵌入式SQL中用数据库管理系统的预编译器技术,无限利用高级语言通过数据库管理系统的接口存取和检索数据,来提高对数据库操作的效率提高。



评论

技术专区

清炖鸡放什么调料 牛油果不能和什么一起吃 什么加什么等于红色 槟榔长什么样子 户籍所在地是指什么
甲状腺需要做什么检查 苍苍什么 牙周炎是什么症状 嘴唇上起泡是什么原因 老年人嘴唇发紫是什么原因
什么书在书店买不到 2019什么年 心脏杂音是什么意思 患难见真情是什么意思 女流之辈是什么意思
魔芋是什么做的 嘻哈是什么意思 肠胃性感冒吃什么药 蒙脱石散不能和什么药一起吃 暑湿感冒吃什么药
2023年五行属什么zhongyiyatai.com 结节低回声是什么意思hcv8jop0ns0r.cn 白带正常是什么颜色hcv9jop6ns0r.cn 生意兴隆是什么生肖hkuteam.com 土字旁的字与什么有关hcv9jop2ns7r.cn
伤口消毒用什么好hcv8jop6ns8r.cn 李知恩为什么叫iuhcv8jop5ns2r.cn 头发不干就睡觉有什么危害hcv8jop8ns1r.cn 做糖耐前一天需要注意什么hcv8jop5ns3r.cn 打喷嚏是什么原因引起的adwl56.com
经常早上肚子疼是什么原因hcv8jop1ns1r.cn 1984年什么命hcv8jop7ns0r.cn 做美甲师容易得什么病hcv9jop3ns7r.cn 小孩咳嗽有痰吃什么药hcv9jop2ns0r.cn 全身无力吃什么药hcv9jop0ns1r.cn
湖南简称什么hcv7jop7ns0r.cn 惊蛰后是什么节气bjcbxg.com 头上出汗是什么原因hcv9jop5ns7r.cn 前列腺吃什么食物调理hcv9jop8ns0r.cn 硅油是什么hcv7jop6ns3r.cn
百度