一、思维导图

二、知识点描述

1、相关控件

①下拉框(ComboBox)

显示一个可编辑的文本框,其中包含一个允许值下拉列表。

②日历框(DateTimePick)

允许用户选择日期和时间,并以指定的格式显示该日期和时间。

③文本框(TextBox)

允许用户输入文本,并提供多行编辑和密码字符掩码功能。

④图片框(PictureBox)

指定支持事务处理初始化,允许用户加载图片。

⑤单选框(RadioButton)

当与其他单选按钮成对出现时,允许用户从一组选项中选择单个选项。

⑥标签(Label)
为控件提供运行时信息或说明性文字。

1.读取数据

(1)使用命令按钮button和文本框textbox直接输出数据

首先在窗体上添加文本框控件以显示输出的数据,然后添加一个命令按钮控件,在命名按钮下编写下列代码:

private void btn_Load_Click(object sender, EventArgs e){SqlConnection sqlConnection = new SqlConnection();                                              //声明并实例化SQL连接;sqlConnection.ConnectionString ="Server=(local);Database=EduBase48;Integrated Security=sspi";                             //在字符串变量中,描述连接字符串所需的服务器地址、数据库名称、集成安全性(即是否使用Windows验证);SqlCommand sqlCommand = new SqlCommand();                                                       //声明并实例化SQL命令;sqlCommand.Connection = sqlConnection;                                                          //将SQL命令的连接属性指向SQL连接;sqlCommand.CommandText = "SELECT * FROM tb_Student WHERE No=@No;";                              //指定SQL命令的命令文本;sqlCommand.Parameters.AddWithValue("@No", "3160707048");                                        //向SQL命令的参数集合添加参数的名称、值;sqlConnection.Open();                                                                           //打开SQL连接;SqlDataReader sqlDataReader = sqlCommand.ExecuteReader();                                       //调用SQL命令的方法ExecuteReader来执行命令,并获取数据阅读器;if (sqlDataReader.Read())                                                                       //若数据阅读器成功读取到下一条记录(首次查询则表示第一条记录);
            {this.txb_No.Text = sqlDataReader["No"].ToString();                                          //在数据阅读器的索引器中指定列名,从而访问当前记录的指定列的值,并赋予相应控件;this.txb_Name.Text = sqlDataReader["Name"].ToString();this.txb_Gender.Text = sqlDataReader["Gender"].ToString();this.txb_BirthDate.Text = ((DateTime)sqlDataReader["BirthDate"]).ToShortDateString();       //生日首先转换为日期时间类型,再调用ToShortDateString方法获取日期部分;this.txb_Class.Text = sqlDataReader["Class"].ToString();this.txb_Speciality.Text = sqlDataReader["Speciality"].ToString();}sqlDataReader.Close();                                                                          //关闭数据阅读器(同时关闭连接);}

(2)单选框radiobutton输出数据

使用单选框输出性别

首先将数据库中的性别改为bit类型,然后在窗体中加入单选框,在读取数据库的代码中编写以下两行代码:

this.rdb_Male.Checked = (bool)sqlDataReader["Gender"];
this.rdb_Female.Checked = !(bool)sqlDataReader["Gender"];

(3)日期控件DataTimePicker输出数据

直接在窗体中加入日期控件,并在读取数据库的代码中编写以下代码:

this.dtp_BirthDate.Value = (DateTime)sqlDataReader["BirthDate"];

(4)下拉框combobox输出数据

首先将学生表中的班级改成班级表中所对应的编码,然后编写以下代码,将班级表中的班级名显示在下拉框的选项中

sqlDataAdapter.Fill(classTable);                                                                //SQL数据适配器读取数据,并填充班级数据表;
this.cmb_Class.DataSource = classTable;                                                         //将班级下拉框的数据源设为班级数据表;
this.cmb_Class.DisplayMember = "Name";                                                          //将班级下拉框的显示成员设为班级数据表的名称列;
this.cmb_Class.ValueMember = "No";                                                              //将班级下拉框的值成员设为班级数据表的编号列;

然后在读取数据库的代码中编写以下代码:

this.cmb_Class.SelectedValue = (int)sqlDataReader["ClassNo"];

使用单选框radiobutton、日期控件DataTimePicker和下拉框combobox输出数据的完整代码如下:

private void btn_Load_Click(object sender, EventArgs e){SqlConnection sqlConnection = new SqlConnection();                                              //声明并实例化SQL连接;sqlConnection.ConnectionString ="Server=(local);Database=EduBase48;Integrated Security=sspi";                             //在字符串变量中,描述连接字符串所需的服务器地址、数据库名称、集成安全性(即是否使用Windows验证);SqlCommand sqlCommand = new SqlCommand();                                                       //声明并实例化SQL命令;SqlCommand sqlCommand2 = new SqlCommand();                                                      //声明并实例化SQL命令;sqlCommand.Connection = sqlConnection;                                                          //将SQL命令的连接属性指向SQL连接;sqlCommand2.Connection = sqlConnection;                                                         //将SQL命令的连接属性指向SQL连接;sqlCommand.CommandText = "SELECT * FROM tb_Class;";                                             //指定SQL命令的命令文本;该命令查询所有班级,以用作下拉框数据源;sqlCommand2.CommandText = "SELECT * FROM tb_Student WHERE No=@No;";                             //指定SQL命令的命令文本;该命令查询指定学生;sqlCommand2.Parameters.AddWithValue("@No", "3160707048");                                       //向SQL命令的参数集合添加参数的名称、值;SqlDataAdapter sqlDataAdapter = new SqlDataAdapter();                                           //声明并实例化SQL数据适配器,同时借助构造函数,将其SelectCommand属性设为先前创建的SQL命令;sqlDataAdapter.SelectCommand = sqlCommand;                                                      //将SQL数据适配器的查询命令属性指向SQL命令;DataTable classTable = new DataTable();                                                         //声明并实例化数据表,用于保存所有班级,以用作下拉框数据源;sqlConnection.Open();                                                                           //打开SQL连接;sqlDataAdapter.Fill(classTable);                                                                //SQL数据适配器读取数据,并填充班级数据表;this.cmb_Class.DataSource = classTable;                                                         //将班级下拉框的数据源设为班级数据表;this.cmb_Class.DisplayMember = "Name";                                                          //将班级下拉框的显示成员设为班级数据表的名称列;this.cmb_Class.ValueMember = "No";                                                              //将班级下拉框的值成员设为班级数据表的编号列;SqlDataReader sqlDataReader = sqlCommand2.ExecuteReader();                                      //调用SQL命令的方法ExecuteReader来执行命令,并获取数据阅读器;if (sqlDataReader.Read())                                                                       //若数据阅读器成功读取到下一条记录(首次查询则表示第一条记录);
            {this.txb_No.Text = sqlDataReader["No"].ToString();                                          //在数据阅读器的索引器中指定列名,从而访问当前记录的指定列的值,并赋予相应控件;this.txb_Name.Text = sqlDataReader["Name"].ToString();this.rdb_Male.Checked = (bool)sqlDataReader["Gender"];this.rdb_Female.Checked = !(bool)sqlDataReader["Gender"];this.dtp_BirthDate.Value = (DateTime)sqlDataReader["BirthDate"];this.cmb_Class.SelectedValue = (int)sqlDataReader["ClassNo"];this.txb_Speciality.Text = sqlDataReader["Speciality"].ToString();}sqlDataReader.Close();                                                                          //关闭数据阅读器(同时关闭连接);}

2.更新数据

更新数据需用到SQL语句如下:

sqlCommand.CommandText =                                                                        //指定SQL命令的命令文本;"UPDATE tb_Student"+ " SET Name=@Name,Gender=@Gender,BirthDate=@BirthDate,ClassNo=@ClassNo,Speciality=@Speciality"+ " WHERE No=@No;";

由于每个数据都有可能会被修改,所以需要将所有列(除了No)都写出来,因为此处使用学生信息为例,一般学号不会有修改,所以学号没有更新代码,更新数据的完整代码如下:

private void btn_Update_Click(object sender, EventArgs e){SqlConnection sqlConnection = new SqlConnection();                                              //声明并实例化SQL连接;sqlConnection.ConnectionString =ConfigurationManager.ConnectionStrings["Sql"].ConnectionString;                             //配置管理器从配置文件读取连接字符串,并将之赋予SQL连接的连接字符串属性;SqlCommand sqlCommand = new SqlCommand();                                                       //声明并实例化SQL命令;sqlCommand.Connection = sqlConnection;                                                          //将SQL命令的连接属性指向SQL连接;sqlCommand.CommandText =                                                                        //指定SQL命令的命令文本;"UPDATE tb_Student"+ " SET Name=@Name,Gender=@Gender,BirthDate=@BirthDate,ClassNo=@ClassNo,Speciality=@Speciality"+ " WHERE No=@No;";sqlCommand.Parameters.AddWithValue("@Name", this.txb_Name.Text.Trim());                         //向SQL命令的参数集合添加参数的名称、值;sqlCommand.Parameters.AddWithValue("@Gender", this.rdb_Male.Checked);sqlCommand.Parameters.AddWithValue("@BirthDate", this.dtp_BirthDate.Value);sqlCommand.Parameters.AddWithValue("@ClassNo", (int)this.cmb_Class.SelectedValue);sqlCommand.Parameters.AddWithValue("@Speciality", this.txb_Speciality.Text.Trim());     sqlCommand.Parameters.AddWithValue("@No", "3160707048");                                       sqlConnection.Open();                                                                           //打开SQL连接;int rowAffected = sqlCommand.ExecuteNonQuery();                                                 //调用SQL命令的方法ExecuteNonQuery来执行命令,向数据库写入数据,并返回受影响行数;sqlConnection.Close();                                                                          //关闭SQL连接;MessageBox.Show("更新" + rowAffected.ToString() + "行。");                                      //在消息框显示受影响行数;}

3.上传图片、输出图片与更新图片

(1)上传图片

首先数据库的表中须有一列图片列,接着在窗体里添加一个图片框和一个命令按钮以上传图片,以上传位图图片为例,编写以下代码:

private void btn_OpenPhoto_Click(object sender, EventArgs e){OpenFileDialog openPhotoDialog = new OpenFileDialog()                                           //声明并实例化打开文件对话框;{                                                                                           //在初始化器中,设置打开文件对话框的各属性;Title = "打开照片文件(位图格式)"                                                      //对话框标题;, Filter = "BMP Files (*.bmp)|*.bmp"                                                    //文件格式过滤器;, InitialDirectory = @"C:\"                                                             //初始目录;
                };if (openPhotoDialog.ShowDialog() == DialogResult.OK)                                            //显示打开文件对话框,若打开文件对话框的对话结果为点击OK键;
            {this.PhotoFileName = openPhotoDialog.FileName;                                              //将对话框获得的文件名,存入本窗体的私有字段中;this.ptb_Photo.Image = Image.FromFile(this.PhotoFileName);                                  //调用图像的静态方法FromFile从指定文件中读取图像,并赋予图像框;
            }}

上传图片后点击更新后可将图片保存至数据库中

因为图片在数据库中只能储存为二进制数据,所以需要进行转换,代码如下:

MemoryStream memoryStream = new MemoryStream();                                                 //声明并实例化内存流,用于读取照片的字节数据;
this.ptb_Photo.Image.Save(memoryStream, ImageFormat.Bmp);                                       //调用图像框的图像的静态方法Save,将图像保存至内存流;
byte[] photoBytes = new byte[memoryStream.Length];                                              //声明并实例化字节数组,用于保存照片数据;数组长度对应内存流长度;
memoryStream.Seek(0, SeekOrigin.Begin);                                                         //保存后的内存流的偏移位置在末尾,需通过查找来将偏移位置设为起始;
memoryStream.Read(photoBytes, 0, photoBytes.Length);                                            //将内存流读入字节数组;

在更新语句中编写下面一句代码:

sqlCommand.Parameters.AddWithValue("@Photo", photoBytes);

因为在数据库中图片被保存为二进制数据,所以在重新将存入数据库的图片输出时,需将二进制数据重新转化为图片形式,于是在读取数据代码中编写如下代码

photoBytes =(sqlDataReader["Photo"] == DBNull.Value ? null : (byte[])sqlDataReader["Photo"]);       //根据照片是否为数据库空值,分别将空值、转为字节数组的照片数据赋予事先声明的字节数组;

转载于:https://www.cnblogs.com/hawking-520/p/10693934.html

星尘小组第六周学习笔记—如何在各类控件中输入/输出数据相关推荐

  1. 如何在各类控件中输入/输出数据(学习笔记)

    一.知识点描述 1.相关控件 ①下拉框(ComboBox) 显示一个可编辑的文本框,其中包含一个允许值下拉列表. ②日历框(DateTimePick) 允许用户选择日期和时间,并以指定的格式显示该日期 ...

  2. ScalersTalk 机器学习小组第 21 周学习笔记(深度学习-10)

    ScalersTalk 机器学习小组第 21 周学习笔记(深度学习-10) Scalers点评:机器学习小组是成长会的内部小组,这是成长会机器学习小组第21周学习笔记,也是深度学习第10次的复盘笔记 ...

  3. C# 学习笔记(8) 控件的跨线程访问

    C# 学习笔记(8) 控件的跨线程访问 本文参考博客 C#多线程 https://www.cnblogs.com/dotnet261010/p/6159984.html C# 线程与进程 https: ...

  4. Python tkinter 学习笔记(2)-- 控件、组件(二)

    Python tkinter 学习笔记(1)-- 第一个窗口之HelloWorld 教程 Python tkinter 学习笔记(2)-- 控件.组件(一) > 续上一章节 Python tki ...

  5. Vue学习笔记:Element时间控件设置某一个日期禁止选择

    Vue学习笔记:Element时间控件添加一段时间禁止选择 需求:时间控件,当天之前禁止选择,某一个日期的之前时间禁止选择 文档: 代码实现:在时间控件上添加 :picker-options=&quo ...

  6. Duilib学习笔记《03》— 控件使用

    在前面已经对duilib有个一个基本的了解,并且创建了简单的空白窗体.这仅仅只是一个开始,如何去创建一个绚丽多彩的界面呢?这就需要一些控件元素(按钮.文本框.列表框等等)来完善. 一. Duilib控 ...

  7. 安卓学习笔记21:常用控件 - 列表视图

    文章目录 零.学习目标 一.列表视图概述 (一)继承关系图 (二)列表视图四要素 (三)四种适配器 二.基于数组适配器使用列表视图案例 -- 阅读古诗 (一)数组适配器 (二)运行效果 (三)涉及知识 ...

  8. 安卓学习笔记18:常用控件 - 按钮、图像视图和图像按钮

    文章目录 零.学习目标 一.按钮控件 1.继承关系图 2.常用属性 二.图像视图 1.继承关系图 2.常用属性 三.图像按钮 1.继承关系图 2.常用属性 四.教学案例 - 通过按钮缩放图片 (一)运 ...

  9. Android学习笔记(一)——控件布局常用属性

    LinearLayout线性布局 id:为控件指定相应的ID. width:控件的宽度. height:控件的高度. background:背景颜色. Orientation:控件的排列方向(默认是水 ...

  10. Coolite Toolkit学习笔记八:常用控件TabPanel

    TabPanel控件使用非常简单,但是功能却非常强大,它同MenuPanel.TreePanel一样提供了很多的集合属性,可以定制出丰富的应用.其中用得最多的就是他的Tabs属性,用于定义子标签选项, ...

最新文章

  1. jQuery中的常用内容总结(一)
  2. java如何记录查看记录_Java如何检查消息是否可记录?
  3. 跨平台、跨语言应用开发工具,Elements 介绍
  4. [转载] 将一个整数型字符串转换为一个整数
  5. LSI最长递增子序列(DP问题)
  6. sql表格模型获取记录内容_SQL Server和BI –如何使用Reporting Services 2016记录表格模型
  7. maven2+依赖传递
  8. [js高手之路] dom常用节点属性兼容性详解与应用
  9. linux从入门到精通张帆,Linux基础之文件系统简介及其系统管理工具
  10. python 端口扫描_Python实现的端口扫描功能
  11. 2022淘宝618超级喵运会怎么玩?2022淘宝618喵运会玩法技巧
  12. 【报告分享】 2020-2021年数字内容产业趋势报告-企鹅智库 (附下载)
  13. 什么是情感化设计?UI设计中情感化设计的目的
  14. r5 3600和i7 8700k 选哪个
  15. 商业研究(12):下厨房,美食菜谱分享社区及新型电商,唯有美食与爱不可辜负
  16. HDFS的设计目标是什么?
  17. ueditor的初始化使用
  18. win7更改锁屏壁纸-强迫症系列
  19. 图书管理系统之普通用户、超级管理员页面布局(四)
  20. JavaWeb-学生宿舍管理系统

热门文章

  1. 减小数据泄密负面影响的办法
  2. 联众创始人鲍岳桥:52 岁还在熬夜写代码! | 人物志
  3. 统计挖掘那些事(八)—— 分层抽样与交叉验证
  4. 临近失业,如何拯救自己?
  5. 越智能?越危险?技术到底应不应该进步?
  6. Quartz.Net进阶之三:SimpleTrigger详述
  7. 算法基本和常见排序算法
  8. -rw-r--r--@ what's @
  9. Sql server一些常见性能问题的总结
  10. 安装和启动tftp-server服务器及可能出现Redirecting to /bin/systemctl restart xinetd.service问题的解决方式...