今天剛學如何在mssql資料庫中儲存圖片,決定留下筆記,以免後忘。
SQL Server的聯機叢書提供三種位元據類型的使用條件說明:
1.當表列的所有輸入資料大小為固定值(且長度小於8000位元組)時,使用標準二進位Binary資料類型;
2.當表列的輸入資料長度有很大差別(且長度均小於8000位元組)時,使用varBinary資料類型;
3.當表列輸入資料長度超過8000位元組時,使用varBinary(max) 資料類型。
這次利用varBinary(MAX)資料類型儲存圖片:
我先在mssql資料庫直接測試如下:
INSERT INTO [blog].[dbo].[img](data)
SELECT BulkColumn
FROM OPENROWSET(Bulk 'G:\VS test\WebSites\mail\images\1.gif', SINGLE_BLOB) AS BLOB
// 結果顯示成功
OPENROWSET語句允許SQL從外部資料源提供者來存取資料。Bulk是特別為OPENROWSET插入檔案和映像而設計的資料來源提供者.
接著是在aspx頁面中顯示圖片:
前台頁面:
<form id="form1" runat="server">
<div>
<asp:Image ID="Image1" runat="server" ImageUrl="~/images/12.gif" />
<asp:Button ID="Button1" runat="server" Text="Button" onclick="Button1_Click" />
</div>
</form>
aspx.cs代碼如下:
protected void Button1_Click(object sender, EventArgs e)
{
string Str = "server=(local); user=grid; database=blog; password=grid";
SqlConnection conn = new SqlConnection(Str);
//string cmd = "insert into img(img) values ()";
conn.Open();
string cmd = "select data from img";
SqlCommand com = new SqlCommand(cmd,conn );
com.CommandType = CommandType.Text;
SqlDataReader dr = com.ExecuteReader();
dr.Read();
Response.BinaryWrite((byte[])dr["data"]);
conn.Close();
}
結果 點擊button顯示儲存的圖片成功。