Как получить изображение из базы данных в C #? - PullRequest
0 голосов
/ 01 марта 2011

Я не превратил изображение в двоичную форму, но хочу получить данные изображения из базы данных сейчас. Так что вы можете дать такое представление об этом. Я сделал, как показано ниже, чтобы вставить изображение:

FileDialog dialog = new OpenFileDialog();
dialog.InitialDirectory = @":D\";
dialog.Filter = "(*.jpg;*.gif;*.jpeg;*.bmp)| *.jpg; *.gif; *.jpeg; *.bmp";
if (dialog.ShowDialog() == DialogResult.OK)
{
    imagename = dialog.FileName;
    pictureBox1.Image = Image.FromFile(imagename);
}
dialog = null;

Тогда он также сохраняется в базе данных, но теперь я должен получить изображение в следующем виде, как я могу это сделать?

Ответы [ 4 ]

2 голосов
/ 21 марта 2012
protected void butSubmit_Click(object sender, EventArgs e)
{
SqlConnection connection = null;
try
 {
 Byte[] imgByte = null;
   if (FileUpload1.HasFile && FileUpload1.PostedFile != null)
{
 HttpPostedFile File = FileUpload1.PostedFile;
imgByte = new Byte[File.ContentLength];
 File.InputStream.Read(imgByte, 0, File.ContentLength);
 }
 connection = new SqlConnection(ConfigurationManager.ConnectionStrings         
 "ConnectionString"].ConnectionString.ToString());

 connection.Open();
string sql = "INSERT INTO Table1(title,image) VALUES(@theTitle, @theImage) SELECT     
@@IDENTITY";
 SqlCommand cmd = new SqlCommand(sql, connection);
 cmd.Parameters.AddWithValue("@theTitle", txtTitle.Text);
 cmd.Parameters.AddWithValue("@theImage", imgByte);
 int id = Convert.ToInt32(cmd.ExecuteScalar());
 lblStatus.Text = String.Format("ID is {0}", id);

 Image1.ImageUrl = "~/DisplayImg.ashx?id=" + id;
}
{
lblStatus.Text = "There was an error";
}
finally
{
 connection.Close();
}

}

1 голос
/ 20 марта 2012
    int O_id =Convert.ToInt32(textBox2.Text);

            SqlConnection cn = new SqlConnection(strCn);
            SqlCommand cmd = new SqlCommand("INSERT INTO BLOBTest (BLOBData, O_id) VALUES (@BLOBData,'"+O_id+"')", cn);
            String strBLOBFilePath = textBox1.Text;//Modify this path as needed.


            //Read jpg into file stream, and from there into Byte array.
            FileStream fsBLOBFile = new FileStream(strBLOBFilePath, FileMode.Open, FileAccess.Read);
            Byte[] bytBLOBData = new Byte[fsBLOBFile.Length];
            fsBLOBFile.Read(bytBLOBData, 0, bytBLOBData.Length);
            fsBLOBFile.Close();

            //Create parameter for insert command and add to SqlCommand object.
            SqlParameter prm = new SqlParameter("@BLOBData", SqlDbType.VarBinary, bytBLOBData.Length, ParameterDirection.Input, false,
                        0, 0, null, DataRowVersion.Current, bytBLOBData);
            cmd.Parameters.Add(prm);

            //Open connection, execute query, and close connection.
            cn.Open();
            cmd.ExecuteNonQuery();
            MessageBox.Show("Picture has been uploaded");
            cn.Close();
0 голосов
/ 21 марта 2012
using System.Data.SqlClient;


using System.Drawing;

using System.Data;

using System.IO;

using System.Drawing.Imaging;


public void Save_Image(Object sender, EventArgs e)
{

    // Create a byte[] from the input file

    int len = Upload.PostedFile.ContentLength;
    byte[] pic = new byte[len];
    Upload.PostedFile.InputStream.Read (pic, 0, len);

    // Insert the image into the database

    SqlConnection connection = new
 SqlConnection (@"server=abc\.SQLEXPRESS;database=Storage;uid=sa;pwd=sa");

    try
    {
        connection.Open ();
        SqlCommand cmd = new SqlCommand ("insert into Image " 
          + "(Picture) values (@pic)", connection);

        cmd.Parameters.Add ("@pic", pic);
        cmd.ExecuteNonQuery ();

    }
    finally 
    {
        connection.Close ();
    }
}

мы храним только байтовое изображение в имени таблицы «Изображение», которая содержит только один столбец.Хранение байтового изображения в базе данных требует большого размера базы данных для хранения больших изображений, а извлечение конкретного изображения из базы данных с использованием поиска занимает больше времени для обработки. Это приводит к низкой производительности и проблеме хранения.

0 голосов
/ 20 марта 2012

ОК, если вы сохранили изображение в виде поля BLOB в вашей базе данных, следующий код извлекает данные поля BLOB, создает поток памяти и загружает Bitmap из потока памяти:

using (SqlConnection conn = ...)
{
    conn.Open();

    using (SqlCommand cmd = new SqlCommand("SELECT Picture FROM <tableName> WHERE ...", conn)
    using (SqlDataReader reader = cmd.ExecuteReader())
    {
        if (reader.Read())
        {
            byte[] picData= reader["Picture"] as byte[] ?? null;

            if (picData!= null)
            {
                using (MemoryStream ms = new MemoryStream(picData))
                {
                    // Load the image from the memory stream. How you do it depends
                    // on whether you're using Windows Forms or WPF.
                    // For Windows Forms you could write:
                    System.Drawing.Bitmap bmp = new System.Drawing.Bitmap(ms);
                }
            }
        }
    }
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...