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存储二进制数据的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: Linux软件安装解决方案
- 下一篇: 511遇见易语言大漠模块制作教程找图Fi