C# 读写SQL数据库Image字段2009-01-31 19:27    在用C#对数据库Image字段读写过程中,遇到了一些问题,在网上搜索发现此类问题比较多,但是很少提供比较全面的答案,在此我从对Image字段读写文件和读写图片两个方面谈谈我的认识.

在讲主题之前,我应该阐明一点,数据库的Image字段保存的是字节,所以写入数据库Image字段和从数据库Image字段读取的内容都应该为字节.

1、数据库Image字段读写文件

写文件:写文件的过程为将文件以流文件形式打开并将内容读取到一个byte数组,然后将此byte数组写入数据库的Image字段。

源码:
     FileInfo finfo=new FileInfo("文件名");   //绝对路径
     if(finfo.Exists)
     {
         SqlConnection conn=new SqlConnection("连接字符串");
         SqlCommand InsertCommand=new SqlCommand();
         InsertCommand.Connection=conn;
         InsertCommand.CommandText="Insert into 表名(Image字段名) values(@Content)";
         InsertCommand.Parameters.Add("@Content",SqlDbType.Image,(int)finfo.Length,"Image字段名");   //注意,此处参数Size为写入的字节数
         //读取文件内容,写入byte数组
         byte[] content=new byte[finfo.Length];
         FileStream stream=finfo.OpenRead();
         stream.Read(content,0,content.Length);
         stream.Close();
         InsertCommand.Parameters["@Content"].Value=content;   //为参数赋值
         try
         {
             conn.Open();
             InsertCommand.ExcuteNonQuery();
         }
         finally
         {
             conn.Close();
         }
     }
   
     读文件:读文件的过程为从数据库的Image字段读取内容保存到byte数组,然后将此byte数组以文件流形式写入文件。
   
     源码:
     byte[] content;
     SqlConnetion conn=new SqlConnection("连接字符串");
     SqlDataAdapter da=new SqlDataAdapter("Select Image字段名 from 表名",conn);
     DataSet ds=new DataSet();
     da.Fill(da,"word");
     DataRow dr=ds.Tables["word"].Rows[0];     //将读取的第一行内容保存到dr
   
     content=(byte[])dr["Image字段名"];
     int ArraySize=content.GetUpperBound(0);
     FileStream stream=new FileStream("文件名",FileMode.OpenOrCreate,FileAccess.Write);
     stream.Write(content,0,ArraySize);
     stream.Close();
   
    2、数据库Image字段读写图片

绑定到控件的方式:
     通 过将Image字段绑定到PictureBox实现。文件中我提供了一个实例,要正常运行需要在Northwind中添加数据库表Employees,数 据库表的结构为EmployeeID Int(4) 自动增 长,FirstName nvarchar(10),LastName nvarchar(20),Photo image(16) null。

直接用SqlCommand实现:
     其 实把握住Image字段存的是byte类型数据,用SqlCommand实现添加、修改就很简单了,跟文本的区别就是在读出的时候需要将byte类型数据 转化为Image图片,在写入时需要将Image图片以流的形式转为为byte数组,然后再将byte数组保存到Image字段。
     实例:
            comm = "Insert into MyEmployees(FirstName,LastName,Photo) values(@FName,@LName,@Photo)";
            SqlCommand command=new SqlCommand(comm);
            command.Connection = conn;
            //创建Parameter
            command.Parameters.Add("@FName",SqlDbType.NVarChar);
            command.Parameters[0].Value = textBox1.Text;
            command.Parameters.Add("@LName", SqlDbType.NVarChar);
            command.Parameters[1].Value = textBox2.Text;
            command.Parameters.Add("@Photo",SqlDbType.Image);
            command.Parameters[2].Value = imgByte;
     其中imgByte为Byte数组,通过FileStream的Read填充的byte数据。

DataRow dr = dt.Tables[0].Rows[0];
                byte[] br = null;
                MemoryStream ms = new MemoryStream();
                if (dr["image1"].ToString() != "")
                {
                    br = (byte[])dr["image1"];
                    ms = new MemoryStream(br, 0, br.Length);
                    this.pictureBox1.SizeMode = PictureBoxSizeMode.StretchImage;
                    this.pictureBox1.Image = Image.FromStream(ms);
                    ms.Close();
                }
                else
                {
                    this.pictureBox1.Image = null;
                }

转载于:https://www.cnblogs.com/lhuser/articles/1768343.html

读写SQL数据库Image字段相关推荐

  1. SQL数据库对字段的操作(alter table)

    目录: 1.数据库的连接.创建 2.对字段的操作:(alter table) 3.对数据的操作(插入.修改.删除) 4.数据库的查询操作大全(select) 5.多表查询(join on) 6.约束操 ...

  2. wincc连接mysql数据库案例_WINCC读写SQL数据库的例子-工业支持中心-西门子中国

    本回答有11位钻石用户推荐 回答者: zhangli0 - 超级顾问&nbsp&nbsp第15级 2019-07-25 16:40:06 ''当前为按钮触发, ''创建一张当前日期命名 ...

  3. SQL数据库字段数据类型说明

    SQL数据库常用字段数据类型说明 这里先总结数据类型.MySQL中的数据类型大的方面来分,可以分为:日期和时间.数值,以及字符串.下面就分开来进行总结. 日期和时间数据类型 MySQL数据类型 含义 ...

  4. Thinkphp使用原生sql语句添加字段

    thinkphp 执行原生sql数据库添加字段 /* * 添加字段 * table 表名 * info 字段信息数组 array * return 字段信息 array */ function add ...

  5. sql 获取数据库字段信息_使用DBATools获取SQL数据库详细信息

    sql 获取数据库字段信息 In the series of articles on DBATools, (see TOC at the bottom) we are exploring useful ...

  6. 一个可以编辑sqlite数据库的 数据库编辑小工具 sqlite数据库 替换字段,sql替换数据库中某个字段的所有值

    一个可以编辑sqlite数据库的 数据库编辑小工具,由于showdoc是不支持mysql数据库的,而我们需要去修改部分数据的时候需要用到sqlite数据库工具,因此这里推荐这个轻量工具: DB.Bro ...

  7. 如何使用SQL批量替换数据库特定字段中部分特定数据

    1.替换数据库特定字段中部分特定数据的SQL语句 SQL语句:update 表名 set 字段名= replace(字段名,'原字符串',需要替换成的字符串') 以将表exam_major中的字段po ...

  8. 将sql数据库字段中的NULL都替换为空

    NULL与空字符串 '' 是相同的????? 在MySQL中,这两者是完全不同的.NULL是指没有值,而"则表示值是存在的,只不过是个空值.(在Oracle中是相同的) 将sql数据库字段中 ...

  9. [转]SQL数据库查询到的汉字字段是乱码

    使用英文版SQL数据库查询到的汉字字段是乱码的解决方案 2007-12-04 14:55:45 标签: 函数  SQL  数据库  乱码  排序规则 原创作品,允许转载,转载时请务必以超链接形式标明文 ...

  10. sql数据库表添加、删除字段

    向sql数据库表中添加字段 增加字段: alter table [表名] add 字段名 smallint default 0 增加数字字段,整型,缺省值为0  alter table [表名] ad ...

最新文章

  1. Command模式的实践
  2. good way for university professors accumulating the citation
  3. 一份C++学习资源整理,咬牙切齿地好用。
  4. SpringMVC中获得HttpRequest对象的方法
  5. 终极解码播放mkv声音小的解决
  6. 4.7_singleton_创建型模式:单例模式
  7. 虚拟机危险!一个存在11年的缓冲区溢出漏洞--毒液
  8. bootstrap创建响应式网站
  9. OPENCV C++ 找到最大内接矩形(正方形)
  10. c语言编译bss和data,认识bss段和data段
  11. CH340G的RTS#和DTR#引脚输出
  12. 网站排名下降怎么恢复(网站降权的原因如何知道)
  13. 常见的数据结构面试题
  14. qq登录测试用例(功能性测试、登录界面、性能、安全性、可用性、兼容性)
  15. Facebook的预填问题默认可以设定哪些类型。
  16. decompose transformation matrix
  17. “工作十年还买不起一个厕所”:底层打工人的命运,该何去何从?
  18. 通往当上CEO迎娶白富美的成功之路,送给你的读书清单《领导阶梯》
  19. 计算双目视差的方法汇总及效果分析
  20. msm8953 + android7.1.2知识总结

热门文章

  1. 《python 编程从入门到实践》变量
  2. 1、win10下的Docker+Redis 的下载及简单使用
  3. ural 1112,LIS
  4. sudo chown -R nobody:nogroup clear
  5. Lync Server 2010企业版系列PART7:部署前端
  6. 一个比较完整的pytorch项目
  7. jdk Queue抽象接口
  8. Mysql优化(出自官方文档) - 第三篇
  9. LIS和LCS LCIS
  10. 关于Eclipse无法导入包的问题???