日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 运维知识 > 数据库 >内容正文

数据库

c# mysql varbinary_数据库中用varbinary存储二进制数据

發布時間:2023/12/10 数据库 33 豆豆
生活随笔 收集整理的這篇文章主要介紹了 c# mysql varbinary_数据库中用varbinary存储二进制数据 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

問題描述:將圖片、二進制文件內容等數據存儲在數據庫中,并能從數據庫中取出還原為圖片或文件,數據庫存儲二進制數據用varbinary字段。

分析:由于之前數據庫中沒有用過varbinary存儲數據,首先要把varbinary搞懂了,其次就是圖片類型與二進制類型之間的轉換,文件類型與二進制類型之間的轉換。

準備工作:

1.varbinary 與 binary的區別:

固定長度 (binary) 的或可變長度 (varbinary) 的 binary 數據類型。

binary [ ( n ) ]

固定長度的 n 個字節二進制數據。N 必須從 1 到 8,000。存儲空間大小為 n+4 字節。

varbinary [ ( n ) ]

n 個字節變長二進制數據。n 必須從 1 到 8,000。存儲空間大小為實際輸入數據長度 +4 個字節,而不是 n 個字節。輸入的數據長度可能為 0 字節。在 SQL-92 中 varbinary 的同義詞為 binary varying。注釋:如果在數據定義或變量聲明語句中沒有指定 n,默認長度為 1。如果沒有用 CAST 函數指定 n,默認長度為 30。

2.由于使用了MVC結構,生成Model類的時候竟然不知道其對應類型,網上搜也沒有結果,首先用了一個System.Data.SqlTypes.SqlBytes,后來誤打誤撞才發現竟然就是byte[]類型。

實現示例:

//1.首先將圖片裝換成字節數組

Bitmap btm = new Bitmap("C:/Users/Desktop/1.jpg");

MemoryStream ms= newMemoryStream();

btm.Save(ms, System.Drawing.Imaging.ImageFormat.Bmp);byte[] bytes =ms.GetBuffer();//byte[] bytes= ms.ToArray(); 這兩句都可以

ms.Close();try{//2.往數據庫里寫圖片數據//先打開兩個類庫文件

SqlConnection con = newSqlConnection();

con.ConnectionString= "server=.;database=Test;uid=sa;pwd=123456";

con.Open();

SqlCommand com= newSqlCommand();

com.Connection=con;

com.CommandType=CommandType.Text;

com.CommandText= "insert into Map(Id,BitmapData) values(1,@photo)";

com.Parameters.AddWithValue("@photo", bytes);

SqlDataReader dr= com.ExecuteReader();//執行SQL語句

dr.Close();//關閉執行

con.Close();//關閉數據庫//3.從數據庫中取圖片數據并顯示

SqlConnection con = newSqlConnection();

con.ConnectionString= "server=.;database=Test;uid=sa;pwd=123456";

String sql= "select * from Map where Id=1";

SqlCommand cmd= newSqlCommand(sql, con);

con.Open();using (SqlDataReader dr =cmd.ExecuteReader())

{if(dr.Read()){if (!dr.IsDBNull(1))//防止照片字段為空

{

System.Data.SqlTypes.SqlBytes dataBytes= dr.GetSqlBytes(1);

Image imge= Image.FromStream(dataBytes.Stream);//顯示照片

pb.ImageLocation = null;

pb.Image= null;

pb.Image=imge;

}

}

}

con.Close();//關閉數據庫

}catch(Exception)

{throw;

}

上述為測試示例,沒有直接取byte[]類型,如果要轉化成byte[]類型,可以用如下方法:

byte[] b=dr.GetSqlBytes(1).Value;

byte[] b1 = dr.GetSqlBytes(1).Buffer;

總結

以上是生活随笔為你收集整理的c# mysql varbinary_数据库中用varbinary存储二进制数据的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。