【发布时间】:2021-12-03 22:30:54
【问题描述】:
我正在开发一个 winForms 项目,用户可以在该项目中使用光标绘制签名并将其保存在数据库中。
这就是我保存它的方式:
ExecuteQuery("INSERT INTO signatures (name, signature) VALUES ('"+ TXTname.Text +"','"+ signature +"')");
(这没有给我任何错误)
请记住签名列类型是 blob。
然后,我希望用户将他的签名从数据库中检索到图片框,这就是我尝试的方式:
DBconnection.Open();
Image signature;
string query = "SELECT * FROM signatures WHERE name = '" + CMBnames.Text + "'";
var queryCmd = new MySqlCommand(query, DBconnection);
reader = queryCmd.ExecuteReader();
while (reader.Read())
{
byte[] img = (byte[])(reader["SIGNATURE"]);
if (img == null)
{
CMBnames.Text = "error";
}
else
{
MemoryStream ms = new MemoryStream(img);
pictureBox2.Image = System.Drawing.Image.FromStream(ms);
}
}
DBconnection.Close();
但我收到此错误“参数无效。”这里:
pictureBox2.Image = System.Drawing.Image.FromStream(ms);
我做错了什么?
【问题讨论】:
-
提示:请避免在查询中使用
select *,而是使用列名。很有可能数据有问题,要么是从 db 中选择 wring 列,要么是列中的数据无效 -
请阅读bobby-tables.com - 我推荐它的原因是因为这是一种特别糟糕的 Sal 写法,如果你在重要的计算机系统上大量使用它,将会得到你被黑了,或者被解雇了,或者两者兼而有之。在你的整个职业生涯中,你永远不应该再写一个像那里那样的 SQL (并且有用的是,你需要使用参数来有效和高效地将图像保存在数据库中,尽管我也想说不要这样做 - 保存磁盘上的文件并将路径保存在数据库中)
-
谢谢大家,这只是我的一个爱好,所以是的,我对 MySql 不太擅长。我会努力让它变得更好。
-
@viveknuna 我尝试选择唯一的列名,同样的错误。