C#上传图片和界面调用图片查看

提示:文章写完后,目录可以自动生成,如何生成可参考右边的帮助文档


前言

这一期我们来学习使用C#上传图片,并在winform窗体展现出来,类似于用户注册时上传自己的头像一样。


提示:这里我们用二进制来存储图片信息

一、逻辑思路

1.创建sql表

表名: tb_user
字段usimg: 存储头像的字段,类型longblob
在这里插入图片描述

2.创建User类

对每一个属性进行重构,封装。(只展现局部的属性)

提示:这里的usimg属性用字节数组进行定义,可自行自定义

在这里插入图片描述


3.创建sql方法

后台的插入sql方法

     //注册插入表
         public bool InsertUser(User user)
         {
             bool result = false;
             MySqlConnection con = new MySqlConnection(str);
             MySqlCommand cmd = new MySqlCommand();
             try
             {
                 con.Open();
                 cmd.Connection = con;
                 //@之后变量可以自定义
                 cmd.CommandText = "insert into tb_user values(@name, @tel, @pass, @sex, @address, @usimg)";

                 cmd.Parameters.Add("name", user.Name);
                 cmd.Parameters.Add("tel", user.Tel);
                 cmd.Parameters.Add("pass", user.Pass);
                 cmd.Parameters.Add("sex", user.Sex);
                 cmd.Parameters.Add("address", user.Address);
                 cmd.Parameters.Add("usimg", user.Usimg);
                 

                 int i = cmd.ExecuteNonQuery();
                 if (i > 0) result = true;
                 else result = false;

             }
             catch (Exception ex)
             {
                 MessageBox.Show(ex.Message);
                 result = false;

             }
             finally
             {
                 con.Close();
             }

             return result;
         }

二、使用步骤

1.创建注册窗体

在这里插入图片描述


2."上传个人头像"按钮绑定事件

代码如下(示例):

  //上传头像按钮
  		//方法体外创建一个User对象存储图片
  		User user = new User();
        private void button_img_Click(object sender, EventArgs e)
        {
            OpenFileDialog ofd = new OpenFileDialog();  //打开文件
            ofd.InitialDirectory = System.Environment.GetFolderPath(Environment.SpecialFolder.MyPictures);//设置系统目录
            
            //图片的类型定义
            ofd.Filter = "图片文件|*.bmp;*.jpg;*.jpeg;*.png";

            if (ofd.ShowDialog() == System.Windows.Forms.DialogResult.OK)
            {
                this.pictureBox1.Image = Image.FromStream(ofd.OpenFile());  //获取当前选择的图片
                string path = ofd.FileName.ToString(); //获取当前图片的路径
                FileStream fs = new FileStream(path, FileMode.Open, FileAccess.Read); //将指定路径的图片添加到FileStream类中
                BinaryReader br = new BinaryReader(fs);//通过FileStream对象实例化BinaryReader对象

                byte[] imgBytesIn = br.ReadBytes(Convert.ToInt32(fs.Length));//将图片转为二进制数据
                
                //属性usimg存储图片
                user.Usimg = imgBytesIn;
				//基本不需要改什么,这个就类似一个模板,只需要按照自己的不同更改这一句就可
            }
        }

3."注册"按钮事件

代码如下(示例):

		//创建sql类对象调用sql方法
        yyl_mysql sql = new yyl_mysql();
         private void uiSymbolButton2_Click(object sender, EventArgs e)
        {
            if(textBox_name.Text == "" || textBox_pass1.Text == "" || textBox_pass2.Text == "")
            {
                MessageBox.Show("请完善注册信息!");
                return;
            }
            if(textBox_pass1.Text != textBox_pass2.Text)
            {
                MessageBox.Show("两次输入的密码不一致,请修改.....");
                return;
            }
			//接收值
            user.Tel = textBox_name.Text;
            user.Pass = textBox_pass2.Text;
            
            //调用sql方法
            if(sql.InsertUser(user))
            {
                MessageBox.Show("注册成功!"); 
            }
            else
            {
                MessageBox.Show("注册失败,请重新注册或者联系管理员.....");
            }
        }

4.创建调用窗体(个人信息)

在这里插入图片描述

5.窗体后台事件

代码如下(示例):

using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.IO;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using System.Windows.Forms;

namespace CommoditySystem.forms
{
    public partial class ReadUserMessage : Form
    {
    	//定义一个变量tel接收用户主键
        public static string tel { get; set; }

		//创建User对象接收用户注册信息
        User user = new User();

		//sql类对象
        yyl_mysql sql = new yyl_mysql();
	
		//静态给值,一般需要传值,下一期再说如何传值
		tel = "6";
		
        public ReadUserMessage()
        {
            InitializeComponent();
			
			//查询用户的信息并返回
            user = sql.ReadUser(tel);

			//组件赋值
            label_name.Text = user.Name;
            label_tel.Text = user.Tel;
            label_sex.Text = user.Sex;
            label_pass.Text = user.Pass;
            label_address.Text = user.Address;

            //图片赋值(模板)
            MemoryStream memoryStream = null;
            memoryStream = new MemoryStream(user.Usimg);
            pictureBox2.Image = Image.FromStream(memoryStream);
        }
    }
}


主要看返回图片的方式
ReadUser(tel) 方法代码如下(示例):

//返回用户信息
         public User ReadUser(string tel) //用户主键查询
         {
             User user = new User();
             MySqlConnection con = new MySqlConnection(str);
             MySqlCommand cmd = new MySqlCommand();

             byte[] MyData = new byte[0];//转换
             try
             {
                 con.Open();
                 cmd.Connection = con;

                 cmd.CommandText = "select * from tb_user where tel=@tel "; //表的字段名=@新参数名
                 cmd.Parameters.Add(new MySqlParameter("tel", tel));

                 MySqlDataReader reader = cmd.ExecuteReader();
                 if (reader.Read())
                 {
                     //[]内的是表字段名
                     user.Address = reader["address"].ToString();

                     //返回图片的(主要看这个)
                     MyData = (byte[])reader["usimg"];//读取第一个图片的位流
                     MemoryStream memoryStream = null;
                     memoryStream = new MemoryStream(MyData);  //IO流
                     user.Usimg = MyData;

					//返回其他信息的
                     user.Tel = reader["tel"].ToString();
                     user.Name = reader["name"].ToString();
                     user.Sex = reader["sex"].ToString();
                     user.Pass = reader["pass"].ToString();

                 }
                 else
                 {
                     user.Tel = ""; //主键及user的返回值是否为空
                 }
             }
             catch (Exception ex)
             {
                 MessageBox.Show(ex.Message);
             }
             finally
             {
                 con.Close();
             }

             return user;
         }


三、使用步骤

1.注册

在这里插入图片描述

2.查看

在这里插入图片描述
这样就说明此次我们的功能已经实现。

总结

这里我们采用的是静态绑定用户主键数据,但是在平时的开发当中一般都是动态的,也就是界面传值查询,这个功能下一节再探讨,这一次先做上传图片的功能。有什么不懂的可以私信或者评论。

  • 5
    点赞
  • 31
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 3
    评论
评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

ItHeiMa小飞机

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值