分为两种情况
1. 图片以链接形式存储在数据库中,表中某个字段存储图片的路径
2. 图片存储在数据库中(BLOB)
在计算机中,BLOB是指二进制长对象。BLOB是一个大文件,典型的BLOB是一张图片或一个声音文件,由于它们的尺寸,必须使用特殊的方式来处理(例如:上传、下载或者存放到一个数据库)
第一种:图片以链接形式存储在数据库中
解决方式比较简单, 用GridView的ImageFiled,把它和表的相应字段对应即可。
Abhijit Jana 的这篇文章说的比较清楚 http://www.codeproject.com/KB/aspnet/GridImage.aspx
设置ImageFiled的属性DataImageUrlFiled=(field name in Database)
Code is very simple
public partial class _Default : System.Web.UI.Page
{
SqlConnection conn = new SqlConnection();
protected void Page_Load(object sender, EventArgs e)
{
conn.ConnectionString = "Data Source=MySe;Integrated Security=True; database=test";
Load_GridData(); // call Load_GridData()
}
void Load_GridData()
{
conn.Open(); //open the connection
SqlDataAdapter Sqa = new SqlDataAdapter("select * from picture", conn);
DataSet ds=new DataSet();
Sqa.Fill(ds); // Fill the dataset
GridView1.DataSource = ds; // give data to gridview
GridView1.DataBind();
conn.Close();
}
}
第二种 图片存储在数据库中(BLOB)
这种情况比较复杂
可以先看一下这篇文章:How To Read and Write BLOB Data by Using ADO.NET with Visual C# .NET
图片写入到数据库BLOB字段:
1. 读图片文件到流
FileStream fs = new FileStream(@"C:\winnt\Gone Fishing.BMP", FileMode.OpenOrCreate, FileAccess.Read);
2. 从流读到byte数组。
byte[] MyData= new byte[fs.Length];
fs.Read(MyData, 0, System.Convert.ToInt32(fs.Length));
3. 直接赋给字段
myRow["imgField"] = MyData;
写一个图片文件到数据库
{
SqlConnection con = new SqlConnection("Server=Darkover;uid=<username>;pwd=<strong password>;database=northwind");
SqlDataAdapter da = new SqlDataAdapter("Select * From MyImages", con);
SqlCommandBuilder MyCB = new SqlCommandBuilder(da);
DataSet ds = new DataSet("MyImages");
da.MissingSchemaAction = MissingSchemaAction.AddWithKey;
FileStream fs = new FileStream(@"C:\winnt\Gone Fishing.BMP", FileMode.OpenOrCreate, FileAccess.Read);
byte[] MyData= new byte[fs.Length];
fs.Read(MyData, 0, System.Convert.ToInt32(fs.Length));
fs.Close();
da.Fill(ds,"MyImages");
DataRow myRow;
myRow=ds.Tables["MyImages"].NewRow();
myRow["Description"] = "This would be description text";
myRow["imgField"] = MyData;
ds.Tables["MyImages"].Rows.Add(myRow);
da.Update(ds, "MyImages");
con.Close();
}
从数据库读BLOB
1. 从数据库读取图片字段到byte数组
DataRow myRow=ds.Tables["MyImages"].Rows[0];
byte[] MyData= new byte[0];
MyData = (byte[])myRow["imgField"];
2. 由Byte数组创建图片文件
FileStream fs = new FileStream(@"C:\winnt\Gone Fishing2.BMP", FileMode.OpenOrCreate, FileAccess.Write);
fs.Write(MyData, 0,MyData.GetUpperBound(0));
从数据库读BLOB到图片
{
SqlConnection con = new SqlConnection("Server=Darkover;uid=<username>;pwd=<strong password>;database=northwind");
SqlDataAdapter da = new SqlDataAdapter("Select * From MyImages", con);
SqlCommandBuilder MyCB = new SqlCommandBuilder(da);
DataSet ds = new DataSet("MyImages");
byte[] MyData= new byte[0];
da.Fill(ds, "MyImages");
DataRow myRow;
myRow=ds.Tables["MyImages"].Rows[0];
MyData = (byte[])myRow["imgField"];
int ArraySize = new int();
ArraySize = MyData.GetUpperBound(0);
FileStream fs = new FileStream(@"C:\winnt\Gone Fishing2.BMP", FileMode.OpenOrCreate, FileAccess.Write);
fs.Write(MyData, 0,ArraySize);
fs.Close();
}
GridView怎么做呢?看这里