我有一个 Windows 手机应用程序,它拍摄一张照片并将其发送到 wcf 服务,该服务将其发送到数据库,以便另一个应用程序(Windows 窗体应用程序)可以检查数据库并获取图像。
它将数据作为字节数组添加到数据库中,但是当我检查这些值时,它们都说相同的数字,但它似乎有效,因为它们的数据在那里。
但是,当我尝试将该数据转换为图像时,它会引发异常,说明该参数无效。我已经搜索了如何做到这一点,但我发现(甚至在这里)正是我在做什么。所以我不确定出了什么问题。
这是我的 windows phone 代码:
if (e.TaskResult == TaskResult.OK)
{
var bitImage = new BitmapImage();
bitImage.SetSource(e.ChosenPhoto);
//image is a Image Control in the form
ImageServiceClient client = new ImageServiceClient();
byte[] array;
using(var stream = new MemoryStream())
{
var btmMap = new WriteableBitmap(bitImage.PixelWidth, bitImage.PixelHeight);
// write an image into the stream
btmMap.SaveJpeg(stream, bitImage.PixelWidth, bitImage.PixelHeight, 0, 100);
array = stream.ToArray();
}
client.AddImageAsync(array);
}
最后一行调用我的 wcf 服务中的 add 方法,如下所示:
public void AddImage(byte[] array)
{
var con =
new MySqlConnection(
"server=instance11297.db.xeround.com;User Id=Admin;Password=nomoredrama2010;port=7692;database=capstone");
con.Open();
string h = array.Aggregate(h, (current, b) => current + b);
string text = "INSERT INTO images VALUES (''," + h + ")";
Console.WriteLine(text);
var command = new MySqlCommand(text, con);
var result = command.ExecuteReader();
result.Close();
}
值得注意的是,无论我是直接使用传入的数组还是将其转换为文本,它们都在数据库中显示相同。
最后,在将所有内容发送到的应用程序中,我有这个:
var con =
new MySqlConnection(
"server=instance11297.db.xeround.com;User Id=Admin;Password=nomoredrama2010;port=7692;database=capstone");
con.Open();
string h = "";
string text = "select Image from images where ImageId=4";
var command = new MySqlCommand(text, con);
var dr = command.ExecuteReader();
var g = new byte[] {};
if(dr.Read())
g = (byte[])dr[0];
dr.Close();
var image = Image.FromStream(new MemoryStream(g));
pictureBox1.Image = image;
但它总是在“var image = Image.FromStream(new MemoryStream(g));”上中断 说参数无效。
我发现它在获取图像后有一个大数组,但数据库中的那个只有 65 个字节,而且都说 57。
为什么它完全无视我的图像数组并将其替换为所有 57 个字节中的一个 65 个字节?
我究竟做错了什么?
** * ** * ** * ** * ***编辑* ** * ** * ** * ** * ** * ** * ** * ** * ****
在 wcf 应用程序中启用调试器后,我终于发现了问题所在。 http://msdn.microsoft.com/en-us/library/ff649234.aspx(对于那些不知道的人)
我也看过这里: http: //www.codeproject.com/Articles/9686/Save-An-Image-Into-SQL-Server-2000-Database
看看为什么它会抛出“你的 sql 是错误的”类型错误,并将我的 sql 语句更改为使用添加方法而不是将值放入字符串中。
最终解决了它。其他人遇到此问题的工作代码如下所示:
public void AddImage(byte[] array)
{
var con =
new MySqlConnection("server=instance11297.db.xeround.com;User Id=Admin;Password=nomoredrama2010;port=7692;database=capstone");
con.Open();
string text = "INSERT INTO images (ImageId, Image) VALUES ('',@bytes)";
var command = new MySqlCommand(text, con);
command.Parameters.AddWithValue("@bytes", array);
command.ExecuteNonQuery();
con.Close();
}
我终于可以停止用头撞墙了。:)