c# mysql varbinary_c# – 从数据库读取SQL Varbinary Blob
你正在使它比它需要更困難.這是使用MySQL,因為它是方便 – 提供商都工作幾乎相同.有些事情需要調整來處理非常大的數據項(比DB Provider更多的是服務器).
保存圖像
string sql = "INSERT INTO BlobDemo (filename, fileType, fileData) VALUES (@name, @type, @data)";
byte[] imgBytes;
using (MySqlConnection dbCon = new MySqlConnection(MySQLConnStr))
using (MySqlCommand cmd = new MySqlCommand(sql, dbCon))
{
string ext = Path.GetExtension(filename);
dbCon.Open();
cmd.Parameters.Add("@name", MySqlDbType.String).Value = "ziggy";
cmd.Parameters.Add("@data", MySqlDbType.Blob).Value = File.ReadAllBytes(filename);
cmd.Parameters.Add("@tyoe", MySqlDbType.String).Value = ext;
int rows = cmd.ExecuteNonQuery();
}
文件數據直接提供給DB提供程序
is there a way to get the full path including file extension of a file stored in an SQL Blob?
您的代碼和上面的代碼是保存構成圖像或任何文件的字節.
讀取Img數據
這將讀取數據,保存到文件并啟動相關的應用程序:
string SQL = "SELECT itemName, itemData, itemtype FROM BlobDemo WHERE Id = @id";
string ext = "";
string tempFile = Path.Combine(@"C:\Temp\Blobs\",
Path.GetFileNameWithoutExtension(Path.GetTempFileName()));
using (MySqlConnection dbCon = new MySqlConnection(MySQLConnStr))
using (MySqlCommand cmd = new MySqlCommand(SQL, dbCon))
{
cmd.Parameters.Add("@id", MySqlDbType.Int32).Value = 14;
dbCon.Open();
using (MySqlDataReader rdr = cmd.ExecuteReader())
{
if (rdr.Read())
{
ext = rdr.GetString(2);
File.WriteAllBytes(tempFile + ext, (byte[])rdr["itemData"]);
}
}
// OS run test
Process prc = new Process();
prc.StartInfo.FileName = tempFile + ext;
prc.Start();
}
>讀回的字節數匹配
>相關的應用程序與圖像一起啟動
>圖片顯示在圖片框中
在這兩種情況下,無論文件類型如何,File.ReadAllBytes()和File.WriteAllBytes()都將為您做大部分工作.
一次不需要掏出數據1k.如果這個斑點像您想要在應用中使用的圖像:
using (MySqlDataReader rdr = cmd.ExecuteReader())
{
if (rdr.Read())
{
ext = rdr.GetString(2);
using (MemoryStream ms = new MemoryStream((byte[])rdr["imgData"]))
{
picBox.Image = Image.FromStream(ms);
}
}
}
blob字節可以被饋送到memstream,甚至不需要創建一個temp Image,除非你不需要顯示它.
總而言之,天花板貓使它恢復正常(圖像為1.4 MB,放大;另一個測試與15.4 MB的圖像也工作 – 兩個都比我想要存儲在一個DB):
根據使用方法,請考慮將圖像歸檔到文件系統的某個位置,只需保存文件名 – 可能添加了Id,以確保名稱是唯一的,并可以將它們視覺上鏈接到記錄.數據庫中不僅會出現大量的數據膨脹,而且可以避免轉換成字節的一些開銷.
如果你想/需要刪除這些在相關的應用程序完成后的某個時間點(不是真正的問題的組成部分),那么在特定的目錄中使用一個臨時文件,所以你可以刪除其中的所有內容(有條件地1)當應用程序結束或啟動時:
private string baseAppPath = Path.Combine(Environment.GetFolderPath(Environment.SpecialFolder.CommonApplicationData),
"Company Name", "Product Name", "Temp Files");
附加Temp文件名和單個文件的實際擴展名.或者,您可以維護列表< string> trashCan來存儲您創建的每個文件的名稱,以便稍后刪除.
1每當您刪除它們時,請確保在與擴展名相關聯的應用程序中仍可以打開該文件.
總結
以上是生活随笔為你收集整理的c# mysql varbinary_c# – 从数据库读取SQL Varbinary Blob的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: [转]宝文!Apple Push Not
- 下一篇: Android初级开发第七讲--特效和数