【问题标题】:Adding image to blob (mysql) via c#通过c#将图像添加到blob(mysql)
【发布时间】:2012-08-27 01:49:00
【问题描述】:

我制作了一个 C# 应用程序,将图像从硬盘添加到 mysql 中的 blob 字段。我没有收到错误,并且 blob 字段已填充。

当我检查 MySQL Workbench 中的 blob 字段时,它说该字段不正确(它无法显示图像)。

无论我做什么,无论我尝试什么示例,似乎都没有任何效果。所以在这里放任何示例代码是没有意义的,因为到目前为止还没有任何工作。

谁有我可以尝试的很好的示例代码?

谢谢

【问题讨论】:

  • 您的 C# 应用程序中的代码可能有用;如果无缘无故只是为了验证您所做的事情是否正确。
  • 是什么样的图像?也许 MySQL Workbench 不知道如何显示 TIF(例如)。尝试抓取字节并查看是否可以查看视图图像。
  • @Cory: 一些链接贴有代码。我会检查它,尝试一下并发布在这里。
  • @aquinas:没什么特别的,只是一个 16x16 的 png。当我直接使用 Workbench 添加图像时,它显示正确。
  • 好的。然后发布您的代码。编写一个可以复制问题的 5 行控制台应用程序。然后我们可以帮助你。 MySQL有问题是非常值得怀疑的。 :)

标签: c# mysql image blob


【解决方案1】:

好的,因为有些人想要显示一些代码,所以我在 Alex 的链接中描述的帮助下创建了一个非常简单的控制台应用程序。我确实采用了该代码并放置在控制台应用程序中。 发生了一些奇迹,因为它在我启动应用程序时就起作用了。我不知道我在主应用程序中做错了什么,但它必须是一些东西(duh)。代码如下:

string MyConString = "SERVER=localhost;" +
    "DATABASE=database;" +
    "UID=root;" +
    "PASSWORD=pass;";

System.IO.FileStream fs = new FileStream(@"D:\link\to\image.png", FileMode.Open);
System.IO.BufferedStream bf = new BufferedStream(fs);
byte[] buffer = new byte[bf.Length];
bf.Read(buffer, 0, buffer.Length);    

byte[] buffer_new = buffer;

MySqlConnection connection = new MySqlConnection(MyConString);
connection.Open();
MySqlCommand command = new MySqlCommand("", connection);
command.CommandText = "insert into table(fldImage) values(@image);";

command.Parameters.AddWithValue("@image", buffer_new);

command.ExecuteNonQuery();

connection.Close();

Console.WriteLine("Task Performed!");
Console.ReadLine();

【讨论】:

  • 这里要小心。您永远不会关闭 fs FileStream 或 bf 缓冲流。您的主要问题可能是 buffer_new 不包含您图像的 所有 字节,从而导致 MySQL Workbench 中的字节损坏。您确实应该将using 语句应用于流:using (var fs = new FileStream(@"D:\link\to\image.png", FileMode.Open)) { using (var bf = new BufferedStream(fs)) { /* your existing code */ } }
【解决方案2】:

您是否尝试通过 mysql 连接器(存储它的方式)恢复 blob。 MySQL Workbench 不显示图像并不意味着它没有被存储。

尝试恢复图像:

while (reader.read())
{
    var image = (byte[])reader.getColumn(0);
    File.WriteAllBytes(@"c:\image.extension", image);
}

这样你可以确保它正在保存。

【讨论】:

  • 试过你的代码,图像已保存,图像无法通过 windows 图像查看器显示。所以...现在我可以说图像保存不正确?
  • 如果您尝试使用正确的扩展名,那么可以。它没有以应有的方式保存。我建议你把你正在使用的代码放在哪里,看看问题出在哪里。
【解决方案3】:

我发现在使用 mysql 和 .NET 时,MySQL Connector 让事情变得非常简单!

这家伙:Save Image in MySQL via C# application 似乎在正确的路线上。

祝你好运!

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2023-03-17
    • 1970-01-01
    • 2011-12-28
    • 1970-01-01
    • 1970-01-01
    • 2023-01-01
    • 1970-01-01
    相关资源
    最近更新 更多