zoukankan      html  css  js  c++  java
  • C#+SQL Server图片存取

    利用数据库存取图片是数据库应用系统开发时的一项基本功能需求。目前为实现该功能,主要有两种方法。方法①:在数据库中只存放图片路径。方法②:图片转为二进制流保存Image类型的字段里。

    第一种方法固然简单,容易实现,但在实际中也存在一个问题。数据库中存储的是某图片的路径,那么对应的在该路径所对应的文件夹里就应该存放有该图片文件。而我们在使用计算机时,经常有更改文件名、移动、删除文件等操作,那么在系统运行过程中,从数据库中读取图片路径来取出图片时候就会发生错误。第二种方法实现起来相对困难一点,但却很好的避免了上述问题。在操作中选择计算机中任何位置的图片,然后以二进制流的方式存储于数据库中,读取时从数据库中读取对应图片的二进制流,然后转换为图片显示给用户。

    下面给出方法二的实现效果及核心代码。

     
      

    功能实现核心代码如下:

    //存储文件打开对话框中所选取的图片到数据库中

         //存储文件打开对话框中所选取的图片到数据库中
         this.picView.ImageLocation = openFileDlg.FileName;
         using (SqlConnection cn = new SqlConnection(@"Data Source=.\SQLEXPRESS;Initial Catalog=Picture;Integrated Security=True"))
         {
              try
              {
                   strID = Path.GetFileNameWithoutExtension(openFileDlg.FileName);
                   strSql = "INSERT INTO image_table(ID,Pic) VALUES('" + strID + "',@Pic)";
                   using (SqlCommand cmd = new SqlCommand(strSql, cn))
                   {
                        cmd.Parameters.Add("@Pic", SqlDbType.Image).Value = File.ReadAllBytes(this.picView.ImageLocation);
                        cn.Open();
                        cmd.ExecuteNonQuery();
                        cn.Close();
                    }
                }
                catch (SqlException sqle)
                {
                      MessageBox.Show(sqle.Message);
                }
          }

    //从数据库中读取树控件中所选节点所对应的图片显示给用户

        //从数据库中读取树控件中所选节点所对应的图片显示给用户
        using (SqlConnection cn = new SqlConnection(@"Data Source=.\SQLEXPRESS;Initial Catalog=Picture;Integrated Security=True"))
         {
               strSql = "SELECT Pic FROM image_table WHERE ID='" + e.Node.Text + "'";
               using (SqlCommand cmd = new SqlCommand(strSql,cn))
               {
                    cn.Open();
                    this.picView.Image = Image.FromStream(new MemoryStream((byte[])cmd.ExecuteScalar(),false));
                    cn.Close();
                }
         }

    附:数据库中Pictures表的建表T-SQL语句

    USE [Picture]
    GO
    SET ANSI_NULLS ON
    GO
    SET QUOTED_IDENTIFIER ON
    GO
    CREATE TABLE [dbo].[image_table](
     [ID] [nchar](10) COLLATE Chinese_PRC_CI_AS NOT NULL,
     [Pic] [image] NOT NULL,
     CONSTRAINT [PK_image_table] PRIMARY KEY CLUSTERED 
    (
     [ID] ASC
    )WITH (PAD_INDEX  = OFF, IGNORE_DUP_KEY = OFF) ON [PRIMARY]
    ) ON [PRIMARY] TEXTIMAGE_ON [PRIMARY]
  • 相关阅读:
    python全栈开发_day41_数据库5
    python全栈开发_day40_数据库4
    python全栈开发_day39_数据库3
    python全栈开发_day38_数据库2
    python全栈开发_day37_数据库1
    python全栈开发_day36_高并发,协程
    python全栈开发_day35_锁,进程池,线程池
    python全栈开发_day34_线程了解知识点
    python全栈开发_day33_关于进程的了解知识
    python全栈开发_day32_粘包分析,socketserver和多道技术
  • 原文地址:https://www.cnblogs.com/hans_gis/p/1835953.html
Copyright © 2011-2022 走看看