软件环境:SQL Server 2005+VS 2005 ,语言为:C#
1.将图片保存到数据库中
1.1使用SQL语句直接保存到数据库中
insert into [PhotoDB].[dbo].[Photo_Test](ID,[Name],Photo)
select 1,'张三',photoes.*
from openrowset(BULK 'G:/a.bmp',SINGLE_BLOB)photoes
注意:
(1)photoes.*表示openrowset方法返回的行集,其全部内容(以photoes表示,可以任意指定,上下保持一直即可),全部插入到数据库中。
(2)不要使用insert into [PhotoDB].[dbo].[Photo_Test]values(1,'张三','G:/a.bmp')来插入图片,这样数据库中保存的不是合法的二进制格式,后面在使用MemoryStream来读取的时候,会提示"参数错误"
1.2使用ADO.NET技术
string str = "insert into [PhotoDB].[dbo].[Photo_Test](ID,[Name],Photo) select 1,'张三',photoes.* from openrowset(BULK 'G://a.bmp',SINGLE_BLOB)photoes";
SqlConnection conn = GetConnection();
SqlCommand sc = new SqlCommand(str, conn);
try
{
}
catch(Exception es)
{
MessageBox.Show(es.Message );
}
int InsertNun= sc.ExecuteNonQuery();
if (InsertNun != 0)
{
MessageBox.Show("插入成功");
}
else
{
MessageBox.Show("插入失败");
}
conn.Close();
2.将图片此二进制数据形式从数据库中读出,并通过PictureBox展示
try
{
SqlConnection conn=this.GetConnection();
string selectstr = "select * from Photo_Test";
SqlDataAdapter sda = new SqlDataAdapter(selectstr, conn);
DataSet ds = new DataSet();
ds.Tables.Add("PhotoDatabase");
sda.Fill(ds.Tables["PhotoDatabase"]);
byte[] imagebyte = new byte[0];
imagebyte = (byte[])ds.Tables["PhotoDatabase"].Rows[0]["Photo"];
MemoryStream ms = new MemoryStream(imagebyte);
Bitmap bmp = new Bitmap(ms);
System.Drawing.Image image = bmp;
pictureBox1.Image = image;
pictureBox1.SizeMode = PictureBoxSizeMode.Zoom;
}
catch (Exception ex)
{
MessageBox.Show(ex.Message);
}
注意:这里没有考虑对数据库性能及物理存储空间的影响,通常将图片的路径存放在数据库中而不图片数据。