星尘小组第六周学习笔记—如何在各类控件中输入/输出数据
一、思维导图
二、知识点描述
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.相关控件 ①下拉框(ComboBox) 显示一个可编辑的文本框,其中包含一个允许值下拉列表. ②日历框(DateTimePick) 允许用户选择日期和时间,并以指定的格式显示该日期 ...
- ScalersTalk 机器学习小组第 21 周学习笔记(深度学习-10)
ScalersTalk 机器学习小组第 21 周学习笔记(深度学习-10) Scalers点评:机器学习小组是成长会的内部小组,这是成长会机器学习小组第21周学习笔记,也是深度学习第10次的复盘笔记 ...
- C# 学习笔记(8) 控件的跨线程访问
C# 学习笔记(8) 控件的跨线程访问 本文参考博客 C#多线程 https://www.cnblogs.com/dotnet261010/p/6159984.html C# 线程与进程 https: ...
- Python tkinter 学习笔记(2)-- 控件、组件(二)
Python tkinter 学习笔记(1)-- 第一个窗口之HelloWorld 教程 Python tkinter 学习笔记(2)-- 控件.组件(一) > 续上一章节 Python tki ...
- Vue学习笔记:Element时间控件设置某一个日期禁止选择
Vue学习笔记:Element时间控件添加一段时间禁止选择 需求:时间控件,当天之前禁止选择,某一个日期的之前时间禁止选择 文档: 代码实现:在时间控件上添加 :picker-options=&quo ...
- Duilib学习笔记《03》— 控件使用
在前面已经对duilib有个一个基本的了解,并且创建了简单的空白窗体.这仅仅只是一个开始,如何去创建一个绚丽多彩的界面呢?这就需要一些控件元素(按钮.文本框.列表框等等)来完善. 一. Duilib控 ...
- 安卓学习笔记21:常用控件 - 列表视图
文章目录 零.学习目标 一.列表视图概述 (一)继承关系图 (二)列表视图四要素 (三)四种适配器 二.基于数组适配器使用列表视图案例 -- 阅读古诗 (一)数组适配器 (二)运行效果 (三)涉及知识 ...
- 安卓学习笔记18:常用控件 - 按钮、图像视图和图像按钮
文章目录 零.学习目标 一.按钮控件 1.继承关系图 2.常用属性 二.图像视图 1.继承关系图 2.常用属性 三.图像按钮 1.继承关系图 2.常用属性 四.教学案例 - 通过按钮缩放图片 (一)运 ...
- Android学习笔记(一)——控件布局常用属性
LinearLayout线性布局 id:为控件指定相应的ID. width:控件的宽度. height:控件的高度. background:背景颜色. Orientation:控件的排列方向(默认是水 ...
- Coolite Toolkit学习笔记八:常用控件TabPanel
TabPanel控件使用非常简单,但是功能却非常强大,它同MenuPanel.TreePanel一样提供了很多的集合属性,可以定制出丰富的应用.其中用得最多的就是他的Tabs属性,用于定义子标签选项, ...
最新文章
- jQuery中的常用内容总结(一)
- java如何记录查看记录_Java如何检查消息是否可记录?
- 跨平台、跨语言应用开发工具,Elements 介绍
- [转载] 将一个整数型字符串转换为一个整数
- LSI最长递增子序列(DP问题)
- sql表格模型获取记录内容_SQL Server和BI –如何使用Reporting Services 2016记录表格模型
- maven2+依赖传递
- [js高手之路] dom常用节点属性兼容性详解与应用
- linux从入门到精通张帆,Linux基础之文件系统简介及其系统管理工具
- python 端口扫描_Python实现的端口扫描功能
- 2022淘宝618超级喵运会怎么玩?2022淘宝618喵运会玩法技巧
- 【报告分享】 2020-2021年数字内容产业趋势报告-企鹅智库 (附下载)
- 什么是情感化设计?UI设计中情感化设计的目的
- r5 3600和i7 8700k 选哪个
- 商业研究(12):下厨房,美食菜谱分享社区及新型电商,唯有美食与爱不可辜负
- HDFS的设计目标是什么?
- ueditor的初始化使用
- win7更改锁屏壁纸-强迫症系列
- 图书管理系统之普通用户、超级管理员页面布局(四)
- JavaWeb-学生宿舍管理系统
热门文章
- 减小数据泄密负面影响的办法
- 联众创始人鲍岳桥:52 岁还在熬夜写代码! | 人物志
- 统计挖掘那些事(八)—— 分层抽样与交叉验证
- 临近失业,如何拯救自己?
- 越智能?越危险?技术到底应不应该进步?
- Quartz.Net进阶之三:SimpleTrigger详述
- 算法基本和常见排序算法
- -rw-r--r--@ what's @
- Sql server一些常见性能问题的总结
- 安装和启动tftp-server服务器及可能出现Redirecting to /bin/systemctl restart xinetd.service问题的解决方式...