如何通过Goool查找专业文献资料
转自:http://www.readfree.net/html/200512/122142.html
第一讲
推荐先读读google从入门到精通等文章.
我们了解常规搜索方式,但每个人都会搜索出不同结果,为什么?核心问题在于关键词选择不同。
关键的分析必须保证两点:
一是专业性,即这个词是很精的,可能蚧愕乃阉鹘峁蚨噬踔量梢怨忠坏悖×勘苊獯笾诨拇剩鏽et,site等。即使需要大众化词,如password,username,但若加入一两个特征词,则结果将大大简化。
二是具有代表性,也即这个词具有代表意义,也即它在包含你所需网页内,它在出现的可能,以免一些有用信息被遗漏。
如何达到上述两个要求?我们必须分析网页中字词出现的特点,以及本学科专业词汇特征。
大家看看yahoo,google等medicine和science--biology条目下的分类,发现许多相关的词均在内,如
http://libinfo.uark.edu/eresources/eresources.asp医学有关的都在Science & Technology 大条目下,又细分为:
Agriculture & Food | Biology | Botany | Chemistry | Computer Science | Engineering | Environmental Dynamics | Geology | Kinesiology | Mathematics | Medicine | Nursing | Physics | Psychology | Statistics | Zoology。
因此如果仅以medicine检索,就会漏掉不少很有价值的信息,特别是漏掉的专业的。
其次,在medicine下又有很多数据库,如:EBSCO OVID,PROQUEST还有各大出版社自己的万能密码。
第二讲
主要讲定点搜索和遍搜索的区别及应用。
所谓定点搜索,即指定找某个数据库相关信息,或某篇文章。
遍搜索是指在网上任意逛逛,找些pswd,或者无心插柳柳成荫。
(1)定点数据库和期刊搜索。还是同第一讲一样,主要分析关键词的选择。当然关键词之一是这个数据库的名称。大家注意了:数据库名称一定要用全称和简称都试试。
关键词之二是free,ID,password,user name。
为什么这个关键词?其实这些只能称作是一个关键词,因为它们具有同性或不相容性。如elservier数据库,你最好不要用username和password,因为它主要是采用IP限制的。因而你的重点放在pxory!而不是上述的任何一个。而找某一杂志,则多用user name 和ID/password合用(注:ID/password只可用一个!),因为杂志往往个人购买,便拥有帐号了。
关键词三:这些数据库可能出现的地方?大学图书馆最多!即使是杂志,图书馆也较个人帐号多。那么图书馆主页上有哪些关键词?library,database,trial,free....,可看看国内一些图书馆的主页,仔细分析比较,便能找到一些共性的东西。
(2)定点文章搜索。
文章,在国外通用PDF格式,因而文章搜索必须用PDF这个核心内容。即找后缀为PDF的东东,语法:filetype:PDF 这是关键之一
关键词之二:找你所需文章的题或文摘中最怪的词!而不是常用词。(不要用很专业的词往往能找到相近的文章,所谓无心插柳了)
命中率高,但最好是题目中出现的词,为什么?因为往往许多个人站点收录了不少文章,而这些文章往往是以题目名称作为索引的。
第三讲
专业文献搜索技巧
1 查找某本专业刊物的登录密码,如Brain Res
首先选关键词:杂志名(Brain Res),登录(sign in),密码(password)
这样成功率并不高,其实细细看来,不应有登录,因为许多提供密码的地方,并不出现登录这个词,而多出现用户名(user name),而且杂志名多用全称(brain research),再试试!哦,成功了!
2 查找某篇文章的全文,尤其是外文文献,许多全文服务均需收费。
当然可先按第一种方法搜索一下,看看有无密码可寻,若无,则找到该篇文章的特殊字段(key words),然后搜索PDF文件。不过这有几个条件,一是该杂志确已上网,有明确地址,其二,一般需在1997年以后文献才可。
举例:Gattullo D, Pagliaro P, Marsh NA, Losano G。New insights into nitric oxide and coronary circulation.Life Sci 1999;65(21):2167-74。
这篇文章是收费的。采用:inurldf:Gattullo Pagliaro coronary,结果24项,找到其中的第2页,有下面一项Life Sciences [Volume 65, Issue 21, Pages 2167-2268 (1999)]
... 1. New Insights into Nitric Oxide and Coronary Circulation, Pages
2167-2174 D. Gattullo, P. Pagliaro, NA Marsh and G. Losano 2. ...
147.46.94.112/journal/sej/j_l/l339.htm - 14k - 网页快照 - 类似网页
打开网页快照,第一篇即是其目录,下载即可!OK!成功
2 查找专业软件的破解软件或注册码
常规软件的注册码很好找,但专业软件太少,而且注册码也少,破解更少,如何找?
如找origin 6.1版的破解版,或注册码。不管采用网易、搜狐等软件搜索,均找不到该软件。那么只好借用特殊搜索了。
分析:一般有些破解软件的页面一般至少有以下一些信息:软件名称,版本,序列号(serial number, OR sn),破解(crack, OR CRK),提供下载的地方有.ZIP字样(压缩文件为多)。为了方便起见,也防止版本太精确反而不易搜索的特点,在googlek 输入
origin 破解, 哦!OK!成功!如果其它的软件一次搜索的结果太多的话,则考虑加6.1以减小其搜索范围。或搜索结果太少且不是需要的话,将破解换为"注册码"试试,一般效果不错。
3 查找中文文献的免费全文
如我知道重庆维普提供免费全文服务,但目前许多站点都不能用了。另外,还有万方数据库、CNKI也提供,那么我如何查到这些数据库的免费入口呢?
这需要一定的技巧,采用google或百度试试:输入:重庆维普 密码
哦!66项!仔细找一找,必有结果!OK!
第四讲
这一讲讲百度与google比较
搜索英文不必说用google,搜索中文呢?
很多人并不了解它们更新的情况,google发展早,因而它贮存了大量旧的信息,百度发展迟,信息较新。
更新速度:对中文google一般半月至一月一更新,而且仅搜索到三级链接,三级以下便不在搜索,那么我如何看到最新的google搜索的结果呢?这个站点:
http://www3.google.com/,可见google采用不同服务器逐步更新的。百度的更新较快,半月一次,最快一周。那么如何衡梁这半月与一月的差剧与价值?
对于一些试用数据库,有效期短,或象万方等一月一换密码,最好选用百度,现在维普老是打一枪换一个地方,因而也只好用百度了,google往往搜索出来的结果已过期了。而能长期使用的密码或数据库,一般象国外的(国内有没有,我真不知道),最好用google,毕竟技术更老道一些,搜索出的结果更多,更广!
第五讲
关于关键词
关键词组合:
nurse journal password
new medicine password
What's New medicine password
périodiques électroniques password( 注意了,不是英文字母样!)
biomedical library password
LWW Journal Collection password
Bibliotekets databaser password
Kluwer Online password
journalwebsite password
基本路子仍是数据库+password+补充性关键词(或称定向性关键词)
所谓定向性关键词是将你的检索范围定于某一可能的区域,如图书馆、个人站点,以缩小检索范围。如单个杂志,可定位于个人,若是数据库检索,则宜加library,因为个人是不会买数据库的。
同时另一个定向是生物和医学,所用的关键词medicine,biology,biomed.
当然仍可加第三定向关键词,如杂志(journal)、免费(free)、在线(online),但一定要注意第三关键词的特征性不强,要选择使用,不可过用,否则会将一大批可能有用的站点排除掉,切记!
但这主要针对国外的,而国内的一般多在各大学图书馆内,常用密码、免费、杂志、数据库名等搜索,效果较好。
但对于有些杂志,如sciencedirect,Ideallibrary多采用IP验证方式,一般密码并不能用,这时多采用代理服务器方式,因而如何找到有效的代理太重要的。如清华的elsevier便是代理。
第六讲
本讲讲关键词联合使用。
国内图书馆提到数据库往往只提***数据库,而国外图书馆多列出该数据库内各种杂志名,而且多按字母分类。因而为了提高检索的准确率,一般将同一数据库内的杂志的首字母相同的杂志名用两到三个联合搜索,再结合前面讲的加用其它关键词,能有效缩小检索范围,翕中率极高。从这里可以看到,如果透彻分析一些图书馆内主页设计的特征,是搜索的关键。
如检索brain research,可列出brain research bulltin,同时检索,效果要好些。
第七讲
搜索代理服务器技巧:
中文:
代理 维普(或其它数据库名) 数据库,能找到一些,但国内一般真正使用代理的较少。
英文:
proxy 数据库名 IE netscape
效果非常好,但一定要注意,许多地方不仅用代理服务器,而且需密码认证,不可过于乐观!应认真鉴别。
第八讲
找特定文件名的文件,尤其是PDF、ZIP、DOC、TXT、RAR、EXE、RM、Mp3,MOV这些文件名都是大家想找的重点,至于各是什么类型文件,请上网查一下便知道了,这里不多说了。
方法是利用语法filetype:后缀名。
如找PDF文件,在正常关键词后面加filetype:PDF即可,搜索结果全是PDF文件。这是我写的另一篇,可参考:
http://bbs.bioon.com/bbs0/dispbb ... D=839&ID=839&page=1找特定题目的网页语法intitle:网站
查找友情链接:
"link:"(英文单字link后加冒号)用于搜索链接到某个URL地址的网页。可以了解有哪些网页把链接指向您的网页
查找特定站点:
site:www.*.com
如 金庸 古龙 site:sina.com.cn
但不可加入http://或/这类,否则是错的
cache”用来搜索GOOGLE服务器上某页面的缓存,通常用于查找某些已经被删除的死链接网页,相当于使用普通搜索结果页面中的“网页快照”功能。
示例:查找GOOGLE缓存的中文yahoo首页
搜索:“cache:
www.yahoo.com.cn”
info用来显示与某链接相关的一系列搜索,提供cache、link、related和完全包含该链接的网页的功能。
示例:查找和新浪首页相关的一些资讯。
搜索:“info:
www.sina.com.cn”
结果:
www.sina.com.cn的网页信息。
示例:查找美国教育网上的宇宙大爆炸jpg图片
搜索:“BIG BANG filetype:jpg site:edu”
结果:搜索有关 BIG BANG filetype:jpg site:edu 的图片
第九讲
专讲一个特殊语法,很有用。inurl
“inurl”语法返回的网页链接中包含第一个关键字,后面的关键字则出现在链接中或者网页文档中。有很多网站把某一类具有相同属性的资源名称显示在目录名称或者网页名称中,比如“MP3”、“GALLARY”等,于是,就可以用INURL语法找到这些相关资源链接,然后,用第二个关键词确定是否有某项具体资料。INURL语法和基本搜索语法的最大区别在于,前者通常能提供非常精确的专题资料。
示例:查找MIDI曲“沧海一声笑”。
搜索:“inurl:midi 沧海一声笑”
结果:已搜索有关inurl:midi 沧海一声笑的中文(简体)网页。
示例:查找微软网站上关于windows2000的安全课题资料。
搜索:“inurl:security windows2000 site:microsoft.com”
结果:已在microsoft.com内搜索有关inurlecurity windows2000 的网页。
注意:“inurl:”后面不能有空格,GOOGLE也不对URL符号如“/”进行搜索。例如,GOOGLE会把“cgi-bin/phf”中的“/”当成空格处理。
而一般众多密码或数据库往往出现在链接之中,如查Ideallibrary
inurl;ideallibrary proxy passowrd(ID)
“allinurl”语法返回的网页的链接中包含所有作用关键字。这个查询的关键字只集中于网页的链接字符串。
示例:查找可能具有PHF安全漏洞的公司网站。通常这些网站的CGI-BIN目录中含有PHF脚本程序(这个脚本是不安全的),表现在链接中就是“域名/cgi-bin/phf”。
语法:“allinurl:"cgi-bin" phf +com”
搜索:已向英特网搜索allinurl:"cgi-bin" phf +com. 共约有37项查询结果,这是第1-10项 。 搜索用时0.36秒。
第十讲
代理:
国外的数据库,许多需代理,如何搜索到?普通的代理遍地都是,只要用google输入proxy free或代理服务器 免费就能搜索到非常多的代理,但这些代理并不适用于查阅一些著名数据库,好么如何找到?一般有以下几点技巧,我并作简要分析:
由于这些代理必须要出现于大学内。
(1)因而如果采用普通的免费代理,则必须保证这种代理在某个大学,这可通过代理测得,其中无特别的技巧。可见下面一个代理服务器帖子的说明
(2)如果要搜索,则应该将代理服务器限制于大学内,因而其搜索格式应该如下:
proxy 数据库名 site:edu
这是标准格式,搜索的数据库较多,但一定注意并不等于搜索出的代理都有用,有些代理还需密码支持,仔细判定。
其它类似可选关键词也列一些,与上述核心关键词适当组合便可,提高搜索准确率:
Off-Campus:能提高无密码搜索成功率
netscape:能提高准确率
第十一讲
用google查密码。大多数人用google,仍未能对google有深入地了解。往往用google搜索出大量密码,一用才知道都过期了,尤其是中文的密码,现在更新极度频繁,如何能查到最新的密码很重要。在前面几讲我讲过百度的更新较google快,然而百度对链接分析能力较google差,google能分析到下四层链接,而百度可能只能至第三层,而往往密码出现的位置:大学主页--图书馆---电子数据库---某些数据库密码,从这个分析可以看到,许多密码都出现在主页的第四层下面,百度往往搜索不到(当然第三层也有很多,这是百度长处之一)。因而搜索中文密码google仍很重要,那么如何用最新的google?google的中文数据库一月一更新(太慢了,英文的一天一更新),但 google在全球有数千台服务器,它们对各种语种更新的速度是不同的。并且更新方式采用梯度更新,即先更新某些服务器,后来全面更新。因而我们能利用google最新的服务器搜索,而 goole最新服务器的链接在这里:
http://www3.google.com.
<body>
<%
String[] choosedlist = (String[])session.getAttribute("choosedlist");
String curshowType = (String)session.getAttribute("LowORHigh");
String curpicType = (String)session.getAttribute("type");
//System.out.println("Movie" + curshowType + curpicType );
//for(int i = 0; i<choosedlist.length; i++){
//System.out.println(choosedlist[i]);
//}
%>
<APPLET
CODE = "cn.com.ztesoft.Animation.Animation.class"
codebase = "."
WIDTH = 740
HEIGHT = 400
NAME = "TestApplet"
ALIGN = middle
VSPACE = 0
HSPACE = 0>
<%
for (int a=0; a<choosedlist.length; a++)
{%>
<PARAM NAME = "paramA<%=a%>" VALUE = "<%=choosedlist[a]%>">
<%}%>
<PARAM NAME = "ParamNumber" VALUE = "<%=choosedlist.length%>">
<PARAM NAME = "curshowType" VALUE = "<%=curshowType%>">
<PARAM NAME = "curpicType" VALUE = "<%=curpicType%>">
</APPLET>
<a href="gms.jsp">返回</a>
</body>
注: 转载至 JR
原文:
http://groups.yahoo.com/group/straight_talking_java/http://groups.yahoo.com/group/straight_talking_java/messages/24236翻译整理:FooSleeper
最后修改:2004-03-03
译注:本文来自
straight_talking_java@yahoogroups.com讨论组,已经是一年多前的文章。Alan Williamson是Java Developers Journal的编辑,下文来自他在IBM的一个消息来源。SWT和Swing的论争我见过不少,Netbeans和Eclipse的也同样多。译者翻译此文并不是要激起什么争执,也不是支持哪一方(虽然我的确是站在SWT一边的),更不是要攻击Amy。我最重要的理由是,这是一篇有趣的文章。里面有内幕、线人、公司政治、垄断巨头、美女、商界风云……足够拍一出电影。有趣,这就够了。不过此文反映了IBM对Swing的看法和SWT的由来,还是有一点营养的。
From: Alan Williamson <
alan@n-ary.com>
Date: Wed Nov 6, 2002 10:31 am
Reply-To: <
straight_talking_java@yahoogroups.com>
To: <
straight_talking_java@yahoogroups.com>
Subject: SWT ... the scoop?(SWT……内幕?)
好了这就来……阅读……消化……再阅读……再消化……
;-)
--------------------------------
谢谢你的回复。我很乐意给你提供Swing和SWT背后的一些信息,既然你还把我当作你秘密的“IBM内幕线人”。
要想弄清楚为什么一切都被弄得如此混乱,要从几年前只存在AWT的时候说起。SUN当时已经建立了一套基本的可移植控件类,这些类映射到不同操作系统上的原生窗口组件(native widget),显然下一步应该继续增强这套模型,除了初始的CUA 92组件(文字、按钮等等),再继续加上表格、树、记事本、滑块等等……当时的AWT还满是漏洞,远不能称为可靠,还需要SUN的coder们去修补。SUN的developer们如Graham和Otto总是习惯于公开把他们的bug归咎为操作系统的差异,比如“Windows和OS/2的焦点次序不同”或者“在……之间Ctrl-X的行为不一样”,以及其他苍白的托辞,好让批评的火力从SUN太早释出代码这个问题的真相上移开。然后Amy Fowler来到了SUN。不是我大男子主义,Amy是个聪明的美女,大多数呆头呆脑只懂技术的开发人员都要被她捏在手里。
Amy来自一家Smalltalk公司,叫做Objectshare,在那里她负责搞UI类库。跟Java相比Smalltalk的历史有些悲惨,曾几何时有3家庞大的Smalltalk公司——IBM、Parc-Place和Digitalk。在90年代初期3家公司的市场份额大致相等,生活是美好的。Parc-Place采用仿窗口部件(emulated widgets)的设计(即Swing的设计),IBM和Digitalk则采用原生窗口部件(native widgets)。后来IBM压倒了另外两家,因此他们打算合并成一家,假设叫做Parc-Place Digitalk。随后当他们试图将他们的产品融合到一个叫做Jigsaw的计划中时爆发了一场大战,计划由于政治原因失败了(开发人员实际上已经能让它运转起来),就因为原生和仿造两派的死战。Amy赢得了精神上的胜利,不过在IBM我们赢得了他们所有的生意,因为这两家公司在一整年里除了吵架什么都没做。当尘埃落定之后PPD(Parc-Place Digitalk当时已改名为Objectshare,跟Windscale改名为Sellafield的原因相同——让人们淡忘之前发生的灾难)的股票价格从60美元掉到了低于1美元1股。他们因为伪报收入被NASDAQ摘牌,从此消失。此时SUN正走上与PPD类似的技术方向,于是PDD的技术人员都把他们的简历投到了SUN。Amy被雇佣了,她承诺通过轻量级方案解决所有窗口组件的问题,因此说服SUN管理层让她当了GUI开发部门的头头。她是拿着“这里原来的人都搞砸了,我是来解决的”的钥匙进来的。随后Amy雇佣了所有她过去在Parc-Place的旧朋友,让他们来开发Swing。
显然Swing应该做的是仅仅成为一个绘制框架,给那些希望创建地图软件或者绘图软件的人们使用,无论如何,应该围绕AWT类库来建造它,按钮之类的东西仍然交给AWT来管。SUN的人比如Philip和Mark已经让AWT能够处理表格、树和记事本(notebook,?),所以Swing的方向应该说很明显了。但那些毁了PDD的人不干,他们非要把一切都弄成轻量级的。由于SUN管理层的无知,再加上Amy无情的政治手段,造成了我们今天所见的混乱局面。Amy还使SUN相信Swing是作为Mozilla项目的一部分与Netscape联合开发的,事实上这只是她的宣传伎俩。
在IBM,我们从第一天起就憎恶Swing。庞大、满是错误,而且难看至极。原先我们的工具如VisualAge for Java都是用Smalltalk(用的是原生窗口组件)写的,所以当我们将这些工具向Java代码库迁移时,我们需要一套窗口组件。IBM这边的开发人员都是原来搞Smalltalk的那一批人,我们对管理层要求用Swing来构建WebSphere Studio工具都非常不情愿。Swing是个可怕的充满缺陷的怪兽。在WebSphere Studio最初的预览中,当与Microsoft Visual Studio作对比演示的时候,我们所有的客户都讨厌它,就因为它的外观,而不管它的功能有多强。大多数消费者都不会买一辆让人觉得难看的车,哪怕这车有一台出色的引擎。因此我们开始了一个项目,是把我们的Smalltalk原生窗口组件移植到Java上去。这个项目是加拿大的Object Technology International小组做的。这个项目获得了成功,被运用在在我们发布的VisualAge Micro Edition产品中,VisualAge Micro Edition后来成为J2ME开发方面一个非常成功的IDE。但是OTI的人发现,Swing在读取Windows事件方面有极严重的缺陷,我们甚至无法进行SWT(S开始是Simple的缩写,不过后来变成了Standard的缩写)和Swing间的互操作。他们在读事件队列的时候用了一种可能留下内存漏洞的方式,所以我们不得不采用我们自己的查询Windows事件队列的循环,以纠正这个错误。我们试了一次又一次让SUN修复这个错误,但Amy就是听不进去,所以我们才决定SWT和AWT/Swing不能共存。我们甚至在SWT中定义了自己的Point和Rectangle类——整个工具包对AWT或Swing都没有任何依赖。我们把这个工具包放到了Eclipse中,这是一个工具平台,它的总体设计目标就是要战胜Micrsoft和Visual Studio。Eclipse是开源的,所以任何人都可以在上面构建自己的东西,我们已经有像TogetherSoft和Rational这样的公司移植到了上面。我们的竞争者是Microsoft,所以我们所有努力和注意力都是从正面针对Microsoft。
不管怎么说SUN对此非常不满。他们的Netbeans跟Eclipse做的是相同的事,因此他们向IBM高层抱怨。他们认为SWT是要将你绑到Windows上,这纯粹是胡说,因为SWT能通过GTK在Mac/Linux上运行,以及一大堆嵌入式平台。他们拒绝让Eclipse获得Java认证,因为里面有原生代码,所以Eclipse产品必须很小心地使用单词“Java”这个SUN的商标。Eclipse甚至不能把自己称为一个Java IDE,SUN已经威胁过要采取法律行动来制止IBM在任何时候把Eclipse称作一个Java IDE。结果之一就是IBM在Eclipse上创建的GUI设计工具,允许你构建Swing/AWT GUI,却不让你往里面拖放SWT窗口控件。
将SWT从Eclipse中分离出来是完全可能的,只需要把DLL抠出来放到路径中,并使用窗口组件工具包来给你的银行或者保险或者其他什么应用程序开发GUI。再次说明,我们无法更进一步,因为SUN把我们的双手绑上了。虽然作为Eclipse开放源码协议的一部分,CPL允许我们提供这样的解决方案,但SUN已经很清楚地表明他们不希望我们这样做。
对于用户社区来说,无论IBM和SUN的最终动机是什么,我发现有一点总是很有趣:喜爱Swing的人总会说“一旦你花上几年时间去掌握它,你就能正确地使用它”,这基本上是他们在试图证明和维护他们辛苦得来的用途有限的专门技术;而SWT的拥护者们说的是“哇,这真快,这跟原生的一样,还可以用XP皮肤……它还又轻又小”。有一句话是我喜欢的,我们的一个用户说,Swing就像Java决定不通过操作系统来实现原生的IO,而是通过磁头马达API自己来读磁盘的扇区。Swing基本上就是这样的,它拿着个底层的“paint(Graphics)”方法,自己来绘制所有的窗口组件。
--------------------------------
后记:现在的情况已经有所不同,SWT到底还是单独发布了,VE也承诺在1.0版的时候支持SWT的GUI设计。
本文总结如何在.Net Winform和.Net webform(asp.net)中将图片存入sqlserver中并读取显示的方法
1,使用asp.net将图片上传并存入SqlServer中,然后从SqlServer中读取并显示出来
一,上传并存入SqlServer
数据库结构
create table test
{
id identity(1,1),
FImage image
}
相关的存储过程
Create proc UpdateImage
(
@UpdateImage Image
)
As
Insert Into test(FImage) values(@UpdateImage)
GO
在UpPhoto.aspx文件中添加如下:
<input id="UpPhoto" name="UpPhoto" runat="server" type="file">
<asp:Button id="btnAdd" name="btnAdd" runat="server" Text="上传"></asp:Button>
然后在后置代码文件UpPhoto.aspx.cs添加btnAdd按钮的单击事件处理代码:
private void btnAdd_Click(object sender, System.EventArgs e)
{
//获得图象并把图象转换为byte[]
HttpPostedFile upPhoto=UpPhoto.PostedFile;
int upPhotoLength=upPhoto.ContentLength;
byte[] PhotoArray=new Byte[upPhotoLength];
Stream PhotoStream=upPhoto.InputStream;
PhotoStream.Read(PhotoArray,0,upPhotoLength);
//连接数据库
SqlConnection conn=new SqlConnection();
conn.ConnectionString="Data Source=localhost;Database=test;User Id=sa;Pwd=sa";
SqlCommand cmd=new SqlCommand("UpdateImage",conn);
cmd.CommandType=CommandType.StoredProcedure;
cmd.Parameters.Add("@UpdateImage",SqlDbType.Image);
cmd.Parameters["@UpdateImage"].Value=PhotoArray;
//如果你希望不使用存储过程来添加图片把上面四句代码改为:
//string strSql="Insert into test(FImage) values(@FImage)";
//SqlCommand cmd=new SqlCommand(strSql,conn);
//cmd.Parameters.Add("@FImage",SqlDbType.Image);
//cmd.Parameters["@FImage"].Value=PhotoArray;
conn.Open();
cmd.ExecuteNonQuery();
conn.Close();
}
二,从SqlServer中读取并显示出来
在需要显示图片的地方添加如下代码:
<asp:image id="imgPhoto" runat="server" ImageUrl="ShowPhoto.aspx"></asp:image>
ShowPhoto.aspx主体代码:
private void Page_Load(object sender, System.EventArgs e)
{
if(!Page.IsPostBack)
{
SqlConnection conn=new SqlConnection()
conn.ConnectionString="Data Source=localhost;Database=test;User Id=sa;Pwd=sa";
string strSql="select * from test where id=2";//这里假设获取id为2的图片
SqlCommand cmd=new SqlCommand()
reader.Read();
Response.ContentType="application/octet-stream";
Response.BinaryWrite((Byte[])reader["FImage"]);
Response.End();
reader.Close();
}
}
3,在winform中将图片存入sqlserver,并从sqlserver中读取并显示在picturebox中
1,存入sqlserver
数据库结构和使用的存储过过程,同上面的一样
1.1,在窗体中加一个OpenFileDialog控件,命名为ofdSelectPic
1.2,在窗体上添加一个打开文件按钮,添加如下单击事件代码:
Stream ms;
byte[] picbyte;
//ofdSelectPic.ShowDialog();
if (ofdSelectPic.ShowDialog()==DialogResult.OK)
{
if ((ms=ofdSelectPic.OpenFile())!=null)
{
//MessageBox.Show("ok");
picbyte=new byte[ms.Length];
ms.Position=0;
ms.Read(picbyte,0,Convert.ToInt32(ms.Length));
//MessageBox.Show("读取完毕!");
//连接数据库
SqlConnection conn=new SqlConnection();
conn.ConnectionString="Data Source=localhost;Database=test;User Id=sa;Pwd=sa";
SqlCommand cmd=new SqlCommand("UpdateImage",conn);
cmd.CommandType=CommandType.StoredProcedure;
cmd.Parameters.Add("@UpdateImage",SqlDbType.Image);
cmd.Parameters["@UpdateImage"].Value=picbyte;
conn.Open();
cmd.ExecuteNonQuery();
conn.Close();
ms.Close();
}
}
2,读取并显示在picturebox中
2.1 添加一个picturebox,名为ptbShow
2.2 添加一个按钮,添加如下响应事件:
SqlConnection conn=new SqlConnection();
conn.ConnectionString="Data Source=localhost;Database=test;User Id=sa;Pwd=sa";
string strSql="select FImage from test where id=1";
SqlCommand cmd=new SqlCommand(strSql,conn);
conn.Open();
SqlDataReader reader=cmd.ExecuteReader();
reader.Read();
MemoryStream ms=new MemoryStream((byte[])reader["FImage"]);
Image image=Image.FromStream(ms,true);
reader.Close();
conn.Close();
ptbShow.Image=image;
package txtToExcel;
import org.apache.poi.hssf.usermodel.HSSFCellStyle;
import org.apache.poi.hssf.usermodel.HSSFDataFormat;
import org.apache.poi.hssf.usermodel.HSSFFont;
import org.apache.poi.hssf.usermodel.HSSFWorkbook;
import org.apache.poi.hssf.usermodel.HSSFSheet;
import org.apache.poi.hssf.usermodel.HSSFRow;
import org.apache.poi.hssf.usermodel.HSSFCell;
import java.io.BufferedReader;
import java.io.FileNotFoundException;
import java.io.FileOutputStream;
import java.io.FileReader;
import java.io.IOException;
import java.io.InputStreamReader;
import java.net.URL;
import java.util.ArrayList;
/**
* @author lx
*
*/
public class TxtToExecl {
/** Excel 文件要存放的位置,假定在C盘下 */
public static String outputFile = "c:\\11.xls";
private static String[] DataOfLine = null;
private static ArrayList array = new ArrayList();
public static void main(String argv[]) {
try {
String fromPath = "c:/11.txt";// 取得当前目录的路径
FileReader txtReader = new FileReader(fromPath);// 建立FileReader对象,并实例化为txtReader
BufferedReader br = new BufferedReader(txtReader);// 建立BufferedReader对象,并实例化为br
String Line = br.readLine();// 从文件读取一行字符串
// 判断读取到的字符串是否不为空
for (int i = 0; Line != null; i++) {
// System.out.println(Line);//输出从文件中读取的数据
array.add(Line);
Line = br.readLine();// 从文件中继续读取一行数据
}
DataOfLine = new String[array.size()];
// System.out.println(array.size());
array.toArray(DataOfLine);
br.close();// 关闭BufferedReader对象
txtReader.close();// 关闭文件
} catch (FileNotFoundException e1) {
e1.printStackTrace();
} catch (IOException e1) {
e1.printStackTrace();
}
try {
// 创建新的Excel 工作簿
HSSFWorkbook workbook = new HSSFWorkbook();
// 在Excel工作簿中建一工作表,其名为缺省值
// 如要新建一名为"效益指标"的工作表,其语句为:
// HSSFSheet sheet = workbook.createSheet("效益指标");
HSSFSheet sheet = workbook.createSheet("FeeOfTel");
// 创建字体,设置其为红色、粗体
HSSFFont font = workbook.createFont();
font.setColor(HSSFFont.COLOR_NORMAL);
font.setBoldweight(HSSFFont.BOLDWEIGHT_BOLD);
HSSFCellStyle cellStyle = workbook.createCellStyle();
//将字体设置到中间
cellStyle.setFont(font);
cellStyle.setAlignment(HSSFCellStyle.ALIGN_CENTER);
//将文字设置到右边
HSSFCellStyle cellStyle1 = workbook.createCellStyle();
cellStyle1.setAlignment(HSSFCellStyle.ALIGN_RIGHT);
// HSSFDataFormat format = workbook.createDataFormat();
// cellStyle1.setDataFormat(format.getFormat("0.00"));
int NumLine = (array.size() / 13);
System.out.println(NumLine);
// 在索引0的位置创建行(最顶端的行)
HSSFRow row = null;
HSSFCell cell = null;
for (int j = 0; j <= NumLine; j++) {
row = sheet.createRow((short) j);
for (int i = 0; i <= 12 && i + j * 13 < array.size(); i++) {
// 在索引0的位置创建单元格(左上端
cell = row.createCell((short) i);
// 定义单元格为字符串类型
cell.setCellType(HSSFCell.CELL_TYPE_NUMERIC);
cell.setEncoding(HSSFCell.ENCODING_UTF_16);
// cell.setCellType(HSSFCell.CELL_TYPE_STRING);
if (j == 0 || j == NumLine - 1) {
cell.setCellStyle(cellStyle);
cell.setCellValue(DataOfLine[i + j * 13]);
}
else{
cell.setCellStyle(cellStyle1);
cell.setCellValue(DataOfLine[i + j * 13]);
}
// 在单元格中输入一些内容
// System.out.println(DataOfLine[i + j * 13]);
// cell.setCellValue(DataOfLine[i + j * 13]);
}
}
// 新建一输出文件流
FileOutputStream fOut = new FileOutputStream(outputFile);
// 把相应的Excel 工作簿存盘
workbook.write(fOut);
fOut.flush();
// 操作结束,关闭文件
fOut.close();
System.out.println("文件生成...");
} catch (Exception e) {
System.out.println("已运行 TxtToExecl() : " + e);
}
}
}