2012-10-24 16 views
3

我在MYSQL服務器中有一個數據庫。有一個表格存儲圖片及其信息。該圖像的數據類型是Mediumblob。我需要閱讀並存儲在一個字節[]中,但我不知道該怎麼做。任何人都可以爲這種情況提供解決方案? Tks這麼多:)從C#中的MYSQL讀取Mediumblob數據類型

問候。

回答

3

望着從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格式存儲的),但您可以對數據執行任何操作...

+0

是「file_size」列名嗎?所以如果我需要將圖像存儲在一個字節[]中,所以我只需要使用這些代碼? int FileSize = myData.GetUInt32(myData.GetOrdinal(「file_size」)); byte [] rawData = new byte [FileSize]; –

+1

是的,'file_size'是一個列名。您將不得不將數據大小與數據本身一起存儲......我將編輯存儲案例的答案。 –