【发布时间】:2012-10-24 18:41:16
【问题描述】:
我在 MYSQL Server 中有一个数据库。有一个表存储一个带有其信息的图像。该图像的数据类型是 Mediumblob。我需要阅读它并存储在一个字节 [] 中,但我不知道该怎么做。有人有这种情况的解决方案吗?太感谢了:)
问候。
【问题讨论】:
我在 MYSQL Server 中有一个数据库。有一个表存储一个带有其信息的图像。该图像的数据类型是 Mediumblob。我需要阅读它并存储在一个字节 [] 中,但我不知道该怎么做。有人有这种情况的解决方案吗?太感谢了:)
问候。
【问题讨论】:
看看this article on MySQL website的例子,你应该可以像这样处理数据:
要存储图像:
MySql.Data.MySqlClient.MySqlConnection conn;
MySql.Data.MySqlClient.MySqlCommand cmd;
// initialize "conn" and "cmd" here
FileStream fs = new FileStream(@"c:\image.png", FileMode.Open, FileAccess.Read);
FileSize = fs.Length;
byte[] rawData = new byte[FileSize];
fs.Read(rawData, 0, FileSize);
fs.Close();
conn.Open();
string SQL = "INSERT INTO file VALUES(NULL, @FileSize, @File)";
cmd.Connection = conn;
cmd.CommandText = SQL;
cmd.Parameters.AddWithValue("@FileSize", FileSize);
cmd.Parameters.AddWithValue("@File", rawData);
cmd.ExecuteNonQuery();
conn.Close();
然后阅读:
MySql.Data.MySqlClient.MySqlConnection conn;
MySql.Data.MySqlClient.MySqlCommand cmd;
MySql.Data.MySqlClient.MySqlDataReader myData;
// initialize connection and query here...
myData = cmd.ExecuteReader();
if (!myData.HasRows)
throw new Exception("There are no BLOBs to save");
myData.Read();
int FileSize = myData.GetUInt32(myData.GetOrdinal("file_size"));
byte[] rawData = new byte[FileSize];
myData.GetBytes(myData.GetOrdinal("file"), 0, rawData, 0, (int)FileSize);
FileStream fs = new FileStream(@"C:\newfile.png", FileMode.OpenOrCreate, FileAccess.Write);
fs.Write(rawData, 0, (int)FileSize);
fs.Close();
此代码显示了如何将图像保存到文件中(并假设它以 PNG 格式存储)但是您可以对数据执行任何操作...
【讨论】:
file_size 是一个列名。您必须将数据大小与数据本身一起存储......我将编辑存储案例的答案。