【问题标题】:'Parameter is not valid.' when trying to retrive image from database MySql'参数无效。'尝试从数据库 MySql 中检索图像时
【发布时间】: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 我尝试选择唯一的列名,同样的错误。

标签: c# mysql image winforms


【解决方案1】:

如果signaturebyte[],那么'"+ signature +"' 将生成文字字符串'System.Byte[]'。这不是一个有效的图像,读回它会产生你看到的错误。

你需要使用命令参数,而不是字符串连接:

using var cmd = new MySqlCommand(@"INSERT INTO signatures (name, signature)
    VALUES (@name, @signature);", DBconnection);
cmd.Parameters.AddWithValue("@name", TXTname.Text);
cmd.Parameters.AddWithValue("@signature", signature);
cmd.ExecuteNonQuery();

【讨论】:

    猜你喜欢
    • 2013-11-09
    • 1970-01-01
    • 2021-10-07
    • 1970-01-01
    • 1970-01-01
    • 2021-08-12
    • 1970-01-01
    • 1970-01-01
    • 2015-06-09
    相关资源
    最近更新 更多