将映像加载到C#然后插入MySQL表

这就是我需要的:我正在制作一个用于库存控制的软件,但我必须在数据中上传产品的图像。 我正在使用C#和MySQL。

我不知道如何将加载到pictureBox中的图像放到MySQL表中。 有任何想法吗? 我完全迷失在这里。

我使用以下代码将图像加载到pictureBox中:

using (OpenFileDialog dlg = new OpenFileDialog()) { dlg.Title = "Open Image"; dlg.Filter = "All Files (*.*)|*.*"; if (dlg.ShowDialog() == DialogResult.OK) { pictureBox1.Image = new Bitmap(dlg.FileName); } } 

如何将加载的图像插入MySQL表? 我想表中的image属性应该是:

 `img` LONGBLOB NOT NULL 

然后,如何从MySQL回调图像到pictureBox? 我想(再次)查询它是这样的:

 select img from table_name where id = ''; 

最后,当我有查询时,如何将图像从MySQL加载到pictureBox?

非常感谢你。

我会提供两种解决方案。 第一种解决方案是直接将原始图像以字节存储在数据库中。 第二个解决方案是我个人推荐的 – 而不是使用数据库中的图像文件的路径。

这里摘录一篇文章 ,提出一些关于是否BLOB的优秀观点。

那么,有几个原因导致您不应该在数据库中存储二进制数据:

  • 将数据存储在SQL数据库中的重点是在数据上放置某种排序和结构,以及能够搜索这些数据。 但是如何搜索图片的二进制数据呢?

  • 对于大型数据集,存储二进制数据将快速运行数据库文件的大小,从而更难控制数据库的大小。

  • 为了在数据库中存储二进制数据,您必须不断地逃避和取消数据以确保没有任何中断。

  • 在文件系统上存储图像的检索速度略快。 现在这里有一些你应该:

您可能希望将二进制数据存储在数据库中有一个很好的理由:

  • 复制。 将图像存储在数据库中允许将所有数据集中存储,这些数据更易于移植,并且易于复制。

以下是选择图像文件的方法:

 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; } 

解决方案1: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); } } } 

解决方案2:在文件系统上存储文件路径

 // 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()); } }