C#开发窗体程序全过程(项目目录、格式、控件使用、文件读写)

2023-05-16

目录

  • 第一章:WinForm基础
    • 一、概述
    • 二、在VS中新建窗体程序
    • 三、窗体(Form)
  • 第二章(上):控件与窗体
    • 一、文本编辑控件
    • 二、图片框:PictureBox
    • 三、定时器:Timer
  • 第二章(下):继续控件
    • 一、选择控件
    • 二、列表控件
    • 三、菜单栏和快捷菜单
    • 四、多窗体的实现(重点、难点)
  • 第三章:文件的读写
    • 一、概述
    • 二、文件的读取(StreamReader)
    • 三、文件的写入(StreamWriter)
    • 四、快速文件操作
  • 第四章:ADO.NET
    • 一、ADO.NET概述
    • 二、连接对象(SqlConnection)
    • 三、配置文件
    • 四、异常处理
  • 第五章:知识巩固
    • 一、Connection对象
  • 第六章:复习提升
    • 一、Command对象(SqlCommand)
    • 二、MD5加密
    • 三、Parameter对象(SqlParameter)
    • 四、DataReader对象(SqlDataReader)
  • 第七章:记事本开发
    •  https://www.cnblogs.com/xdzy/p/9458683.html

 

正文

回到顶部

第一章:WinForm基础

一、概述

1、Windows Form(简称WinForm)

是微软.NET平台下用于开发"图形界面"应用程序的组件。

2、C/S架构

客户机(Client)/服务器(Server),是软件系统体系结构。

通过它可以充分利用两端硬件环境的优势,将任务合理分配到Client端和Server端来实现,降低了系统的通讯开销。

 

二、在VS中新建窗体程序

1、认识窗体程序(第一个窗体程序)

1)窗体设计器:设置窗体界面(经常操作)

每个窗体都有对应的后台代码

shift + F7 / F7:查看源码

 

注:在窗体后台代码中,存在方法:InitializeComponent()

它的作用是:对当前窗体的控件进行初始化工作,此方法不能丢,否则窗体不能正常显示控件,如果要重载构造方法 ,在重载构造方法中也必须调用此方法。

F12查看方法的定义

 

2)工具箱:包含了程序所需的控件

操作:

2.1)选择控件,向窗体设计器拖动

2.2)双击控件

 

注:在WinForm中,所有的控件,包括窗体都是对象

 

3)解决方案资源管理器

3.1)项目

3.2)Properties:对当前项目的属性进行设置

3.3)引用

3.4)Resources:资源信息

3.5)窗体程序 --> Xxxx.cs

3.6)主程序(窗体程序的入口):Programe.cs,设置启动窗体:

static void Main()

{

​ Application.EnableVisualStyles();

​ Application.SetCompatibleTextRenderingDefault(false);

​ Application.Run(new 窗体名称());

}

4)属性面板

对控件进行相关的设置(经常操作)

选择不同的控件,属性面板的属性会不一样

左边是属性名,右边是属性值(需要用户设置)

5)事件:单击,双击,鼠标移动,离开,经过,键盘相关事件

表示触发程序执行的某件事发生的信号,如单击

控件包含:属性,方法,事件

 

2、开发窗体程序的步骤

1)新建窗体程序项目

2)打开窗体设备器,添加控件(工具箱)

3)选择控件,设置属性

注:在实际开发中,一般都会给控件取一个有意义的名字,便于调用

4)选择控件,添加相应事件(单击,双击,鼠标移动,离开,经过,键盘相关事件)

5)在事件方法中,编写代码实现业务功能

基于面向对象的思想来编写程序

控件是对象

对象名.属性 = 值 ;

对象名.方法() ;

 

控件名.属性 = 值 ;

控件名.方法() ;

 

6)根据需求重复以上工作

7)运行、测试

 

3、在后面章节,我们主要学习控件(对象)的三方面的内容

1)属性

2)方法

3)事件

三、窗体(Form)

1、常用属性

1)窗体名称:Name

注:在实例开发中,不要使用默认的名字,建议定义一个有意义的名称,方便调用

命名规范:frmXxxx

2)窗体标题 : Text

3)背景颜色 : BackColor

4)设置窗体背景图片:BackgroundImage

BackgroundImageLayout:设置背景图片布局

5)修改窗体的大小:Size(Width、Height)

6)设置按Enter键时所单击窗体上的按钮:AcceptButton

7)窗体的图标:Icon*.ico

8)窗体边框样式:FormBorderStyle

Fixed3D:固定的三维边框

FixedDialog:固定的对话框样式的粗边框

FixedSingle:固定的单行边框

FixedToolWindow:不可调整大小的工具窗口边框

None:无边框

Sizable:可调整大小的边框

SizableToolWindow:可调整大小的工具窗口边框

9)控件窗体的显示位置:StartPosition

CenterParent:窗体在其父窗体中居中

CenterScreen:窗体在屏幕中居中

Manual:由Location属性确定

WindowsDefaultBounds:Windows默认位置,其边界由Windows默认决定。

WindowsDefaultLocation:Windows默认位置,其尺寸在窗体大小中指定。

10)控件窗体的最大化和最小化

MaximizeBox

MinimizeBox

11)设置窗体启动时,默认是最大化还是最小化:WindowState

Normal:还原窗口

Minimized:最小化窗口

Maximized:最大化窗口

12)控件窗体总在最前:TopMost

13)设置窗体透明度:Opacity

 

2、窗体的方法(必须要实例化对象访问)

1)显示窗体

模式窗体:ShowDialog():只有关闭当前窗口才能访问另一个窗口

非模式窗体:Show()

2)Hide():隐藏窗体,不破坏窗体,也不释放资源

3)Close():关闭窗体,释放资源

 

3、事件

1)Activated:窗体激活

2)Load:窗体加载

3)FormClosing:窗体关闭

 

回到顶部

第二章(上):控件与窗体

一、文本编辑控件

1、标签:Label

1)作用:用于显示文字(标签、标题)

2)常用属性:

Text:设置显示的文本内容

ForeColor:设置前景颜色

AutoSize:是否自动调整大小

Font:设置字体

2、按钮:Button

1)作用:提供用户通过单击来执行各种各样的操作

2)常用属性:

BackgroundImage:背景图像

BackgroundImageLayout:设置背景图像的布局样式

FlatStyle:设置平面样式外观

Text:设置显示的文本内容

TextAlign:对齐方式

Enabled : 设置按钮是否可用

3)常用事件:

click

3、文本框:TextBox

1)作用

提供用户输入数据,或显示数据

默认单行

最多可以接收32767个字符

不包括制表符、图片

可以实现密码输入效果

2)常用属性

Text:设置/获取文本框中的内容

MaxLength:输入最大字符数

ReadOnly:是否只读(不可编辑)

PasswordChar:密码字符

MultiLine:是否为多行文本框

ScrollBars:为多行文本框时,设置滚动条

3)常用方法

Focus():获取焦点

Clear():清除文本框内容

4)常用事件

TextChanged:Text属性更改时发生

leave:当焦点离开控件时触发

 

4、富文本框:RichTextBox

1)作用

功能同上,比TextBox功能更强大

默认是多行

最多可以接收2147483647个字符

包括制表符、图片

无法实现密码输入效果

2)常用属性

3)常用方法

4)常用事件

Bitmap bmp = new Bitmap(@"D:\test\20140226082603.jpg");

Clipboard.SetDataObject(bmp);

DataFormats.Format dataFormat = DataFormats.GetFormat(DataFormats.Bitmap);//格式

if (richTextBox1.CanPaste(dataFormat))

​ richTextBox1.Paste(dataFormat);

 

二、图片框:PictureBox

1)作用

显示图片

支持bmp、jpeg、gif、png等格式

2)常用属性

Name : 控件名称,前缀pic

Image : 控件显示的图片

Image.FromFile("c:\1.jpg") ;

SizeMode:控制PictureBox将如何处理图片位置和控件大小

3)常用方法

4)常用事件

三、定时器:Timer

1)作用

控制每隔一段时间做某些操作

2)常用属性

Name : 控件名称

Enabled : 启用定时器

Interval : 设置时间间隔,单位是毫秒

1秒 = 1000毫秒

3)常用方法

4)常用事件

Tick : 每隔一段时间,所做的事情在此事件中实现

5)操作步骤:

第一:拖Timer控件到窗体中

第二:设置时间间隔--Interval

第三:添加Tick事件,实现每间隔一段时间所做事情(功能)

第四:启用定时器--Enabled=true ;

注:

1>各个控件必须指定Name属性值,便于调用

2>控件就是对象,因此,可以通过以下代码来设置属性:

设置属性:控件名.属性 = 值 ;

获取属性: 数据类型 变量名 = 控件名.属性 ;

3>控件都有以下三个特性:

属性

方法 -> [数据类型 变量名 = ]控件名.方法名([参数列表]) ;

事件

4>不规则窗体的移动

鼠标坐标位置:MousePosition

窗体坐标位置:Location

坐标对象:Point

鼠标按下事件:MouseDown

鼠标移动事件:MouseMove

 

回到顶部

第二章(下):继续控件

一、选择控件

1、单选框:RadioButton

1)作用:互斥选择一个内容

2)常用属性

Checked:是否已经选择

Text:显示内容

Appearance : 显示样式

3)常用事件

CheckedChaged:更改选择时发生

Click : 单击事件

注:在当前窗体默认只有一组单选框,可以结合GroupBox和Panel控件实现多组单选框。

 

2、多选框类:CheckBox

1)作用:选择多个内容

2)常用属性:

Checked:选择

Text:内容

Appearance : 显示样式

3)常用事件

Checkedchanged:更改选择时发生

 

二、列表控件

1、下拉列表(组合框):ComboBox

1)作用:用于下拉显示数据

2)常用属性:

Items:下拉列表的所有内容

Items.Count : 选项数量

MaxDroDownItems:设置下拉显示内容的数量

DropDownStyle:设置下拉列表框样式(不可编辑)

SelectedItem:当前选定的内容

SelectedIndex:设置/获取列表选中内容的下标索引(从0开始)

3)常用方法

ComboBox对象.FindString(内容) : 查找内容对应的下标位置(从0开始),如果找不到返回-1;

ComboBox对象.FindString(内容,下标位置) : 从指定下标位置开始查找内容对应的下标位置,如果找不到返回-1;

ComboBox对象.Items.Add(内容) : 添加内容;

ComboBox对象.Items.AddRange(new string[]{项1,项2,...,项n}) ;

ComboBox对象.Items.Insert(下标索引,内容) : 在指定索引位置添加内容;

ComboBox对象.Items.Remove(内容) : 删除内容;

ComboBox对象.Items.RemoveAt(下标索引) : 根据下标索引删除内容;

ComboBox对象.Items.Clear() : 清空内容;

4)常用事件

SelectedIndexChanged:改变下拉列表框时发生的事件

2、列表选择控件:ListBox

1)作用:把数据以列表的形式显示,用户可以选择其中的数据

​ 2)常用的属性:

Items:列表框的所有内容,是ArrayList类对象,内容是字符串

Items.Count:所有选项的数量

SelectedItems:获取包含ListBox中当前选定项的集合

SelectedItems.Count : 选中选项的数量

SelectedIndex : 设置/获取列表选中内容的下标索引(从0开始)

SelectedItem :返回当前选定的某一项,如果没选中,则发生异常

Text : 返回当前选定的某一项,如果没选中,则返回空字符串

SelectionMode:设置可选的条目数

Sorted:是否以字母的顺序排序

3)常用的方法

同ComboBox控件

ListBox对象.SetSelected(下标索引,bool) : 选择或取消选择某项内容。

 

三、菜单栏和快捷菜单

1、菜单栏:MenuStrip

文件(&F):添加快捷提示 -> alt + F

-:菜单分隔符

ShortcutKeys:设置快捷键

2、快捷菜单:ContextMenu

第一:设置菜单 (同上)

第二:关联控件 -> ContextMenuStrip属性

 

四、多窗体的实现(重点、难点)

1、面向对象的复习

1)类和对象

类:类是对象的概括(类是对象的模板)->抽象的、模糊的、不具体的

对象:对象是类的实例->具体的,实际存在的

注:概括:有用的,本质的,共同的

学生是一个类

每个学生都是一个对象

 

面向对象的操作步骤:

第一:定义类(对象的概括)

[访问修饰符] class 类名

{

​ //1.字段 -> 类(对象)的具体数据(信息)

​ private 数据类型 字段名 ;

​ //2.属性 -> 是对字段的封装,对字段数据进行访问

​ public 数据类型 属性名

​ {

​ set {字段名=value;}

​ get {return 字段名;}

​ }

​ //3.方法 -> 是类(对象)实现的功能(业务)

​ [访问修饰符] 数据类型 方法名([数据类型 形参1,...,数据类型 形参N])

​ {

​ 方法体 -> 具体功能的实现

​ [return 数据;]

​ }

​ 注:在方法内,如果没有返回值,则数据类型声明为void

​ }

​ 注:

​ 类的访问修饰符:public 、 internal(默认)

​ 类名、属性名、方法名使用帕斯卡名称规则

​ 字段名使用驼峰名称规则

​ 属性与字段息息相关(名称一般一样)

​ 特殊方法:构造方法

​ 方法名与类名相同

​ 没有返回值

​ 不能手动调用,在实例化对象时自动调用

​ 在实例化对象的同时,初始化对象

​ 在类中,如果用户没有定义构造方法,则默认存在一个构造方法

​ 语法如下:

​ public 方法名类名

​ {

​ }

第二:实例化对象(创建对象)

类名 对象名 = new 类名() ;

第三:初始化对象 -> 给对象的字段赋值

对象名.属性 = 值 ;

第四:操作 -> 调用方法

[数据类型 变量名 = ]对象名.方法名([参数列表]) ;

 

2、建立多窗体程序

//第一:创建窗体对象

窗体类 窗体对象 = new 窗体类() ;

//第二:显示窗体

窗体对象.Show() ;

窗体对象.ShowDialog() ;

if(窗体对象==null || 窗体对象.IsDisposed)

{

​ 窗体对象 = new 窗体类() ;

​ 窗体对象.Show() ;

}

 

3、传参 -> 构造方法

第一:创建窗体对象,把数据放在构造方法中传递

窗体类 窗体对象 = new 窗体类(数据1,数据2,...,数据n) ;

 

注:

​ 在窗体类中,默认只有一个缺省的构造方法(没有参数的构造方法)

​ 在窗体类中,必须存在对应的构造方法,且InitializeComponent()不能丢

 

第二:在窗体类中,定义对应参数的构造方法

第三:在窗体类中,定义对应的全局变量,接收构造方法获取的参数数据

第四:使用传递过来的数据->调用全局变量

第五:调用方法,显示窗体

窗体对象.Show() ;

 

注意:

1)如果要传递多个数据,且这些数据都是相关的,我们一般把这些数据封装成相关的对象进行传递。

2)如果在第二个窗体中,要操作第一个窗体,怎么办呢?

在创建第二个窗体实例对象时,通过构造方法,把第一个窗体传递过去:

窗体类 窗体对象 = new 窗体类(this) ;

窗体类 窗体对象 = new 窗体类(this,数据1,...,数据N) ;

4、返回值

 

回到顶部

第三章:文件的读写

一、概述

1、流:相当于一个管道,C#程序通过流来读写文件

流,分为:

输入流 : 相当于程序而言,数据从文件写入到程序这个过程

输出流 : 相当于程序而方,数据从程序输出到文件中的过程

 

2、FileStream对象

FileStream对象表示在磁盘或网络路径上指向文件的流(指向要操作的文件);

在FileStream的基础上,使用StreamReader或StreamWriter实现文件的读写(字节方式)。

FileStream 对象 = new FileStream(String path,FileModel model[,FileAccess access,FileShare share])

参数说明:

path:指向要操作的文件(路径+文件名)

model:打开文件的方式

access:访问文件的方式

share:文件共享方式

二、文件的读取(StreamReader)

1、语法

StreamReader 对象 = new StreamReader(Stream stream[,Encoding.字符编码]) ;

StreamReader 对象 = new StreamReader(filename[,Encoding.字符编码]) ;

参数说明:

stream : 要读取的文件流(FileStrem是其中的Stream)

filename : 路径+文件名

Encoding : 字符编码

2、方法

ReadLine() : 一行一行地读取文件,读到文件的末尾时,返回null

ReadToEnd() : 从文件的开始到末尾,一次性读取

Close() : 关闭流

三、文件的写入(StreamWriter)

1、语法:

StreamWriter 对象 = new StreamWriter(Stream stream) ;

StreamWriter 对象 = new StreamWriter(Stream stream,bool append,Encoding encoding) ;

StreamWriter 对象 = new StreamWriter(string filename,bool append,Encoding encoding) ;

参数说明:

stream : 要写入文件的流

append : 是否追加

encoding : 字符编码

filename : 路径+文件名

 

2、方法

Write() : 写入数据

WriteLine() : 写入数据并换行

flush() : 清空缓冲区

Close() : 关闭流

 

四、快速文件操作

1、文件写入

1)File.AppendAllText(string path,string content,Encoding encoding)

path : 路径+文件

content : 向文件添加的内容

encoding : 编码

添加内容到文件,如果文件存在,追加内容到文件,最后关闭文件;

如果文件不存在,则创建文件并添加内容到文件,最后关闭文件

File.AppendAllText("e:\bb.txt","你好",Encoding.Default);

 

2)File.WriteAllBytes(string path,byte[] bytes)

File.WriteAllBytes("e:\bb.txt", Encoding.Default.GetBytes("你好"));

 

3)File.WriteAllLines(string path,string[] content,Encoding encoding) ;

string[] str = { "我", "好" };

File.WriteAllLines("e:\bb.txt", str, Encoding.Default);

 

4)File.WriteAllText(string path,string content,Encoding encoding) ;

File.WriteAllText("e:\bb.txt", "好好学习", Encoding.Default);

 

2、文件读取

1)File.ReadAllText(string path[,Encoding encoding]) ;

String str = File.ReadAllText("e:\bb.txt",Encoding.Default);

 

2)File.ReadAllBytes(string path) ;

byte[] str = File.ReadAllBytes("e:\bb.txt");

MessageBox.Show(System.Text.Encoding.Default.GetString(str));

 

3)File.ReadAllLines(string path[,Encoding encoding]) ;

string[] str = File.ReadAllLines("e:\bb.txt", Encoding.Default);

MessageBox.Show(string.Join(",",str));

 

3、文件操作

1)File.Encrypt(string path) : 加密文件

2)File.Decrypt(string path) : 解密文件

3)File.Exists(string path) : 判断文件是否存在

4)File.Delete(string path) : 删除文件

5)File.Copy(string sourceFile,String DestFile) : 复制文件

 

回到顶部

第四章:ADO.NET

一、ADO.NET概述

1、概述

(ActiveX Data Objects),数据库访问的方法和技术(组件)。

 

2、组成

1).NET框架数据提供程序(.NET Framework Data Provider)

2)数据集(DataSet)

注:

2.1)以上两个组成部分包含相关的数据库操作对象,如:

Connection:连接数据库

Command:执行SQL语句

DataReader:读取查询结果

DataAdapter:桥接数据库与数据集的联系,把数据库中的数据填充到DataSet中

DataSet: 数据在内存中缓存

...

2.2)SQL Server的数据提供程序中,其命名空间为:System.Data.SqlClient

SqlXxxxx

二、连接对象(SqlConnection)

连接SQL Server数据库

System.Data.SqlClient

 

三、配置文件

1、在项目中新建一个配置文件,命名为:App.config

右键项目 -> 添加 -> 新建项 -> 应用程序配置文件 -> 确定

注意:如果项目中已经存在App.config文件,则不需要添加

 

2、在App.config文件中,进行配置

方式一:

<connectionStrings>

<add name="dbstr" connectionString="Server=.;uid=sa;pwd=;DataBase=abc"/>

</connectionStrings>

说明:

1)connectionStrings : 表示定义连接字符串

2)add : 添加具体的连接字符串

name : 字符串的名称

connectionString : 连接字符串的具体内容

3)相当于在App.config文件中定义:

string dbstr = "Server=.;uid=sa;pwd=;DataBase=abc" ;

 

方式二:

<appSettings>

<add key="connStr" value="Server=.;uid=sa;pwd=;DataBase=abc"/>

<add key="age" value="18"/>

</appSettings>

 

3.在程序中,读取App.config文件中的连接信息

string str1 = ConfigurationSettings.AppSettings["dbstr"];

string str2 = ConfigurationManager.AppSettings["dbstr"];

string str3 = ConfigurationManager.ConnectionStrings["dbstr"].ConnectionString;

注意:需要在项目中,添加引用System.Configuration,操作如下:

右键项目 -> 添加 -> 引用 -> 勾选System.Configuration -> 确定

四、异常处理

特殊的程序控制语句: 程序出错了,保证程序能正常的执行,而不会被终止

try

{

​ 有可能发生错误的代码 ;

​ conn.Open() ;

​ ....

​ conn.Close() ;

​ }

​ catch(Xxxxx x)

​ {

​ 对错误进行相关的处理

​ }

​ [

​ finally

​ {

​ 不管正确与否,都会被执行->一般用于释放资源

​ conn.Close() ;

​ }

​ ]

​ 注:Xxxxx表示的异常的种类

​ Exception : 能捕获所有的异常

 

回到顶部

第五章:知识巩固

一、Connection对象

1、使用SqlConnection对象连接数据库

第一步:字义连接数据库字符串

第二步:创建连接对象并,打开数据库连接,详细参数如下表所示:

第三步:做相关操作

参数说明
Provider这个属性用于设置或返回连接提供程序的名称,仅用于OleDBConnection对象
Connection Timeout在终止尝试并产生异常前,等连接到服务器的连接时间长度(以秒为单位),默认值是15秒
Initial Catalog或DataBase连接数据库的名称
Data Source或Server连接打开使用的SQL Server名称
Password或pwd连接数据的密码
User ID或uidSQL SERVER 登录帐户

 

2.使用OleDbConnection对象连接数据库

第一步:定义连接数据库字符串

第二步:打开数据库连接,详细参数如下表所示:

第三步:相关操作

 

回到顶部

第六章:复习提升

一、Command对象(SqlCommand)

1、作用

设置和执行SQL语句的对象。

 

2、常用属性

CommandType:获取和设置Command对象要执行命令的类型

CommandText:获取和设置要对数据源执行的SQL语句或存储过程名或表名

CommandTimeOut:获取和设置在终止对执行命令的尝试并生成错误之前的待时间

Connection:获取或设置Command对象使用的Connection对象的名称

Parameters: 获取Command对象需要使用的参数集合

Transaction:获取或设置将在SqlCommand对象执行的SqlTransaction对象

 

3、常用方法

ExecuteNonQuery:用户执行非Select命令,返回受影响的数据行数

ExecuteScalar:用于执行Select命令,返回数据中第一行第一列的值

ExecuteReader:执行Select命令,并返回一个DataReader对象

 

4、使用

类名 对象名 = new 类名() ;

SqlCommand cmd = new SqlCommand() ;

SqlCommand cmd = new SqlCommand(string sql) ;

SqlCommand cmd = new SqlCommand(string sql,SqlConnection conn) ;

SqlCommand cmd = new SqlCommand(string sql,SqlConnection conn,SqlTransaction tran) ;

 

5、实现CRUD的操作

第一:创建连接对象 -> SqlConnection

1)定义连接字符串

string dbstr = "server=.;uid=sa;pwd=123;database=xsgl" ;

2)创建SqlConnection并设置连接字符串

SqlConnection conn = new SqlConnection(dbstr) ;

3)打开连接

conn.Open() ;

第二:创建语句对象 -> SqlCommand

1)创建语句对象

SqlCommand cmd = new SqlCommand() ;

2)设置属性

cmd.CommandText = "SQL语句" ;

cmd.Connection = 连接对象 ;

第三:执行SQL语句 -> 返回受影响的记录数/DataReader对象

命令对象.ExecuteNonQuery() ;

命令对象.ExecuteScalar() ;

命令对象.ExecuteReader() ;

第四:关闭对象

连接对象.Close() ;

 

二、MD5加密

1、引用命名空间

using System.Security.Cryptography ;

2、操作

//第一:创建Md5加密对象

MD5CryptoServiceProvider md5 = new MD5CryptoServiceProvider();

//第二:把加密的数据转换为字节数组

byte[] bytes = Encoding.UTF8.GetBytes("明文");

//第三:对字节数组进行加密

byte[] newBytes = md5.ComputeHash(bytes);

//第四:把字符数组转换字符串,输出结果

MessageBox.Show(BitConverter.ToString(bytes));

注:MD5加密后,得到一个32位的十六进制的字符串

 

三、Parameter对象(SqlParameter)

1、作用:给SQL语句设置参数

 

2、好处

1)操作方便

2)防止SQL注入,提高安全性

3)提高查询执行性能

 

3、使用-创建对象(构造方法)

SqlParameter param = new SqlParameter() ;

SqlParameter param = new SqlParameter(参数名称,数据类型) ;

SqlParameter param = new SqlParameter(参数名称,数据) ;

SqlParameter param = new SqlParameter(参数名称,数据类型,大小) ;

4、常用属性

Direction:获取或设置一个值,该值表示参数是只可输入、只可输出、双向还是存储过程返回值参数。

ParameterName:获取或设置参数的名称。

Size:获取或设置列中数据的最大大小。

SqlDbType:获取或设置参数的数据类型,语法:SqlDbType.Xxxx。

Value:获取或设置该参数的值。

 

5、常用方法

Command对象.Parameters.add(Parameter对象) ;

Command对象.Parameters.AddRange(Parameter对象数组) ;

6、操作

第一:定义参数化的SQL语句,参数的语法:@参数名称

string sql = "insert into student(name,age) values (@xm,@age)" ;

 

第二:创建SqlParameter对象或SqlParameter对象数组

SqlParameter param1 = new SqlParameter("@xm","张三") ;

SqlParameter param2 = new SqlParameter("@age",18) ;

SqlParameter[] ps =

{

​ new SqlParameter("@xm","张三"),

​ new SqlParameter("@age",18)

}

 

第三:添加参数

Command对象.Parameters.add(param1) ;

Command对象.Parameters.add(param2) ;

Command对象.Parameters.AddRange(ps) ;

四、DataReader对象(SqlDataReader)

1、作用:读取查询的数据

 

2、特点

只读(而DataSet可读可写)

以流的方式,单向读取

一次只能读取一条记录

3、使用

通过Command对象的ExecuteReader()方法返回(创建)DataReader对象

SqlDataReader reader = new SqlDataReader() ;

4、常用属性

FieldCount:返回列数(字段数量)

HasRows:是否存在数据(记录、行)

IsClosed:DataReader对象是否关闭

 

5、常用方法

Read():读取记录中的数据

Close():关闭DataReader对象

GetValue(字段的下标索引):获取指定字段的数据

GetValues():获取全部字段的数据

IsNull("userId"):判断指定字段的数据是否为Null值

 

6、操作

第一:执行查询的SQL语句,获取DataReader对象的实例

SqlDataReader reader = Command对象.ExecuteReader() ;

第二:循环的读到数据

while(reader.read()

{

​ //读取数据

}

注:读取数据的方式有:

方式一:通过下标读取(下标从0开始)

数据类型 变量 = (数据类型)SqlDataReader对象[下标] ;

方式二:通过字段名称读取

数据类型 变量 = (数据类型)SqlDataReader对象["字段名称"] ;

第三:关闭SqlDataReader对象

reader.Close() ;

 

回到顶部

第七章:记事本开发

 https://www.cnblogs.com/xdzy/p/9458683.html

 

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

C#开发窗体程序全过程(项目目录、格式、控件使用、文件读写) 的相关文章

  • RunnerGo开源版的安装教程(Windows)

    文章目录 一 启动Hyper V服务二 安装docker三 准备 docker 和 docker compose 环境四 cd runnergo 进入到目录五 配置文件 config env 修改 默认基本可以不用改六 修改应用暴露的端口号
  • Docker Desktop requires a newer WSL kernel version.

    问题描述 xff1a Docker Desktop requires a newer WSL kernel version 问题截图 xff1a 问题原因 xff1a WSL不是最新版 解决方案 xff1a 适用于 Linux 的 Wind
  • 傅里叶变换(一)——认识傅里叶变换

    注 xff1a 本文为博主参考书籍和他人文章并加上自己的理解所编 xff0c 作为学习笔记使用并将其分享出去供大家学习 若涉及到引用您的文章内容请评论区告知 xff01 如有错误欢迎指正 xff01 参考文章 xff1a https zhu
  • 解决笔记本装linux后触摸板无法用的问题

    困扰好久 xff0c 好像没多少人遇到类似的问题 xff1f 仅把我的解决办法分享出来提供一个思路 那就是 把内核版本升级到4 17以上 至于更换内核教程 xff0c 参考这里安装和使用新的内核 要比教程里多下载一个 linux modul
  • 快速幂和矩阵快速幂

    快速幂 快速幂是数论中最简单的几种算法之一 xff0c 顾名思义 xff0c 就是快速计算某个数的多少次幂 相较于传统循环pow的计算方法 xff0c 快速幂的复杂度为 O l o g 2
  • ucosii中消息队列、消息邮箱、信号量的区别

    1 用信号量进行行为同步时 xff0c 只能提供同步的时刻信息 xff0c 不能提供内容信息 若被控制方要求得到控制方的内容信息时 xff0c 可以使用消息邮箱或消息队列 2 但由于消息邮箱里只能存放一条消息 xff0c 所以使用消息邮箱进
  • 项目时间管理的几种方法

    随着项目活动分解的深入和细化 xff0c 工作分解结构 WBS 可能会需要修改 xff0c 这也会影响项目的其他部分 例如成本估算 xff0c 在更详尽地考虑了活动后 xff0c 成本可能会有所增加 xff0c 因此完成活动定义后 xff0
  • 【内网学习笔记】25、Exchange 邮件服务器

    1 Exchange 的基本操作 在 Exchange 服务器上的 PowerShell 里进行以下操作 将 Exchange 管理单元添加到当前会话中 add pssnapin microsoft exchange 查看邮件数据库 Get
  • cuda.tensor转为numpy, 以及numpy与tensor互相转换

    1 cuda tensor转为numpy 解决 TypeError can 39 t convert cuda 0 device type tensor to numpy Use Tensor cpu to copy the tensor
  • [软件工程]第三章 结构化方法————(2020.6.11学习笔记)

    目录 1 xff0c 第一节 结构化需求分析 2 xff0c 第二节 结构化设计 第一节 结构化需求分析 需求分析面临的挑战 xff08 1 xff09 问题空间理解 xff08 2 xff09 人与人之间的通信 xff0c 有效沟通 xf
  • ESP8266系列WIFI模块的使用·

    一 概述 ESP8266是由乐鑫公司出品的一款物联网芯片 xff0c 因为价格较低 xff0c 性能稳定等收到很大关注 该芯片可工作于三种种模式下 xff0c 分别是 xff1a AP模式 xff0c station模式以及混合模式 xff
  • idea中使用actiBPM

    在idea中actiBPM插件的支持不是太友好 xff0c 顺便附上插件下载地址 链接 xff1a https pan baidu com s 1cyaDGDXWtJuWys3WVG98qA 提取码 xff1a onuz 因此在这里记录一下
  • 动态规划、贪心算法、分治算法的优缺点分析

    动态规划模型相对于静态规划模型的优点 xff1a 1 能够得到全局最优解 xff1b 2 可以得到一族最优解 xff1b 3 由于动态规划方法反映了动态过程演变的联系和特征 xff0c 在计算时可以利用实际知识和经验提高求解效率 动态规划模
  • 如何在vscode上运行调试C++(最简单的方法)

    Visual Studio Code vscode同样是微软出品的 支持 看上面的vside介绍吧 就省略了 人称宇宙第一编辑器 作为编辑器 它几乎支持所有的语言 对应语言风格的高亮 自动缩进 代码纠错 代码提示和代码补全等 要是有相应的编
  • visual studio中,已经安装完成后如何再安装其他组件(即在安装过程中未勾选的)怎么办?

    方法一 xff1a 控制面板 gt 程序 程序和功能 右键visual studio 单击更改 下面有三个按钮 单击更改 xff0c 把需要安装的组件全钩 xff0c 然后点击更改即可 1 在win10界面左下角搜索 控制面板 2 寻找程序
  • Unity can't be installed on this disk.The contents of this disk can't be changed.

    1 问题 在使用mac下Unity的时候 xff0c 通常情况下我们的方法都是通过Hub的安装按钮下载 但是 xff0c 很多时候上面并没有我们需要的版本 于是我们傻乎乎的通过点击上面的 xff1a 官方发布网站 进行下载 在下载的第五个步
  • Unity之【使用Blend-Tree】

    Blended Tree 材料准备创建Animator创建Controller配置混合树脚本代码效果演示 材料准备 人物模型和动画 直接去Unity素材库里找 xff0c 动画可以找可以自己录制 Unity编辑器 创建Animator 步骤
  • 【GIT】git个人笔记

    GIT个人手册 版本 日期 修订内容 作者 V01 2019 06 25 初稿 备注 xff1a 使用中不断迭代完善 xff0c 其他人使用中有其他总结的 xff0c 可以补充 目录 第一章 说明 一 1 1 GIT 中文手册 一 1 2
  • linux常用开关机指令

    关机命令 xff1a shutdown h now xff08 立刻进行关机 xff09 halt xff08 立刻进行关机 xff09 poweroff xff08 立刻进行关机 xff09 重启命令 xff1a shutdown r n
  • _vimrc (linux版)

    一般放在 xff1a etc vim span class token string 34 vimrc 34 span span class token function vim span config span class token f

随机推荐

  • 01_Unity事件函数OnMouseDown生效条件

    前言 Unity提供了OnMouseDown xff0c OnMouseEnter xff0c OnMouseExit等方法 xff0c 这些方法可以很方便的帮助我们处理鼠标的时间响应 但是需要注意他的生效条件 xff0c 最近我在制作视频
  • 算法题型:滑动窗口(leetcode 209)

    一 209 长度最小的子数组 难度中等 题目描述 给定一个含有 n 个正整数的数组和一个正整数 s xff0c 找出该数组中满足其和 s 的长度最小的连续子数组 如果不存在符合条件的连续子数组 xff0c 返回 0 示例 输入 s 61 7
  • 前端:bootstrap table表格属性、列属性、事件、方法

    目录 一 使用前提 二 基本属性 列参数 事件 方法 多语言 一 使用前提 1 在html中引用table相应的包 lt link rel 61 34 stylesheet 34 type 61 34 text css 34 href 61
  • Git学习(一):Git介绍、仓库和分支等基本概念解释

    目录 一 Git介绍 二 关于git仓库和分支的解释 1 仓库 2 分支 3 例子解释 4 本地与远程建立联系 5 git merge命令解释 6 Merge Request解释 7 尽量避免冲突的做法 8 Upstream概念及使用 9
  • Ubuntu 解决wps缺乏字体

    文章目录 Ubuntu 解决wps缺乏字体 Ubuntu 解决wps缺乏字体 移植windows字体 xff1a 复制 C Windows Fonts 下的字体 到 usr share fonts truetype windows font
  • TensorFlow2安装(超详细步骤-人工智能实践)

    TensorFlow2安装教程 1 前言1 1 版本记录1 2 工具简介 2 详细步骤及安装语句2 1 安装Anaconda2 2 TensoFlow安装2 3 验证是否成功2 4 PyCharm下载与安装2 5 PyCharm环境配置2
  • 图像识别-数据清洗

    1 删除不清晰的图片 xff08 由于图片是从视频里截取到的 xff0c 摄像头在移动的过程中 xff0c 会出现自动对焦 xff09 模糊图片示例 xff1a 2 删除重复度高的图片 xff08 相似度高的图片 xff0c 无法给模型提供
  • 【Linux】nm命令|查看动态库包含的函数符号

    目录 0 前言 1 nm简介 2 nm命令用法和参数说明 3 nm用法和结果说明 4 nm 提示 no symbol 的问题 xff08 strip xff09 0 前言 下文1 3 摘抄自 xff1a Linux nm命令详解 https
  • Xmanager 5远程连接CentOS7图形化界面

    1 安装Xmanager 5 下载链接 xff1a https pan baidu com s 1JwBk3UB4ErIDheivKv4 NA 提取码 xff1a cw04 双击xmgr5 wm exe进行安装 点击 下一步 选择 我接受许
  • ROS遇到问题:rosdep找不到

    当在catkin工作区创建好了包以后 xff0c 要rospack depends1 beginner tutorials xff0c 出现了以下的提示错误 xff1a rospack Error the rosdep view is em
  • 纯JavaScript实现一个带cookie的学生管理系统

    由来 之前写过一个Jsp amp Servlet版本的学生管理系统 发出来之后 xff0c 有一个网友找我给他写JavaScript版本的 xff0c 时间也过去很久了 xff0c 我估摸着他那门课已经结束了 xff0c 所以整理了一下代码
  • FreeRTOS互斥信号量与二值信号量使用时的区别

    1 互斥信号量 互斥信号量的申请与释放是要在同一个任务中进行的 xff0c 不能在一个任务中申请而在另一个任务中释放 互斥信号量主要解决的是 xff0c 我在用的时候 xff0c 别人都不能用 举个例子 xff0c 我在像一段内存中写数据的
  • 小白入门photoscan

    1 安装 我装的是photoscanPro 1 4 5版本 注 xff1a 刚开始是在官网上下载的 xff0c 要收费就点了试用 xff0c 结果当我等了一天把将近200张图片处理完后 xff0c 告诉我试用版不能保存文件 绝望 所以要是像
  • matlab学习(1)strsplit与strtok

    strsplit函数用法 xff1a lt 1 gt 默认使用空格符分割 返回一个cell数组 lt 2 gt 也可以指定第二个参数进行分割 lt 3 gt 第二个参数也可以时包含多个分隔符的元胞数组 lt 4 gt strsplit还可以
  • latex之注释快捷键

    注释快捷键 ctrl 43 T 注释掉选中区域 ctrl U 解除选中区域的注释
  • Ceres-solver安装(win10+vs2015)

    Ceres solver安装 Vs2015 43 win10 文件已经上传至 永久有效 网盘 xff1a https pan baidu com s 1Vj n2Nbp9WFVlbjuXV OxQ 密码 xff1a 3rvo 1 将网盘里的
  • 关于Intellij IDEA的pom.xml添加依赖后仍找不到

    1 在pom xml中添加了junit依赖 也执行了项目 gt reimport xff0c 在本地仓库也确实存在junit依赖包 xff0c 打开里面的jar包也确实有Test class After class等文件 但是编译时仍然说找
  • 【Dll调试】DLL调试方法

    dll本身是没法运行的 xff0c 必须在其它工程调用dll时候才会运行 所以 xff0c 调试dll首先要将调用dll的工程和dll工程联系起来 解决方案中添加dll工程 xff1a 现在dll 和 应用程序两个工程就都在一个解决方案里了
  • 【原创】linux下将Python命令默认指向为Python3

    linux下输入Python命令默认指向的是 usr bin python 因此 xff0c 为了方便使用 xff0c 安装了python3后 xff0c 我们一般会创建软链接使 usr bin python指向 usr bin pytho
  • C#开发窗体程序全过程(项目目录、格式、控件使用、文件读写)

    目录 第一章 xff1a WinForm基础 一 概述二 在VS中新建窗体程序三 窗体 xff08 Form xff09 第二章 xff08 上 xff09 xff1a 控件与窗体 一 文本编辑控件二 图片框 xff1a PictureBo