数据库
sql server中的image数据类型的操作 -凯发ag旗舰厅登录网址下载
准备工作,在库im_test中建立一张表im_info,此表中有两个字段,分别为pr_id (int),pr_info (image),用来存储图形编号及图形信息。其语法如下:
create teale im_info (
pr_id int null ,
pr_info image null
)
第一步: 往表中插入一条记录,并初始化pr_info字段。其语法如下:
insert into im_info values (1 ,0xffffffff)
第二步往表中写入图形信息。其语法如下:
declare @@ptrval varbinary(16)
select @@ptrval = textptr(pr_info)
from im_info
where pr_id = 1
writetext im_text.im_info
@@ptrval 0x624fd543fd…..
其中0x624fd543fd….. 为图形的十六进制数据,可以通过c 、java等工具获得。
注意在写入图形信息前必须先将此数据库的 'select into/bulkcopy' 属性设置为 true ,其语法如下:
use master
exec sp_dboption im_test ,'select into/bulkcopy' ,true
c#读取image数据类型:
(1)控制台应用程序下演示插入图片
public void insertimg()
{
//将需要存储的图片读取为数据流
filestream fs = new filestream(@"e:\c.jpg", filemode.open,fileaccess.read);
byte[] btye2 = new byte[fs.length];
fs.read(btye2 , 0, convert.toint32(fs.length));
fs.close();
using (sqlconnection conn = new sqlconnection(sqlconnstr))
{
conn.open();
sqlcommand cmd = new sqlcommand();
cmd.connection = conn;
cmd.commandtext = "insert into t_img(imgfile) values(@imgfile)";
sqlparameter par = new sqlparameter("@imgfile", sqldbtype.image);
par.value = bt;
cmd.parameters.add(par);
int t=(int)(cmd.executenonquery());
if (t > 0)
{
console.writeline("插入成功");
}
conn.close();
}
}
(2)控制台应用程序下读出并生成图片到物理位置
public void read()
{
byte[] mydata = new byte[0];
using (sqlconnection conn = new sqlconnection(sqlconnstr))
{
conn.open();
sqlcommand cmd = new sqlcommand();
cmd.connection = conn;
cmd.commandtext = "select * from t_img";
sqldatareader sdr = cmd.executereader();
sdr.read();
mydata = (byte[])sdr["imgfile"];//读取第一个图片的位流
int arraysize= mydata.getupperbound(0);//获得数据库中存储的位流数组的维度上限,用作读取流的上限
filestream fs = new filestream(@"c:\00.jpg", filemode.openorcreate, fileaccess.write);
fs.write(mydata, 0, arraysize);
fs.close(); //-- 写入到c:\00.jpg。
conn.close();
console.writeline("读取成功");//查看硬盘上的文件
}
}
(3)web下picshow.aspx页将图片读取出来并写入到浏览器上呈现
public void read()
{
byte[] mydata = new byte[0];
using (sqlconnection conn = new sqlconnection(sqlconnstr))
{
conn.open();
sqlcommand cmd = new sqlcommand();
cmd.connection = conn;
cmd.commandtext = "select * from t_img";
sqldatareader sdr = cmd.executereader();
sdr.read();
mydata = (byte[])sdr["imgfile"];
response.contenttype = "image/gif";
response.binarywrite(mydata);
conn.close();
response.write("读取成功");
}
(4)在web中可以如上picshow.aspx页面读取并显示图片,而真正引用该图片时如下示例
(5)winform下将图片写入到sql数据库image类型字段中的方法和以上方法基本一致,仅区别于可以利用多个对话框来帮助选取存储图片等,各个属性可以方便的利用上
(6)winform下读取图片在picturebox控件中显示出来
方法一:利用memorystream 和system.drawing.image
public void read()
{
byte[] mydata = new byte[0];
using (sqlconnection conn = new sqlconnection(sqlconnstr))
{
conn.open();
sqlcommand cmd = new sqlcommand();
cmd.connection = conn;
cmd.commandtext = "select * from t_img";
sqldatareader sdr = cmd.executereader();
sdr.read();
mydata = (byte[])sdr["imgfile"];
memorystream mystream = new memorystream(mydata);
//用指定的数据流来创建一个image图片
system.drawing.image img = system.drawing.image.fromstream(mystream, true);
system.windows.forms.picturebox picbox = new picturebox();
picbox.image = img;
picbox.left = 30;
picbox.top = 80;
picbox.width = 800;
picbox.height = 500;
this.controls.add(picbox);
mystream.close();
conn.close();
}
}
方法二:将流直接读取成图片并写入到物理位置,然后再行利用该图片呈现
void read()
{
using (sqlconnection conn = new sqlconnection(sqlconnstr))
{
conn.open();
sqlcommand cmd = new sqlcommand();
cmd.connection = conn;
cmd.commandtext = "select * from t_img";
sqldatareader sdr = cmd.executereader();
sdr.read();
byte[] image_img = (byte[])sdr["imgfile"];
if (image_img.length == 0)
{
return;
}
int filelength = image_img.length;
string imagename = "1.jpg";
string myurl = environment.currentdirectory "\\" imagename;
filestream fs = new filestream(myurl, filemode.openorcreate,fileaccess.write);
binarywriter bw = new binarywriter(fs);
bw.basestream.write(image_img, 0, filelength);
bw.flush();
bw.close();
system.windows.forms.picturebox picbox = new picturebox();
//为picbox添加图片方法一
//picbox.imagelocation = myurl;
//picbox.width = 800;
//picbox.height = 300;
//为picbox添加图片方法二
bitmap bitmap = new bitmap(myurl);
picbox.width = 100;//bitmap.width;
picbox.height = 80;//bitmap.height;
picbox.image = (image)bitmap;
picbox.sizemode = system.windows.forms.pictureboxsizemode.stretchimage;
picbox.left = 20;
picbox.top = 30;
this.controls.add(picbox);
conn.close();
}
}
总结
以上是凯发ag旗舰厅登录网址下载为你收集整理的sql server中的image数据类型的操作的全部内容,希望文章能够帮你解决所遇到的问题。
如果觉得凯发ag旗舰厅登录网址下载网站内容还不错,欢迎将凯发ag旗舰厅登录网址下载推荐给好友。
- 上一篇:
- 下一篇: