数据库Image类型字段读写操作

之前我也不知道,原来数据库可能直接储存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("文件不存在!");
}

//读取操作
//查询出存在数据库的文件流
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;

不知道看到这里,大家有没有学习到呢?

猜你喜欢

转载自blog.csdn.net/MonkeyBananas/article/details/81235999