簡體   English   中英

用C#創建的圖像-如何通過SQL將其插入BLOB

[英]Images Created with C# - How to Insert them in BLOB via SQL

假設我捕獲了一個屏幕截圖。 這是我的代碼

int sWidth = 1600, sHeight = 1200;

Bitmap B_M_P = Bitmap(sWidth, sHeight);

Graphics gfx = Graphics.FromImage((Image)B_M_P);
gfx.CopyFromScreen(0, 0, 0, 0, new Size(screenWidth, screenHeight));            

B_M_P.Save("img.jpg", ImageFormat.Jpeg);

而不是將其保存到圖像,我想能夠將其發送到我的SQL或MySQL並將它們存儲為BLOB。

我也知道LINQ來查詢數據庫。 我不知道是中間部分。

  • 哪種Data Type將用於在BLOB列中進行插入,我猜這將是Byte[]嗎?

如果它是一個“字節”,則轉換非常容易。

ImageConverter imgc = new ImageConverter();
Byte[] temp = (byte[])imgc.ConvertTo(B_M_P,typeof(byte[]));

這樣以后我就可以准備查詢了

"INSERT INTO EMPLOYEE (pic) VALUES ('"+temp+"');"
  • 如果不是,那是什么類型以及如何轉換

你是正確的,你只需要把它變成一個字節數組。 表的數據類型應為VarBinary(max)

請注意,這里有一個Image數據類型,但是在將來的Microsoft SQL Server版本中將刪除該數據類型,因此Microsoft建議每個人都切換到VarBinary以便將來兼容。


BLOB和VarBinary(max)是同一件事。 了解SQL Server 2005中的VARCHAR(MAX)

為了解決此問題,Microsoft在SQL Server 2005中引入了VARCHAR(MAX),NVARCHAR(MAX)和VARBINARY(MAX)數據類型。這些數據類型可以容納相同數量的數據,BLOB可以容納(2 GB),它們分別是存儲在用於其他數據類型的相同類型的數據頁中。 當MAX數據類型中的數據超過8 KB時,將使用溢出頁面。 SQL Server 2005自動為頁面分配一個溢出指示器,並且知道如何像處理其他數據類型一樣操作數據行。 您可以在存儲過程或函數中聲明MAX數據類型的變量,甚至將它們作為變量傳遞。 您也可以在字符串函數中使用它們。

Microsoft建議在SQL Server 2005中使用MAX數據類型代替BLOB。實際上,在SQL Server的將來版本中不建議使用BLOB。

我在頂部提到的Image數據類型是舊式BLOB數據類型的示例。


這是代碼應為的示例

using(var cmd = SqlCommand("INSERT INTO EMPLOYEE (pic) VALUES (@pic);", connection)
{
    cmd.Parameters.Add("@pic", temp);
    cmd.ExecuteNonQuery();
}

但是,如果您正在使用大文件,則有些問題,請參見此SO解答及其鏈接,以深入了解如何在數據庫中存儲大數據對象。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM