C# winform DevExpress上传图片到数据库【转】

实现功能如下图:
实现功能
注明:此文使用的是DevExpress控件,winform 原生控件也是一样使用方法。

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

private void btnChoosePic_Click(object sender, EventArgs e)
        {
            ShowPic(pictureEdit1);
        }

        /// <summary> /// 选择图片 /// </summary> /// <param name="picEdit"></param> 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.上传图片,该按钮的功能是将选定的图片上传到数据库中,具体的实现代码如下:

/// <summary>
        /// 上传图片 /// </summary> /// <param name="sender"></param> /// <param name="e"></param> 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方法代码如下:

/// <summary>
        /// 保存图片到数据库 /// </summary> /// <param name="imageByte"></param> /// <param name="Tablename"></param> /// <param name="FieldPicturename"></param> /// <param name="FieldIdxname"></param> /// <param name="FieldIdxvalue"></param> /// <returns></returns> 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;

/// <summary>
        /// 窗口加载 /// </summary> /// <param name="sender"></param> /// <param name="e"></param> private void HeadManager_Load(object sender, EventArgs e) { LoadImage(PicType, PicType.Equals("教师") ? TeacherId : StudentId); } /// <summary> /// 获取图片 /// </summary> /// <param name="picType"></param> /// <param name="picTypeid"></param> 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.用到的公共方法:

/// <summary>
        /// 转换为Byte[] /// </summary> /// <param name="filepath"></param> /// <returns></returns> 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; } /// <summary> /// 读取byte[]并转化为图片 /// </summary> /// <param name="bytes">byte[]</param> /// <returns>Image</returns> 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; }
  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
可以使用以下步骤将文件上传到 MySQL 数据库: 1. 在 WinForm 界面上添加一个“上传文件”按钮和一个“文件路径”文本框。 2. 在按钮的 Click 事件中添加以下代码: ``` private void btnUpload_Click(object sender, EventArgs e) { OpenFileDialog openFileDialog = new OpenFileDialog(); if (openFileDialog.ShowDialog() == DialogResult.OK) { txtFilePath.Text = openFileDialog.FileName; } } ``` 这段代码可以让用户选择要上传的文件,并将文件路径显示在文本框中。 3. 添加一个“上传”按钮,并在其 Click 事件中添加以下代码: ``` private void btnUploadToDB_Click(object sender, EventArgs e) { string filePath = txtFilePath.Text; byte[] file = File.ReadAllBytes(filePath); string connectionString = "your_connection_string_here"; using (MySqlConnection connection = new MySqlConnection(connectionString)) { connection.Open(); string query = "INSERT INTO files (name, file) VALUES (@name, @file)"; MySqlCommand command = new MySqlCommand(query, connection); command.Parameters.AddWithValue("@name", Path.GetFileName(filePath)); command.Parameters.AddWithValue("@file", file); command.ExecuteNonQuery(); connection.Close(); } } ``` 这段代码将文件读入一个字节数组中,然后将文件名和字节数组插入到 MySQL 数据库中的文件表中。 4. 最后,记得要引用 MySQL Connector/NET,可以在 NuGet 上搜索“MySql.Data”进行安装。 以上就是将文件上传到 MySQL 数据库的基本步骤,可以根据实际需求进行修改和优化。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值