【发布时间】:2018-12-17 16:51:46
【问题描述】:
我正在尝试将歌曲的封面保存到具有行类型图像的数据库中。 目前它没有将我在此查询中填写的任何内容保存到数据库中,但我的其他查询工作正常。
public void AddSong(string names, string artists, string bands, string album, string strFilePath, string strlyrics, string strmp3)
{
if (strFilePath != null)
{
Image temp = new Bitmap(strFilePath);
MemoryStream strm = new MemoryStream();
temp.Save(strm, System.Drawing.Imaging.ImageFormat.Jpeg);
ImageByteArray = strm.ToArray();
}
SqlConnection con = new SqlConnection(ConnectionString);
//SqlConnection con = new SqlConnection(@"Data Source=(LocalDB)\MSSQLLocalDB;AttachDbFilename=C:\Users\Ruben\Documents\dbPlatenCompany.mdf;Integrated Security = True; Connect Timeout = 30");
string query = "INSERT INTO [tblSongs] ([Name], [Artist], [Band], [Album], [Cover], [lyrics], [mp3]) VALUES ('" + names + "','" + artists + "','" + bands + "','" + album + "', @IMG,'" + strlyrics + "','" + strmp3 + "')";
SqlCommand cmd = new SqlCommand(query, con);
try
{
con.Open();
cmd.Parameters.Add(new SqlParameter("@IMG", ImageByteArray));
cmd.BeginExecuteNonQuery();
MessageBox.Show("gelukt");
}
catch (Exception ex)
{
MessageBox.Show(ex.Message);
}
}
编辑:我知道将图像存储在数据库中可能不是最好的方法。但对于学校来说,这是一个小项目,所以只有大约 4 张图片。
【问题讨论】:
-
顺便说一句,你那里有一个 SQL 注入漏洞。使用 SQL 参数来避免它。
-
将图像存储到数据库中不是一个好主意。改为上传图片并保存图片的 URL 或文件位置
-
就像其他人说的那样,存储图像并不好,因为它会占用大量的数据库存储空间,而数据库并不是真正用于存储这种庞大的数据类型。您能做的最好的就是存储图片路径,然后从该路径显示它(当然,您必须先将其上传到服务器上)
-
尝试使用
ExecuteNonQuery而不是BeginExecuteNonQuery。如果您需要异步处理,您还应该使用EndExecuteNonQuery或更好地使用更新的基于任务的版本ExecuteNonQueryAsync -
那个+有+没+过+那个+对+方式+写SQL很久了。它很乏味,难以阅读并且很容易出错。始终使用 SQL 参数
标签: c# sql database image memorystream