欢迎访问 生活随笔!

凯发k8官方网

当前位置: 凯发k8官方网 > 运维知识 > 数据库 >内容正文

数据库

sql server中的image数据类型的操作 -凯发k8官方网

发布时间:2025/1/21 数据库 25 豆豆
凯发k8官方网 收集整理的这篇文章主要介绍了 sql server中的image数据类型的操作 小编觉得挺不错的,现在分享给大家,帮大家做个参考.
原文:sql server中的image数据类型的操作

准备工作,在库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();
               
            }
        }

 


总结

以上是凯发k8官方网为你收集整理的sql server中的image数据类型的操作的全部内容,希望文章能够帮你解决所遇到的问题。

如果觉得凯发k8官方网网站内容还不错,欢迎将凯发k8官方网推荐给好友。

  • 上一篇:
  • 下一篇:
网站地图