数据库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("文件不存在!");
}

 


读取数据库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;

 

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

评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值