我想将用户图像保存到C#中的数据库中。我该怎么做?
答案 0 :(得分:23)
试试这个方法。当您想要存储图像的字段属于byte
类型时,它应该起作用。
首先,它为图像创建byte[]
。然后使用IDataParameter
类型的binary
将其保存到数据库。
using System.Drawing;
using System.Drawing.Imaging;
using System.Data;
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 ();
}
}
答案 1 :(得分:6)
您希望将图片转换为C#中的byte[]
,然后您将数据库列设为varbinary(MAX)
之后,就像保存任何其他数据类型一样。
答案 2 :(得分:6)
这是一个在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.
答案 3 :(得分:4)
您需要将图像序列化为可以存储在SQL BLOB列中的二进制格式。假设你正在使用SQL Server,这里有一篇关于这个主题的好文章:
答案 4 :(得分:2)
你可以保存数据库中的图像路径,或者将图像本身保存为BLOB(二进制 - 字节数组)..这取决于你得到的情况,如果你的应用程序是一个web应用程序,那么保存图像的路径要好得多。但是如果你有一个连接到集中式数据库的基于客户端的应用程序,那么你必须将它保存为二进制文件。
答案 5 :(得分:1)
由于您使用的是SQL,因此建议不要使用adhoc('在字符串中编写语句'),特别是考虑到您正在加载图像。
ADO.NET可以为您完成映射,转义等所有艰苦工作。
创建存储过程,或使用SqlParameter进行绑定。
正如其他海报所说,使用VARBINARY(MAX)作为您的存储类型 - 图像被删除。
答案 6 :(得分:1)
我个人的偏好不是将图像保存到数据库中。将图像保存在文件系统中的某个位置,并将引用保存在数据库中。
答案 7 :(得分:-1)
我认为这个有效的问题已在这里得到解答。我也试过了。我的问题只是使用图片编辑(来自DevExpress)。这就是我如何解决它:
再次感谢你。 Chagbert
答案 8 :(得分:-5)
//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());