如何使用C#在数据库中保存图像
我想将用户图像保存到C#中的数据库中。 我怎么做?
您需要将图像序列化为可存储在SQL BLOB列中的二进制格式。 假设你正在使用SQL Server,下面是关于这个主题的一篇很好的文章:
试试这个方法。 它应该工作时,当你想存储图像types为bytea
。 首先它为图像创buildbyte[]
。 然后使用binary
types的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());