第一章(用Hello ACCP.NET热身(一))
1.打开解决方案资源管理器中的解决方案:
在VS的菜单中选择“工具”→“选项”选项,打开“选项”对话框,在左边选择“项目和解决方案”,在右边选中“总是显示解决方案”复选框。
2.C#与Java不同的是:
1)C#不要求类名必须与源文件的名字一样。
2)组织代码的方式:C#使用命名空间(namespace),Java使用包(package),
3)引入命名空间或包的关键字:C#使用(using),Java使用(import)
4)程序入口:C#使用Main有4种形式(返回值还可以是int类型),Java使用main只有一种。
5)常用的数据类型:C#中布尔类型的关键字用bool,Java中的关键字用boolean
C#中的字符串数据类型是string ,Java中的关键字是String
3.C#中变量的命名方式与Java基本相同,只是“$”符号在C#中式不能使用的。
4.C#中的运算符也与Java中的运算符相同。
5.Console类
在格式字符串中,可以使用\n(换行)和\t(制表)来控制输出。
向控制台输出 利用Console.WriteLine(); Console.Write(); 前者输出后换行,后者输出后不换行。
从控制台输入 利用Console.ReadLine();
int.Parse()方法的作用是把字符串转换为整数。
例:int age = int.Parse(Console.ReadLine());
6.C#中的条件判断
与Java中的判断基本相同。但是switch的用法有所不同。
Java语言允许case中没有break语句,如果当前执行的case中没有break语句,程序会继续执行下一个case,直到遇到break语句跳转或执行完switch语句, 并且switch中要判断的表达式的值或变量必须为整型或字符型。
C#语言中要求每个case和default语句中都必须有break语句,除非两个case中间没有其他语句,那么前一个case可以不包含break, switch中要判断的表达式的值或变量还可以是字符串类型
第二章(用Hello ACCP.NET热身(二))
1. 基本的循环语句
在Java中有while循环、do…while循环、for循环,C#中也有这三种循环结构,而且同Java中的语法和执行过程完全一样,不过C#中多了一种foreach循环
foreach循环语法
foreach(类型 元素(局部变量) in 集合或者数组)
{
//代码块
}
2. continue 和break语句的用法和Java中的用法都一样。
continue语句用在内层循环,跳转时是跳过内层循环中的剩余语句而执行内层循环中下一次循环。
break语句也是用在内层循环,它是跳出整个内层循环。
3. C#中的数组
Java中数组声明是 数据类型[] 数组名; 或 数据类型 数组名[];
而C#中只能使用第一种方式,不能把方括号放在数组名的后面。
语法:数据类型[] 数组名; 例: int[] array;
C#中数组的用法与Java中的一样。
4. 冒泡排序
for(int i = 0; i < N-1; i++)
{
for(int j = 0; j < N-1-i;j++)
{
//比较j和j+1位置的元素
//如果前大后小进行交换
}
}
经验:
N个数字来排队,两两相比小靠前,
外层循环N-1,内层循环N-1-i。
如果要降序排序,只要把程序中的大于号换成小于号就行了。
第三章(用Hello ACCP.NET热身(三))
1. C#中的命名空间
在程序的开头 使用using引入相应的命名空间。
2. 定义方法
语法:
访问修饰符 返回类型 方法名(参数列表)
{
//方法的主体
}
方法名的命名 一般使用Pascal命名法。
3. 引用传递参数
使用ref 关键字修饰参数 在方法定义是和方法调用时都要使用ref修饰参数,而且使用ref修饰的参数必须在调用的方法中赋值。
4. 使用VS的重构功能 进行方法提取。
5. C#中的String类
位于System命名空间中。
常用的字符串处理方法
方 法 | 说 明 |
bool Equals(string value) | 比较一个字符串与另一个字符串value的值是否相等,相等返回true,不相等返回false,与“==”的作用一样 |
int Compare(sting strA,string strB) | 比较两个字符串的大小关系,返回一个整数。如果strA小于strB,返回值小于0;如果strA等于strB,返回值为0;如果strA大于strB,返回值大于0 |
int IndexOf(string value) | 获取指定的value字符串在当前字符串中第一个匹配项的索引,如果找到了value,就返回它的索引,如果没有找到,就返回-1 |
int LastIndexOf(string value) | 获取指定字符串value在当前字符串中最后一个匹配项的索引,如果找到了value,就返回它的索引,如果没有找到,就返回-1。 |
string Join(string separator,string[] value) | 把字符串数组value中的每个字符串用指定的分隔符separator连接,返回连接后的字符串 |
string[] Split(char separator) | 用指定的分隔符separator分割字符串,返回分割后的字符串组成的数组 |
string SubString(int startIndex,int length) | 从指定的位置startIndex开始检索长度为length的子字符串 |
string ToLower() | 获得字符串的小写形式 |
string ToUpper() | 获得字符串的大写形式 |
string Trim() | 去掉字符串两端的空格 |
6. Format方法
语法
string myString = string.Format(“格式字符串”,参数列表)
例:
string myString = string.Format(“{0}乘以{1}等于{2}”,2,3,2*3)
7. C#中进行类型转换
a) 隐式类型转换
把取值范围小的类型转换为取值范围大的类型
如 int类型可以隐式转换为float 、double,float类型也可以隐式转换为double类型。
b) 显示类型转换
把取值范围大的类型转换为取值范围小的类型时,使用显示转换。
8. 数值类型与字符串之间的转换
int.Parse(string); float.Parse(string); double.Parse(string);
把double类型的值转换为int类型时会失去精度。不进行四舍五入。
9. 使用Convert类进行转换
常用Convert类的类型转换方法
方 法 | 说 明 |
Convert.ToInt32() | 转换为整型(int型) |
Convert.ToSingle() | 转换为单精度浮点型(float型) |
Convert.ToDouble() | 转换为双精度浮点型(double型) |
Convert.ToString() | 转换为字符串类型(string型) |
10. 小总结
a) 隐式类型转换:常用于数值型之间,将范围小的数值类型转换为范围大的数值类型。
b) 显式类型转换:常用于数值型之间,将范围大的数值类型转换为范围小的数值类型,使用小括号运算符。
c) Parse()方法:将字符串转换为其他类型,用法为xxx.Parse(string)。
d) Convert类:任何基本类型之间的相互转换。
第四章(第一个Windows程序)
1. partial关键字
partial是“部分的”意思。
例如:Form1.cs和Form1.Designer.cs的代码具有相同的命名空间和相同的类名,并且都在类名前面增加了partial关键字,那么编译时,VS就会识别出来,并把它们合并成一个类来处理。 partial作用就是将一个类标识为分布类。
2. 窗体的重要属性
属 性 | 说 明 |
Name | 窗体对象的名字,用以在代码中进行标识 |
BackColor | 窗体的背景色 |
FormBorderStyle | 窗体显示的边框样式,有7个可选的值,默认值是Sizable |
MaximizeBox | 确定窗体标题栏的右上角是否有最大化框,默认为True |
ShowInTaskbar | 确定窗体是否出现在Window任务栏中,默认为True |
StartPosition | 确定窗体第一次出现时的位置 |
Text | 窗体标题栏中显示的文本 |
TopMost | 指示窗体是否始终显示在此属性未设置为True的所有窗体之上,默认为False |
WindowState | 确定窗体的初始可视状态,包括Normal(普通)、Maximized(最大化)、Minimized(最小化)、默认值为Normal |
3. 窗体的重要事件
事 件 | 说 明 |
Load | 窗体的加载事件,窗体加载时发生 |
MouseClick | 鼠标单击事件,当用户单击窗体时发生 |
MouseDoubleClick | 鼠标双击事件,当用户双击窗体时发生 |
MouseMove | 鼠标移动事件,当鼠标移动窗体时发生 |
KeyDown | 键盘按下事件,在首次按下某个键时发生 |
KeyUp | 键盘释放事件,在释放键时发生 |
sender是事件源,表示是谁引发了这个时间,
可以通过sender得到引发事件的控件,需要进行强制类型转换。
例: string answer = ((RadioButton)sender).Text;
4. 有关控件的一些属性
组合框的主要属性
属 性 | 说 明 |
Items | 组合框中的项 |
DropDownStyle | 定义组合框的风格,指示是否显示列表框部分,是否允许用户编辑文本框部分 |
5. 实现窗体间的跳转
语法:
(1) 创建窗体对象:
被调用的窗体类 窗体对象名 = new 被调用的窗体类();
(2) 显示窗体
窗体对象名.show();
6. 显示消息框
a) 最简单的消息框
MessageBox.Show(要显示的字符串);
b) 带标题的消息框
MessageBox.Show(要显示的字符串,消息框的标题);
c) 带标题、按钮的消息框
MessageBox.Show(要显示的字符串,消息框的标题,消息框按钮);
d) 带标题、按钮、图标的消息框
MessageBox.Show(要显示的字符串,消息框的标题,消息框按钮,消息框图标);
7. 消息框的返回值
例:
DialogResult result = MessageBox.Show(要输入的字符串);
if(result == DialogResult.OK)
第5章(用控件进行快速开发)
1. 排列窗体上的控件
a) 对齐 选择“格式”→“对齐”
b) 使用anchor 要先选择一个或多个控件才可以设置 动态调整控件的大小
c) 使用dock 作用让控件始终保持在窗体的边缘,或者填充窗体
2. MDI多文档应用程序
MDI主要由两种窗口组成:父窗口和子窗口。
1) 创建MDI步骤:
a. 设置父窗体:将父窗体的IsMDIContainer属性设置为True;
b. 设置子窗体:在调用打开子窗体的Show()方法前,在代码中将子窗体的MdiParent属性设为this。
值得注意的是:要把父窗体的属性IsMDIContainer属性设为True;
2) 为父窗体添加子窗体列表
a. 在父窗体中添加一个菜单
b. 添加一个“窗口”菜单项。
c. 将菜单控件的MdiWindowListItem属性设为“窗口”菜单项。
值得注意的是要选择整个菜单条。然后挨属性窗口中找到MdiWindowListItem属性,将它设为菜单条中所添加的子菜单项。
3. 使用工具条控件和状态条控件
工具条和状态条的主要属性
属 性 | 说 明 |
ImageScalingSize | 工具条或状态条中的项显示的图像的大小 |
Items | 在工具条或状态条上显示的项的集合 |
工具条和状态条上的按钮和标签的主要属性
属 性 | 说 明 |
DisplayStyle | 设置图像和文本的显示方式,包括显示文本、显示图像、显示文本和图像或什么都不显示 |
Image | 按钮/标签上显示的图片 |
Text | 按钮/标签上显示的文本 |
经验:
假如在工具条中添加了一个按钮,但是后来因为需要想把它变为下拉按钮或别的形式,选中这个工具条项,单击鼠标右键,选择“转换为”选项,就会出现可以转换的其他形式。
4. 选项卡控件
选项卡的主要属性
属 性 | 说 明 |
MulitiLine | 是否可以显示多行选项卡 |
TabPages | 包含的选项卡页的集合 |
SelectedIndex | 当前所选选项卡页的索引值 |
5. 使用图片框、图像列表、计时器控件
图片框(pictureBox)的主要属性
属 性 | 说 明 |
Image | 图片框显示的图像 |
SizeMode | 指定如何处理图片的位置和控件的大小 |
图像列表(ImageList)的主要属性
属 性 | 说 明 |
Images | 存储在图像列表中的所有图像 |
ImageSize | 图像列表中图像的大小 |
TransparentColor | 被视为透明的颜色 |
计时器(Timer)主要属性和事件
属 性 | 说 明 |
Interval | 事件发生的频率,以毫秒为单位 |
Enabled | 是否定时引发事件 |
事 件 | 说 明 |
Tick | 每当指定间隔发生的事件 |
方 法 | 说 明 |
Start() | 启动计时器 |
Stop() | 停止计时器 |
第6章 用ADO.NET链接数据库
1..NET Framework数据提供程序
.NET Framework数据提供程序
.NET Framework数据提供程序 | 说 明 |
SQL Server .NET Framework数据提供程序 | 提供对Microsoft SQL Server 7.0版或更高版本的数据访问 使用System.Data.SqlClient命名空间 |
OLE DB .NET Framework数据提供程序 | 适合于使用OLE DB公开的数据源 使用System.Data.OleDb命名空间 |
ODBC .NET Framework数据提供程序 | 适合于使用ODBC公开的数据源 使用System.Data.Odbc命名空间 |
Oracle .NET Framework数据提供程序 | 适合于Oracle数据源。Oracle .NET Framework数据提供程序支持Oracle客户软件8.1.7版和更高版本 使用System.Data.OracleClient命名空间 |
.NET Framework数据提供程序的4个核心对象
对 象 | 说 明 |
Connection | 建立与特定数据源的链接 |
Command | 对数据源执行命令 |
DataReader | 从数据源中读取只进且只读的数据流 |
DataAdapter | 用数据源填充DataSet并解析更新 |
2.使用Connection对象
.NET数据提供程序及相应的连接类
.NET数据提供程序 | 连 接 类 |
SQL 数据提供程序 System.Data.SqlClient | SqlConnection |
OLE DB数据提供程序 System.Data.OleDb命名空间 | OleDbConnection |
ODBC数据提供程序 System.Data.Odbc命名空间 | OdbcConnection |
Oracle数据提供程序 System.Data.OracleClient命名空间 | OracleConnection |
Connection对象的主要属性和方法
属 性 | 说 明 |
ConnectionString | 用于连接数据库的连接字符串 |
方 法 | 说 明 |
Open | 使用ConnectionString属性所指定的设置打开数据库连接 |
Close | 关闭与数据库的连接 |
3.连接数据库主要分为3步:
1) 定义连接字符串
不同德数据库连接字符串格式不同,Sql Server数据库的连接字符串格式一般为:
Data Source = 服务器名(.);Initial Catalog=数据库名;User ID=用户名 pwd = ;
密码如果未空,可以省略了pwd 一项
2) 创建Connection对象
SqlConnection connection = new SqlConnection(connString);
3) 打开与数据库的链接
connection.Open();
4. 使用Command对象
.NET数据提供程序及相应的命令类
.NET数据提供程序 | 连 接 类 |
SQL数据提供程序 System.Data.SqlClient命名空间 | SqlCommand |
OLE DB数据提供程序 System.Data.OleDb命名空间 | OleDbCommand |
ODBC数据提供程序 System.Data.Odbc命名空间 | OdbcCommand |
Oracle数据提供程序 System.Data.OracleClient命名空间 | OracleCommand |
.NET数据提供程序及相应的命令类
属 性 | 说 明 |
Connection | Command对象使用的数据库连接 |
CommandText | 执行的SQL语句 |
方 法 | 说 明 |
ExecuteNonQuery | 执行不返回行的语句,如Update等 |
ExcuteReader | 执行查询命令,返回DataReader对象 |
ExcuteScaler | 返回单个值,如执行Count(*) |
第7章 用ADO.NET查询和操作数据库
1.DataReader对象
.NET 数据提供程序及其DataReader类
.NET数据提供程序 | DataReader类 |
SQL数据提供程序 System.Data.SqlClient命名空间 | SqlDataReader |
OLE DB数据提供程序 System.Data.OleDb命名空间 | OleDbDataReader |
ODBC数据提供程序 System.Data.Odbc命名空间 | OdbcDataReader |
Oracle数据提供程序 System.Data.OracleClient命名空间 | OracleDataReader |
DataReader对象的主要属性和方法
属 性 | 说 明 |
HasRows | 是否返回了结果,如果有查询结果返回True,否则返回False |
FieldCount | 当前行中的列数 |
方 法 | 说 明 |
Read | 前进到下一行记录,如果读到记录返回True,否则返回False |
Close | 关闭DataReader对象 |
2.使用DataReader对象
使用步骤:
1)创建Command 对象
2)调用Command对象的ExecuteReader()方法创建DataReader对象
SqlDataReader dataReader = command.ExecuteReader();
3)使用DataReader的Read()方法逐行读取数据
dataReader.Read(); 返回值是一个布尔类型的
4)读取当前行的某列的数据
(string)dataReader[“StudentName”];
5)关闭DataReade对象,调用它的Close()方法。
3.操作数据
使用Command对象的ExecuteNonQuery()方法,用于执行指定的SQL语句,如Update、Insert、Delete
执行步骤如下:
(1)创建Connection对象。
(2)定义要执行的SQL语句
(3)创建Command对象
(4)创建ExecuteNonQuery()方法。
(5)根据返回的结果进行后续的处理。
4.ListView控件
ListView控件的主要属性
属 性 | 说 明 |
Columns | “详细信息”视图中显示的列 |
FullRowSelect | 当选中一项时,它的子项是否同该项一起突出显示 |
Items | ListView中所有项的集合 |
MultiSelect | 是否允许选择多项 |
SelectItems | 选中的项的结合 |
View | 指定显示5种视图中的哪一种视图 |
事 件 | 说 明 |
MouseDoubleClick | 鼠标双击事件 |
方 法 | 说 明 |
Read | 前进到下一行记录,如果读到记录返回True,否则返回False |
Close | 关闭DataReader对象 |
5. ContextMenuStrip控件
该控件是一个快捷菜单也可以叫做上下文(Context)菜单。也称右键菜单。
注意:用右键菜单控件必须把所用的控件的ContextMenuStrip属性设置为所添加的ContextMenuStrip控件。
菜单项(MenuItem)的主要属性和事件
属 性 | 说 明 |
DisplayStyle | 指定是否显示图像和文本 |
Image | 显示在菜单项上的图像 |
Text | 显示在菜单项上的文本 |
事 件 | 说 明 |
Click | 单击事件,单击菜单时发生 |
6. 操作数据库小结
1) 查询单个值时 调用Command对象的ExecuteScalar()方法;
2) 查询若干条记录 调用Command对象的ExecuteReader()方法,返回一个DataReader对象。
DataReader对数据库进行操作非常快。
第8章 用DataGridView显示和操作数据库
1. 创建DataSet对象
语法:
DataSet 数据集对象 = new DataSet(“数据集的名称字符串”)
方法中的参数 数据集的名称字符串 可以有,也可以没有,如果没有写参数,创建的数据集的名称就默认为NewDataSet。
2. DataAdapter对象
数据适配器(DataAdapter)属于.NET数据提供程序,所以不同类型的数据库需要使用不同的数据适配器。
.NET数据提供程序及其DataAdapter类
.NET数据提供程序 | 数据适配器类 |
SQL数据提供程序 System.Data.SqlClient命名空间 | SqlDataAdapter |
OLE DB数据提供程序 System.Data.OleDb命名空间 | OleDbDataAdapter |
ODBC数据提供程序 System.Data.Odbc命名空间 | OdbcDataAdapter |
Oracle数据提供程序 System.Data.OracleClient命名空间 | OracleDataAdapter |
DataAdapter对象的主要属性和方法
属 性 | 说 明 |
SelectCommand | 从数据库检索数据的Command对象 |
方 法 | 说 明 |
Fill | 向DataSet中的表填充数据 |
Update | 将DataSet中的数据提交到数据库 |
3. 使用DataAdapter填充数据集
需要4个步骤
(1)创建数据库连接对象(Connection对象)
(2)创建从数据库查询数据用的SQL语句
(3)利用上面创建的SQL语句和Connection对象创建DataAdapter对象。
语法:
SqlDataAdapter 对象名 = new SqlDataAdapter(查询用的SQL语句,数据库连接)
(4)调用DataAdapter对象的Fill()方法填充数据集。
语法:
DataAdapter对象.Fill(数据集对象,“数据表名称字符串”)
重新为DataAdapter对象指定查询用的SQL语句使用SelectCommand.CommandText属性;
4. 保存数据集中的数据
把数据集中修改过的数据保存到数据库,需要两个步骤:
(1)使用SqlCommandBuilder对象生成更新用的相关命令。。
语法:
SqlCommandBuilder builder = new SqlCommandBuilder(已创建的DataAdapter对象)
(2)调用DataAdapter对象的Update()方法。
语法:
DataAdapter对象.Update(数据集对象,“数据表名称字符串”);
经验:SqlCommandBuilder只操作单个表,也就是说,创建DataAdapter对象是,使用的SQL语句只能从一个表里面查数据,不能进行联合查询。
5. DataGridView控件
DataGridView控件的主要属性
属 性 | 说 明 |
Columns | 包含的列的集合 |
DataSource | DataGridView的数据源 |
ReadOnly | 是否可以编辑单元格 |
通过Columns属性,可以设置DataGridView中每一列的属性,包括列的宽度、列头的文字、是否为只读、是否冻结、对应数据表中的哪一列等。各列的主要属性如下表。
各列的主要属性
属 性 | 说 明 |
DataPropertyName | 绑定的数据列的名称 |
HeaderText | 列标题文本 |
Visible | 指定列是否可见 |
Frozen | 指定水平滚动DataGridView时列是否移动 |
ReadOnly | 指定单元格是否为只读 |
6. 使用DataGridView显示数据
例:
dgvTeacher.DataSource = dataSet.Table[“Teacher”];