如何使用C#在数据库中保存图像

我想将用户图像保存到C#中的数据库中。 我怎么做?

您需要将图像序列化为可存储在SQL BLOB列中的二进制格式。 假设你正在使用SQL Server,下面是关于这个主题的一篇很好的文章:

http://www.eggheadcafe.com/articles/20020929.asp

试试这个方法。 它应该工作时,当你想存储图像types为bytea 。 首先它为图像创buildbyte[] 。 然后使用binarytypes的IDataParameter保存它的数据库。

  public static void PerisitImage(string path, IDbConnection connection) { using (var command = connection.CreateCommand ()) { Image img = Image.FromFile (path); MemoryStream tmpStream = new MemoryStream(); img.Save (tmpStream, ImageFormat.Png); // change to other format tmpStream.Seek (0, SeekOrigin.Begin); byte[] imgBytes = new byte[MAX_IMG_SIZE]; tmpStream.Read (imgBytes, 0, MAX_IMG_SIZE); command.CommandText = "INSERT INTO images(payload) VALUES (:payload)"; IDataParameter par = command.CreateParameter(); par.ParameterName = "payload"; par.DbType = DbType.Binary; par.Value = imgBytes; command.Parameters.Add(par); command.ExecuteNonQuery (); } } 

你需要将图像转换为C#中的byte[] ,然后将数据库列作为varbinary(MAX)

之后,就像保存其他数据types一样。

这是一个在asp.net中使用FileUpload控件的方法:

 byte[] buffer = new byte[fu.FileContent.Length]; Stream s = fu.FileContent; s.Read(buffer, 0, buffer.Length); //Then save 'buffer' to the varbinary column in your db where you want to store the image. 

你可以保存图像的path在数据库中或保存图像本身作为一个BLOB(二进制 – 字节数组)..这取决于你得到的情况下,如果你的应用程序是一个Web应用程序,然后保存path图像好得多。但是如果你有一个基于客户端的应用程序连接到一个集中的数据库,那么你必须把它保存为二进制。

我个人的偏好是不把图像保存到数据库。 将图像保存在文件系统的某个位置,并在数据库中保存一个引用。

由于您使用的是SQL,因此build议不要使用adhoc('在string中编写语句'),尤其是在您正在加载图像的情况下。

ADO.NET可以为你做所有的映射,转义等工作。

创build一个存储过程,或使用SqlParameter进行绑定。

正如其他海报说,使用VARBINARY(MAX)作为您的存储types – IMAGE正在depraated。

我认为这个有效的问题已经在这里回答了。 我也试过了。 我的问题是简单地使用图片编辑(从DevExpress)。 这就是我如何解决这个问题:

  • 将PictureEdit的“PictureStoreMode”属性更改为ByteArray:它当前设置为“默认” 在这里输入图像描述
  • 将控件的编辑值转换为bye:byte [] newImg =(byte [])pictureEdit1.EditValue;
  • 保存图像:this.tbSystemTableAdapter.qry_updateIMGtest(newImg);

再次感谢你。 Chagbert

 //Arrange the Picture Of Path.*** if (openFileDialog1.ShowDialog() == DialogResult.OK) { pictureBox1.Image = Image.FromFile(openFileDialog1.FileName); string[] PicPathArray; string ArrangePathOfPic; PicPathArray = openFileDialog1.FileName.Split('\\'); ArrangePathOfPic = PicPathArray[0] + "\\\\" + PicPathArray[1]; for (int a = 2; a < PicPathArray.Length; a++) { ArrangePathOfPic = ArrangePathOfPic + "\\\\" + PicPathArray[a]; } } // Save the path Of Pic in database SqlConnection con = new SqlConnection("Data Source=baqar-pc\\baqar;Initial Catalog=Prac;Integrated Security=True"); con.Open(); SqlCommand cmd = new SqlCommand("insert into PictureTable (Pic_Path) values (@Pic_Path)", con); cmd.Parameters.Add("@Pic_Path", SqlDbType.VarChar).Value = ArrangePathOfPic; cmd.ExecuteNonQuery(); ***// Get the Picture Path in Database.*** SqlConnection con = new SqlConnection("Data Source=baqar-pc\\baqar;Initial Catalog=Prac;Integrated Security=True"); con.Open(); SqlCommand cmd = new SqlCommand("Select * from Pic_Path where ID = @ID", con); SqlDataAdapter adp = new SqlDataAdapter(); cmd.Parameters.Add("@ID",SqlDbType.VarChar).Value = "1"; adp.SelectCommand = cmd; DataTable DT = new DataTable(); adp.Fill(DT); DataRow DR = DT.Rows[0]; pictureBox1.Image = Image.FromFile(DR["Pic_Path"].ToString());