提示:文章写完后,目录可以自动生成,如何生成可参考右边的帮助文档
文章目录
前言
这一期我们来学习使用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.查看
这样就说明此次我们的功能已经实现。
总结
这里我们采用的是静态绑定用户主键数据,但是在平时的开发当中一般都是动态的,也就是界面传值查询,这个功能下一节再探讨,这一次先做上传图片的功能。有什么不懂的可以私信或者评论。