隨手紀錄一下
目前我見過最有效率的寫法
1. 楊志強老師的書籍:T-SQL實戰學堂(使用T-SQL OPENROWSET)
2. 使用程式做,聖哥的部落格 ADO.NET 二進位資料存取 (SQL Server image 型態)
3.SqlBulkCopy in ADO.NET 2.0、MSDN範例
假設Table:
[uid] int identity Not NULL primary key , |
photoImage varbinary( MAX ) NULL |
以下是第一種SQL的寫法:
(OPENROWSET很好用,可以讀檔案裡的文字資料也可以讀二進位資料)
protected void btn_Go_Click( object sender, EventArgs e) |
this .ExecuteNonQuery( @"Insert into myPhoto (title,photoImage) |
From OPENROWSET(Bulk '\\59.121.35.241\共享資料夾\Penguins.jpg',Single_Blob) a;" ); |
private int ExecuteNonQuery(String sql) |
using (SqlConnection conn= new SqlConnection( @"Data Source=.\sqlexpress;Database=NorthwindChinese;Integrated Security=True" )) |
SqlCommand cmd= new SqlCommand(sql,conn); |
int rows = cmd.ExecuteNonQuery(); |
引用楊志強老師書上寫的,每秒鐘可以載入5.9MB (真快…
讀取的話,先準備另一個Web Form(Default2.aspx)
.cs
protected void Page_Load( object sender, EventArgs e) |
Response.ContentType = "application/octet-stream" ; |
byte [] file = ( byte []) this .GetSingle( "Select Top 1 photoImage FROM myPhoto Where uid = '" +Request.QueryString[ "uid" ]+ "' Order by uid ASC" ); |
Response.BinaryWrite(file); |
private Object GetSingle(String sql) |
using (SqlConnection conn = new SqlConnection( @"Data Source=.\sqlexpress;Database=NorthwindChinese;Integrated Security=True" )) |
SqlCommand cmd = new SqlCommand(sql, conn); |
Object obj = cmd.ExecuteScalar(); |
然後其他頁.aspx可以如下的寫法:
< img src = "Default2.aspx?uid=2" alt = "圖片" /> |
執行結果:
