之前我也不知道,原来数据库可能直接储存Image,神不神奇,哈哈哈,有些人还质疑我,今天我就放出源码来。
写入数据库实现代码:
//写入数据库操作
if (File.Exists(this.ImageFile))
{
//获取要上传的图片名不包括扩展名
string imageName = this.ImageName.Substring(0, this.ImageName.IndexOf('.'));
string str = string.Format(" SELECT COUNT(*) FROM StaffServiceImage WHERE 图片名='{0}'", imageName);
if (Convert.ToInt32(SqlHelper.ExecuteScalar(SqlHelper.ConnectionString, CommandType.Text, str, null)) > 0)
{
MessageBox.Show("历史图片名相同,请修改当前上传图片名称!");
return;
}
//打开文件流,用来读取图片文件中的数据
FileStream fs = new FileStream(this.ImageFile, FileMode.Open, FileAccess.Read);
//将文件流中的数据存入内存字节中
byte[] buffer = new byte[fs.Length];
fs.Read(buffer, 0, (int)fs.Length);
fs.Close();
str = string.Format(" INSERT INTO StaffServiceImage VALUES('{0}',@img)", imageName);
//存文件流这是很关键的一步
SqlParameter sp = new SqlParameter("@img", buffer);
//切记这里一定要单独把Image的参数类型设置一下
sp.SqlDbType = SqlDbType.Image;
//执行插入语句把Image存到数据库中
SqlHelper.ExecuteNonQuery(SqlHelper.ConnectionString, CommandType.Text, str, sp);
}
else
{
MessageBox.Show("文件不存在!");
}
读取数据库Image类型实现代码(读取放到Image文件中):
//读取操作
//查询出存在数据库的文件流
string str = string.Format(" SELECT 图片 FROM StaffServiceImage WHERE 图片名='{0}'",this.cboImageName.Text);
byte[] ImageVm = (byte[])SqlHelper.ExecuteScalar(SqlHelper.ConnectionString, CommandType.Text, str, null);
//将内存流格式化为位图
MemoryStream ms = new MemoryStream(ImageVm);
//得到图片
Image im = Image.FromStream(ms, true);
//赋给窗体背景
c.BackgroundImage = im;
不知道看到这里,大家有没有学习到呢?