C#Winform如何在控件中输入输出数据(第六周)

一、应用基础

(1)配置SQL连接

声明并实例化SQL连接与SQL命令,并将SQL命令的连接属性指向SQL连接;

SqlConnection sqlConnection = new SqlConnection();
SqlCommand sqlCommand = new SqlCommand(); 
sqlConnection.ConnectionString = "Server=(local);Database=EduBaseDemo;Integrated Security=sspi";  //在字符串变量中,描述连接字符串所需的服务器地址、数据库名称、集成安全性(即是否使用Windows验证);
sqlCommand1.Connection = sqlConnection;
sqlCommand2.Connection = sqlConnection;

指定SQL命令的输出命令文本;

sqlCommand1.CommandText = "SELECT * FROM tb_Class;";

指定SQL命令的输入命令文本;

 sqlCommand2.CommandText ="UPDATE tb_Student SET Name=@Name,Gender=@Gender,BirthDate=@BirthDate,ClassNo=@ClassNo,Speciality=@Speciality WHERE No=@No;";
(2)打开SQL连接
sqlConnection.Open();
sqlDataAdapter.Fill(classTable);//SQL数据适配器读取数据,并填充设定的数据表;

二、输出数据

1、下拉框(Combobox)

(1)构建存储数据的数据表(DataTable)
DataTable dataTable = new DataTable(); //声明并实例化数据表,用于保存数据,以用作下拉框数据源;
(2)构造数据适配器(SqlDataAdapter)

① 声明并实例化SQL数据适配器,同时借助构造函数,将其SelectCommand属性设为先前创建的SQL命令
②将SQL数据适配器的查询命令属性指向SQL命令

  SqlDataAdapter sqlDataAdapter = new SqlDataAdapter();
  sqlDataAdapter.SelectCommand = sqlCommand;  
  sqlDataAdapter.Fill(dataTable);//SQL数据适配器读取数据,并填充班级数据表;  
(3)设置Combobox数据源及基本配置

①DisplayMember:配置Combobox的显示成员
②ValueMember:配置Combobox的值成员

this.Combobox1.DataSource = dataTable;//将下拉框Combobox1的数据源设为班级数据表;
 this.Combobox1.DisplayMember = "Name";//将下拉框的显示成员设为数据表的名称列;
 this.Combobox1.ValueMember = "No"; //将下拉框的值成员设为班级数据表的编号列;     

2、文本框(TextBox)

(1)构建存储数据的数据表

调用SQL命令的方法ExecuteReader来执行命令,并获取数据阅读器;

 SqlDataReader sqlDataReader = sqlCommand.ExecuteReader();
(2)读取数据记录

在数据阅读器的索引器中指定列名,从而访问当前记录的指定列的值,并赋予TextBox;
【注意】将读取的数据类型转化为string类型

if (sqlDataReader.Read())//若数据阅读器成功读取到下一条记录(首次查询则表示第一条记录)
{
this.Text1.Text = sqlDataReader["No"].ToString();
}

3、单选按钮(RadioButton)

同理于文本框类型
【注意】将读取的数据转化为布尔类型

if (sqlDataReader.Read())
{
this.RadioButton1.Checked = (bool)sqlDataReader["Gender"];
}

4、日期控件(DateTimePicker)

同理于文本框类型
【注意】将读取的数据转化为日期类型

if (sqlDataReader.Read())
{
this.DateTimePicker1.Value = (DateTime)sqlDataReader["BirthDate"];
}

5、图像框(PictureBox)

①声明字节数组,用于保存照片数据;但先赋予空值

 byte[] photoBytes = null;

②根据照片是否为数据库空值,分别将空值、转为字节数组的照片数据赋予事先声明的字节数组

 photoBytes =(sqlDataReader["Photo"] == DBNull.Value ? null : (byte[])sqlDataReader["Photo"]); 
if (photoBytes != null){
MemoryStream memoryStream = new MemoryStream(photoBytes);//声明并实例化内存流,用于读取照片的字节数据;
this.PictureBox1.Image = Image.FromStream(memoryStream);//调用图像的静态方法FromStream从内存流中读取图像,并赋予图像框;
            }  

6、网格视图(DataGridView)

同理于下拉框类型

sqlDataAdapter2.Fill(studentTable);                                          this.DataGridView1.Columns.Clear();//数据网格视图的列集合清空;
this.DataGridView1.DataSource = studentTable;//将数据网格视图的数据源设为学生数据表;
this.DataGridView1.Columns["No"].HeaderText = "学号";//将数据网格视图的指定列的表头文本设为中文;
this.DataGridView1.Columns["Name"].HeaderText = "姓名";
this.DataGridView1.Columns["Gender"].HeaderText = "性别";

三、输入数据

1、文本框、单选按钮、日期控件等

向SQL命令的参数集合添加参数的名称、值;

sqlCommand.Parameters.AddWithValue("@Name", this.TextBox1.Text.Trim()); //输入文本框数据                      
sqlCommand.Parameters.AddWithValue("@Gender", this.RadioButton1.Checked);//输入单选按钮的值
sqlCommand.Parameters.AddWithValue("@BirthDate", this.DateTimePicker1.Value);//输入日期控件中的数据

调用SQL命令的方法ExecuteNonQuery来执行命令,向数据库写入数据,并返回受影响行数;

int rowAffected = sqlCommand.ExecuteNonQuery();                                               
sqlConnection.Close();                              

2、图像框(PictureBox)

将图像保存至内存流;将内存流读入用于保存图像数据的数组中,再将更新后的数组数据存入数据库中

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);

3、网格视图(DataGridView)

①向SQL命令的参数集合添加参数的名称、SQL Server数据类型、长度(仅用于定长类型)、所绑定的数据表中的列名;

sqlCommand.Parameters.Add("@Name",SqlDbType.VarChar,0,"Name");                          
sqlCommand.Parameters.Add("@Gender", SqlDbType.Bit, 0, "Gender");
     

②将SQL数据适配器的更新命令属性指向SQL输入命令;

sqlDataAdapter.UpdateCommand = sqlCommand2; 
DataTable dataTable = (DataTable)this.DataGridView1.DataSource;//声明数据表,并指向数据网格视图的数据源;数据源默认类型为object,还需强制转换类型;
sqlConnection.Open();//打开SQL连接;
int rowAffected = sqlDataAdapter.Update(dataTable);//SQL数据适配器根据学生数据表提交更新,并返回受影响行数;

在这里插入图片描述

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值