c winform 上传文件到mysql_C# winform DevExpress上传图片到数据库【转】

这篇博客介绍了如何使用DevExpress控件在C# WinForm应用中实现选择图片、上传图片到MySQL数据库以及从数据库加载图片的功能。用户可以通过对话框选择图片,图片会被显示在PictureEdit控件中。上传过程包括将图片转换为字节数组,然后通过SQL语句存入数据库。同时,提供了加载图片的方法来显示数据库中的图片。

实现功能如下图:

c476495293b1a2296fd4a4743565edd4.png

注明:此文使用的是DevExpress控件,winform 原生控件也是一样使用方法。

1.点击选择图片按钮,功能为通过对话框选择要上传的文件,并将该文件在下面的PictureEdit中显示出来。具体代码如下:

private void btnChoosePic_Click(object sender, EventArgs e)

{

ShowPic(pictureEdit1);

}

///

/// 选择图片

///

///

public static void ShowPic(PictureEdit picEdit)

{

OpenFileDialog ofd = new OpenFileDialog();

ofd.InitialDirectory = @"C:\";

ofd.Filter = "Image Files(*.JPG;*.PNG;*.jpeg;*.GIF;*.BMP)|*.JPG;*.PNG;*.GIF;*.BMP;*.jpeg|All files(*.*)|*.*";

ofd.RestoreDirectory = true;

if (ofd.ShowDialog() == DialogResult.OK)

{

PicAddress = ofd.FileName;

Image imge = Image.FromFile(PicAddress);

Bitmap bm = new Bitmap(imge, picEdit.Width, picEdit.Height);

picEdit.Image = bm;

}

}

ShowPic()方法为静态方法,可以直接调用,其中的PicAddress变量为静态全局变量,用于记录要上传文件的文件地址。PictureEdit显示图片的方式,是通过PictureEdit的image属性设定的,将图片转成Bitmap格式,位图文件是最简单的图片格式。

2.上传图片,该按钮的功能是将选定的图片上传到数据库中,具体的实现代码如下:

///

/// 上传图片

///

///

///

private void btnUploadPic_Click(object sender, EventArgs e)

{

if (PicAddress != null)

{

if (PicType.Equals("教师"))

{

var sqlSearch =

$@"select count(*) from studentmanager.picture where PicTypeId = '{TeacherId}'

and PicType='{PicType}'";

var dsSearch = _db.GetResult(sqlSearch);

if (dsSearch.Tables[0].Rows[0][0].ToString().Equals("0")) //没有重复的,则进行新增插入操作

{

byte[] pic = CommonFunction.GetContent(PicAddress);

var result = _db.SavePictureToDB(pic, PicAddress, PicType, TeacherId);

if (result > 0)

{

CommonFunction.MessageShow("头像添加成功", "提示", "OK", "Information");

DialogResult = DialogResult.OK;

}

else

{

CommonFunction.MessageShow("头像添加失败");

}

}

else

{

//更新头像

if (PicAddress.Equals(String.Empty))

{

CommonFunction.MessageShow("没有重新选择图片进行更新");

return;

}

byte[] pic = CommonFunction.GetContent(PicAddress);

var result = _db.UpdatePictureToDb(pic, PicAddress, PicType, TeacherId);

if (result > 0)

{

CommonFunction.MessageShow("头像更新成功", "提示", "OK", "Information");

DialogResult = DialogResult.OK;

}

else

{

CommonFunction.MessageShow("头像更新失败");

}

}

}

else if(PicType.Equals("学生"))

{

var sqlSearch =

$@"select count(*) from studentmanager.picture where PicTypeId = '{StudentId}'

and PicType='{PicType}'";

var dsSearch = _db.GetResult(sqlSearch);

if (dsSearch.Tables[0].Rows[0][0].ToString().Equals("0")) //没有重复的,则进行新增插入操作

{

byte[] pic = CommonFunction.GetContent(PicAddress);

var result = _db.SavePictureToDB(pic, PicAddress, PicType, StudentId);

if (result > 0)

{

CommonFunction.MessageShow("头像添加成功", "提示", "OK", "Information");

DialogResult = DialogResult.OK;

}

else

{

CommonFunction.MessageShow("头像添加失败");

}

}

else

{

//更新头像

if (PicAddress.Equals(String.Empty))

{

CommonFunction.MessageShow("没有重新选择图片进行更新");

return;

}

byte[] pic = CommonFunction.GetContent(PicAddress);

var result = _db.UpdatePictureToDb(pic, PicAddress, PicType, StudentId);

if (result > 0)

{

CommonFunction.MessageShow("头像更新成功", "提示", "OK", "Information");

DialogResult = DialogResult.OK;

}

else

{

CommonFunction.MessageShow("头像更新失败");

}

}

}

}

else

{

CommonFunction.MessageShow("请先选择图片!", "提示", "OK", "Error");

}

}

上传的过程大概就是:根据文件地址将对应文件转换成数据流二进制格式–>编写对应的SQL语句–>执行该SQL语句,将图片添加到数据库中。

上面代码中SavePictureToDB方法代码如下:

///

/// 保存图片到数据库

///

///

///

///

///

///

///

public int SavePictureToDB(byte[] imageByte,

string Picturename,

string PicType,

int PicTypeId)

{

var result = 0;

try

{

if (imageByte != null && imageByte.Length != 0)

{

using (var conn = new MySqlConnection())

{

conn.ConnectionString = ConnectionString;

conn.Open();

var insertStr = @"INSERT INTO studentmanager.picture

(

Picturename,

PicType,

PicTypeId,

imageByte

)

VALUES

(

@Picturename,

@PicType,

@PicTypeId,

@imageByte

);";

var comm = new MySqlCommand();

comm.Connection = conn;

comm.CommandText = insertStr;

comm.CommandType = CommandType.Text;

//设置数据库字段类型MediumBlob的值为图片字节数组imageByte

comm.Parameters.Add(new MySqlParameter("@imageByte", MySqlDbType.MediumBlob)).Value = imageByte;

comm.Parameters.Add(new MySqlParameter("@Picturename", MySqlDbType.VarChar)).Value = Picturename;

comm.Parameters.Add(new MySqlParameter("@PicType", MySqlDbType.VarChar)).Value = PicType;

comm.Parameters.Add(new MySqlParameter("@PicTypeId", MySqlDbType.Int32)).Value = PicTypeId;

//execute sql

result = comm.ExecuteNonQuery();

comm.Dispose();

conn.Close();

conn.Dispose();

}

}

}

catch (Exception)

{

// throw ex;

}

return result;

}

3.加载图片显示到PictureEdit;

///

/// 窗口加载

///

///

///

private void HeadManager_Load(object sender, EventArgs e)

{

LoadImage(PicType, PicType.Equals("教师") ? TeacherId : StudentId);

}

///

/// 获取图片

///

///

///

private void LoadImage(string picType, int picTypeid)

{

try

{

var imageBytes = _db.GetImage(picType, picTypeid);

var image = CommonFunction.GetImageByBytes(imageBytes);

Bitmap bm = new Bitmap(image, pictureEdit1.Width, pictureEdit1.Height);

pictureEdit1.Image = bm;

}

catch (Exception)

{

pictureEdit1.Image = Resource.DefaultUser;

}

}

4.用到的公共方法:

///

/// 转换为Byte[]

///

///

///

public static byte[] GetContent(string filepath)//将指定路径下的文件转换成二进制代码,用于传输到数据库

{

FileStream fs = new FileStream(filepath, FileMode.Open, FileAccess.Read);

byte[] byData = new byte[fs.Length];//新建用于保存文件流的字节数组

fs.Read(byData, 0, byData.Length);//读取文件流

fs.Close();

return byData;

}

///

/// 读取byte[]并转化为图片

///

/// byte[]

/// Image

public static Image GetImageByBytes(byte[] bytes)

{

Image photo;

using (MemoryStream ms = new MemoryStream(bytes))

{

ms.Write(bytes, 0, bytes.Length);

photo = Image.FromStream(ms, true);

ms.Dispose();

ms.Close();

}

return photo;

}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值