Mysql
 sql >> Baza danych >  >> RDS >> Mysql

Załaduj obraz do C#, a następnie wstaw go do tabeli MySQL

Zaproponuję dwa rozwiązania. Pierwszym rozwiązaniem jest przechowywanie surowego obrazu w bajtach bezpośrednio w bazie danych. Drugim rozwiązaniem jest to, co osobiście polecam - zamiast tego użyj ścieżki pliku obrazu w bazie danych.

Oto fragment artykułu który przedstawia kilka doskonałych punktów dotyczących tego, czy należy BLOB, czy nie.

Oto, w jaki sposób możesz wybrać plik obrazu:

using (var openFileDialog = new OpenFileDialog())
{
   openFileDialog.Title = "Choose Image File";
   openFileDialog.InitialDirectory =
                Environment.GetFolderPath(Environment.SpecialFolder.MyPictures);
   openFileDialog.Filter = "Image Files (*.bmp, *.jpg)|*.bmp;*.jpg";
   openFileDialog.Multiselect = false;
   if (openFileDialog.ShowDialog() == DialogResult.OK)
   {
       pictureBox1.Image = new Bitmap(openFileDialog.FileName);
   }
   // store file path in some field or textbox...
   textBox1.Text = openFileDialog.FileName;
}

Rozwiązanie 1:podejście BLOB

// Write to database like this - image is LONGBLOB type
string sql = "INSERT INTO imagetable (image) VALUES (@file)";
// remember 'using' statements to efficiently release unmanaged resources
using (var conn = new MySqlConnection(cs))
{
    conn.Open();
    using (var cmd = new MySqlCommand(sql, conn))
    {
        // parameterize query to safeguard against sql injection attacks, etc. 
        cmd.Parameters.AddWithValue("@file", File.ReadAllBytes(textBox1.Text));
        cmd.ExecuteNonQuery();
    }
}

// read image from database like this
string sql = "SELECT image FROM imagetable WHERE ID = @ID";
using (var conn = new MySqlConnection(cs))
{
   conn.Open();
   using (var cmd = new MySqlCommand(sql, conn))
   {
      cmd.Parameters.AddWithValue("@ID", myInt);
      byte[] bytes = (byte[])cmd.ExecuteScalar();   
      using (var byteStream = new MemoryStream(bytes))
      {
         pictureBox1.Image = new Bitmap(byteStream);
      }
   }
}

Rozwiązanie 2:Przechowywanie ścieżki pliku w systemie plików

// Some file movement to the desired project folder
string fileName = Path.GetFileName(this.textBox1.Text);
string projectFilePath = Path.Combine(projectDir, fileName);
File.Copy(this.textBox1.Text, projectFilePath);

// Write to database like this - imagepath is VARCHAR type
string sql = "INSERT INTO imagepathtable (imagepath) VALUES (@filepath)";
using (var conn = new MySqlConnection(cs))
{
    conn.Open();
    using (var cmd = new MySqlCommand(sql, conn))
    {
        cmd.Parameters.AddWithValue("@filepath", projectFilePath);
        cmd.ExecuteNonQuery();
    }
}

// read from database like this
string sql = "SELECT imagepath FROM imagepathtable WHERE ID = @ID";
using (var conn = new MySqlConnection(cs))
{
    conn.Open();
    using (var cmd = new MySqlCommand(sql, conn))
    {
        cmd.Parameters.AddWithValue("@ID", myInt);
        pictureBox1.Image = new Bitmap(cmd.ExecuteScalar().ToString());
    }
}



  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Dane MySQL INSERT nie są zapisywane w odpowiedniej bazie danych, tylko tymczasowo?

  2. Scal tabelę na jednej z 2 kolumn w pandy

  3. Jak wdrożyć bazę danych Chamilo MySQL w celu zapewnienia wysokiej dostępności

  4. JOIN vs. WHERE:Dlaczego dwa zapytania, które uzyskują identyczne wyniki, wykazują 3-4 rzędy różnicy w wydajności?

  5. połączenie z bazą danych nie działa w jar, ale działa w zaćmieniu