Csharp/CSharp Tutorial/ADO.Net/Image Load Save

Материал из .Net Framework эксперт
Перейти к: навигация, поиск

Display image

using System;
using System.Collections.Generic;
using System.ruponentModel;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Windows.Forms;
using System.Data;
using System.Data.SqlClient;
using System.IO;
public class DisplayImages : Form
{
    public DisplayImages()
    {
        InitializeComponent();
        images = new Images();
        if (images.GetRow())
        {
            this.textBox1.Text = images.GetFilename();
            this.pictureBox1.Image = (Image)images.GetImage();
        }
        else
        {
            this.textBox1.Text = "DONE";
            this.pictureBox1.Image = null;
        }
    }
    private void button1_Click(object sender, EventArgs e)
    {
        if (images.GetRow())
        {
            this.textBox1.Text = images.GetFilename();
            this.pictureBox1.Image = (Image)images.GetImage();
        }
        else
        {
            this.textBox1.Text = "DONE";
            this.pictureBox1.Image = null;
        }
    }
    private void InitializeComponent()
    {
        this.button1 = new System.Windows.Forms.Button();
        this.textBox1 = new System.Windows.Forms.TextBox();
        this.pictureBox1 = new System.Windows.Forms.PictureBox();
        ((System.ruponentModel.ISupportInitialize)(this.pictureBox1)).BeginInit();
        this.SuspendLayout();
        // 
        // button1
        // 
        this.button1.Location = new System.Drawing.Point(175, 22);
        this.button1.Name = "button1";
        this.button1.Size = new System.Drawing.Size(75, 23);
        this.button1.TabIndex = 0;
        this.button1.Text = "Show Image";
        this.button1.UseVisualStyleBackColor = true;
        this.button1.Click += new System.EventHandler(this.button1_Click);
        // 
        // textBox1
        // 
        this.textBox1.Location = new System.Drawing.Point(30, 22);
        this.textBox1.Name = "textBox1";
        this.textBox1.Size = new System.Drawing.Size(126, 20);
        this.textBox1.TabIndex = 1;
        // 
        // pictureBox1
        // 
        this.pictureBox1.Location = new System.Drawing.Point(30, 64);
        this.pictureBox1.Name = "pictureBox1";
        this.pictureBox1.Size = new System.Drawing.Size(220, 221);
        this.pictureBox1.TabIndex = 2;
        this.pictureBox1.TabStop = false;
        // 
        // DisplayImages
        // 
        this.AutoScaleDimensions = new System.Drawing.SizeF(6F, 13F);
        this.AutoScaleMode = System.Windows.Forms.AutoScaleMode.Font;
        this.ClientSize = new System.Drawing.Size(292, 297);
        this.Controls.Add(this.pictureBox1);
        this.Controls.Add(this.textBox1);
        this.Controls.Add(this.button1);
        this.Name = "DisplayImages";
        this.Text = "Display Images";
        ((System.ruponentModel.ISupportInitialize)(this.pictureBox1)).EndInit();
        this.ResumeLayout(false);
        this.PerformLayout();
    }
    private System.Windows.Forms.Button button1;
    private System.Windows.Forms.TextBox textBox1;
    private System.Windows.Forms.PictureBox pictureBox1;
    private Images images;

    [STAThread]
    static void Main()
    {
        Application.EnableVisualStyles();
        Application.SetCompatibleTextRenderingDefault(false);
        Application.Run(new DisplayImages());
    }
}
public class Images
{
    string imageFilename = null;
    byte[] imageBytes = null;
    SqlConnection imageConnection = null;
    SqlCommand imageCommand = null;
    SqlDataReader imageReader = null;
    // Constructor
    public Images()
    {
        imageConnection = new SqlConnection(@"data source = .\sqlexpress;integrated security = true;initial catalog = tempdb;");
        imageCommand = new SqlCommand(@"select imagefile,imagedata from imagetable ", imageConnection);
        imageConnection.Open();
        imageReader = imageCommand.ExecuteReader();
    }
    public Bitmap GetImage()
    {
        MemoryStream ms = new MemoryStream(imageBytes);
        Bitmap bmap = new Bitmap(ms);
        return bmap;
    }
    public string GetFilename()
    {
        return imageFilename;
    }
    public bool GetRow()
    {
        if (imageReader.Read())
        {
            imageFilename = (string)imageReader.GetValue(0);
            imageBytes = (byte[])imageReader.GetValue(1);
            return true;
        }
        else
        {
            return false;
        }
    }
    public void EndImages()
    {
        imageReader.Close();
        imageConnection.Close();
    }
}

LoadImages.cs

using System;
using System.Data;
using System.Data.SqlClient;
using System.IO;
    class LoadImages
    {
        static void Main()
        {
            string imageFileLocation ="C:\\";
            string imageFilePrefix = "a";
            int numberImageFiles = 1;
            string imageFileType = ".jpg";
            int maxImageSize = 10000;
            SqlConnection conn = null;
            SqlCommand cmd = null;
            conn = new SqlConnection(@"server = .\sqlexpress;integrated security = true;database = tempdb");
            conn.Open();
            cmd = new SqlCommand();
            cmd.Connection = conn;

            cmd.rumandText = @"create table imagetable(imagefile nvarchar(20),imagedata varbinary(max))";
            cmd.ExecuteNonQuery();
            cmd.rumandText = @"insert into imagetable values (@imagefile, @imagedata)";
            cmd.Parameters.Add("@imagefile", SqlDbType.NVarChar, 20);
            cmd.Parameters.Add("@imagedata", SqlDbType.Image, 1000000);
            cmd.Prepare();
            string imageFileName = null;
            byte[] imageImageData = null;
            imageFileName = imageFilePrefix + imageFileType;
            imageImageData = LoadImageFile(imageFileName, imageFileLocation, maxImageSize);
            cmd.Parameters["@imagefile"].Value = imageFileName;
            cmd.Parameters["@imagedata"].Value = imageImageData;
            
            cmd.rumandText = cmd.rumandText;
            cmd.ExecuteNonQuery();
        }
        static byte[] LoadImageFile(string fileName,string fileLocation,int maxImageSize)
        {
            byte[] imagebytes = null;
            string fullpath = fileLocation + fileName;
            Console.WriteLine("Loading File:");
            Console.WriteLine(fullpath);
            FileStream fs = new FileStream(fullpath, FileMode.Open, FileAccess.Read);
            BinaryReader br = new BinaryReader(fs);
            imagebytes = br.ReadBytes(maxImageSize);
            Console.WriteLine("Imagebytes has length {0} bytes.",imagebytes.GetLength(0));
            return imagebytes;
        }
    }

Load image to database

/*
Quote from

Beginning C# 2005 Databases From Novice to Professional
# Paperback: 528 pages
# Publisher: Apress (December 18, 2006)
# Language: English
# ISBN-10: 159059777X
# ISBN-13: 978-1590597774
*/

using System;
using System.Data;
using System.Data.SqlClient;
using System.IO;
namespace LoadImages
{
   class LoadImages
   {
      string imageFileLocation =@"Images\";
      string imageFilePrefix = "milk";
      int numberImageFiles = 8;
      string imageFileType = ".gif";
      int maxImageSize = 10000;
      SqlConnection conn = null;
      SqlCommand cmd = null;
      static void Main()
      {
         LoadImages loader = new LoadImages();
         try
         {
            // Open connection
            loader.OpenConnection();
            // Create command
            loader.CreateCommand();
            // Create table
            loader.CreateImageTable();
            // Prepare insert
            loader.PrepareInsertImages();
            // Insert images
            int i;
            for (i = 1; i <= loader.numberImageFiles; i++)   
            {
               loader.ExecuteInsertImages(i);
            }
         }
         catch (SqlException ex)
         {
            Console.WriteLine(ex.ToString());
         }
         finally
         {
            loader.CloseConnection();
         }
      }
      void OpenConnection()
      {
         // Create connection
         conn = new SqlConnection(@"server = .\sqlexpress;integrated security = true;database = tempdb");
         // Open connection
         conn.Open();
      }
      void CloseConnection()
      {
         conn.Close();
         Console.WriteLine("Connection Closed."); 
      }
      void CreateCommand()
      {
         cmd = new SqlCommand();
         cmd.Connection = conn;
      }
      void ExecuteCommand(string cmdText)
      {
         int cmdResult;
         cmd.rumandText = cmdText;
         Console.WriteLine("Executing command:");
         Console.WriteLine(cmd.rumandText);
         cmdResult = cmd.ExecuteNonQuery();
         Console.WriteLine("ExecuteNonQuery returns {0}.", cmdResult); 
      }
      void CreateImageTable()
      {
         ExecuteCommand(@"create table imagetable(
               imagefile nvarchar(20),
               imagedata varbinary(max))");
      }
      void PrepareInsertImages()
      {
         cmd.rumandText = @"insert into imagetable values (@imagefile, @imagedata)";
         cmd.Parameters.Add("@imagefile", SqlDbType.NVarChar, 20);
         cmd.Parameters.Add("@imagedata", SqlDbType.Image, 1000000);
         cmd.Prepare();
      }
      void ExecuteInsertImages(int imageFileNumber)
      {
         string imageFileName = null;
         byte[] imageImageData = null;
         imageFileName =imageFilePrefix + imageFileNumber.ToString() + imageFileType; 
         imageImageData =LoadImageFile(imageFileName, imageFileLocation, maxImageSize);
         cmd.Parameters["@imagefile"].Value = imageFileName;
         cmd.Parameters["@imagedata"].Value = imageImageData;
         ExecuteCommand(cmd.rumandText);
      }
      byte[] LoadImageFile(string fileName,string fileLocation,int maxImageSize)
      {
         byte[] imagebytes = null; 
         string fullpath = fileLocation + fileName;
         Console.WriteLine("Loading File:");
         Console.WriteLine(fullpath);
         FileStream fs = new FileStream(fullpath, FileMode.Open, FileAccess.Read);
         BinaryReader br = new BinaryReader(fs);
         imagebytes = br.ReadBytes(maxImageSize);
         Console.WriteLine("Imagebytes has length {0} bytes.",imagebytes.GetLength(0));
         return imagebytes;
      }
   }
}

Read Bitmap from database

using System;
using System.Data;
using System.Data.SqlClient;
using System.Drawing;
using System.IO;
public class MainClass
{
   public static void Main()
   {
      SqlConnection  imageConnection = new SqlConnection(@"data source = .\sqlexpress;integrated security = true;initial catalog = tempdb;");
      SqlCommand imageCommand = new SqlCommand(@"select imagefile,imagedata from imagetable ",imageConnection);
      imageConnection.Open();
      SqlDataReader imageReader = imageCommand.ExecuteReader();
      string imageFilename = (string) imageReader.GetValue(0);
      byte[] imageBytes = (byte[]) imageReader.GetValue(1);
      MemoryStream ms = new MemoryStream(imageBytes);
      Bitmap bmap = new Bitmap(ms);
      imageReader.Close();
      imageConnection.Close();
   }
}

Writes binary data to a file

using System;
using System.Data.SqlClient;
using System.Data;
using System.IO;
public class ConnectionTest
{
    private static string connectionString = "Data Source=localhost;Initial Catalog=pubs;Integrated Security=SSPI";
    private static string SQL = "SELECT pub_id, logo FROM pub_info";
    public static void Main() 
    {
        int bufferSize = 100;                  
        byte[] bytes = new byte[bufferSize];
        long bytesRead;
        long readFrom;
        SqlConnection con = new SqlConnection(connectionString);
        SqlCommand cmd = new SqlCommand(SQL, con);
        con.Open();
        SqlDataReader r = cmd.ExecuteReader(CommandBehavior.SequentialAccess);
        while (r.Read())
        {
            string filename = "logo.bmp";
            FileStream fs = new FileStream(filename, FileMode.OpenOrCreate, FileAccess.Write);
            BinaryWriter bw = new BinaryWriter(fs);
            readFrom = 0;
            do {
                bytesRead = r.GetBytes(1, readFrom, bytes, 0, bufferSize);
                bw.Write(bytes);
                bw.Flush();
                readFrom += bufferSize;
            } while (bytesRead == bufferSize);
            bw.Flush();
            bw.Close();
            fs.Close();
        }
        r.Close();
        con.Close();
    }
}