快速將檔案、圖片二進位檔案塞入資料表

本文介绍了一种高效的图片存储及读取方法,利用T-SQL OPENROWSET和ADO.NET实现图片的快速上传与检索。通过示例展示了如何创建存储图片的数据库表,并提供了具体的C#代码实现。

隨手紀錄一下

目前我見過最有效率的寫法

1. 楊志強老師的書籍:T-SQL實戰學堂(使用T-SQL OPENROWSET)

2. 使用程式做,聖哥的部落格 ADO.NET 二進位資料存取 (SQL Server image 型態)

3.SqlBulkCopy in ADO.NET 2.0MSDN範例

 

假設Table:

Create Table myPhoto
(
 [uid] int identity Not NULL primary key,
 title nvarchar(50) NULL,
 photoImage varbinary(MAXNULL
 
)

以下是第一種SQL的寫法:

(OPENROWSET很好用,可以讀檔案裡的文字資料也可以讀二進位資料)

//按鈕Click事件
protected void btn_Go_Click(object sender, EventArgs e)
{
 
    //SINGLE_BLOG表示二進位檔案,SINGLE_CLOB表示檔案裡的文字資料,SINGLE_NCLOB表示UNICODE編碼檔案裡的文字
    this.ExecuteNonQuery(@"Insert into myPhoto (title,photoImage)
                                          Select 'Penguins',a.*
                                          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);
        conn.Open();
        int rows = cmd.ExecuteNonQuery();//執行新刪修SQL語法
        conn.Close();
 
        return rows;//回傳影響筆數
    }
 
 
}

引用楊志強老師書上寫的,每秒鐘可以載入5.9MB (真快…

讀取的話,先準備另一個Web Form(Default2.aspx)

.cs

protected void Page_Load(object sender, EventArgs e)
{
    //依據傳入的Request.QueryString["uid"]的不同,撈不同的圖片
     
    Response.Clear();
    //application/octet-stream為任意的二進位檔案,圖片類型也可用image/jpeg
    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);
        conn.Open();
        Object obj = cmd.ExecuteScalar();
        conn.Close();
 
        return obj;//回傳該檔案
    }
 
}

 

然後其他頁.aspx可以如下的寫法:

<img src="Default2.aspx?uid=2" alt="圖片" />

 

執行結果:

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值