计算库Image分类字段读写数据

原创
小哥 3年前 (2022-11-16) 阅读数 38 #大杂烩

之前我也不知道,原来数据库可能直接储存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;

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

版权声明

所有资源都来源于爬虫采集,如有侵权请联系我们,我们将立即删除

热门