C#学习笔记

Posted 说笑谈古松

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了C#学习笔记相关的知识,希望对你有一定的参考价值。

这是我以前的学习笔记,使用word写的,缩进应该有问题。

3.1变量
using system;
在这里定义的变量就可以在整个程序中使用;
int a;
public class main
{
在这里定义的变量就可以在整个类中使用;
int b;
public void static Main()
{
在这里定义的变量就可以在整个方法中使用;
int c;
}
}
也可以用static实现!
3.1常量
静态常量:public const int MAX_VALUE=10;
动态常量:public readonly int MAX_VALUE=10;
5.1 if语句
If(判断条件表达式){}
else{}
5.2 switch语句
Switch(表达式)
{
case 常量表达式:条件语句;break;
default:条件语句;
//default只有在case都没有执行的情况下执行。
}
输出语句:Console.WriteLine(“请输入您需要比较的语句。”);
接收用户输入语句:int num=int.parse(Console.ReadLine());
三元运算符:Num<10?输出语句1:输出语句2;
5.4 wile语句与do…wile语句
Wile(条件语句){

}
do{
}wile(条件语句);
5.6 for语句与foreach语句
for(int 变量=赋初始值;变量<长度;增(减)值){ 代码体}
foreach(int 变量 in 要遍历的集合){代码体}
5.10 continue语句
意义:用于停止当前的迭代语句,结束本次循环;break是直接结束循环;
5.11 reture语句

//方法的建立
Static 类型 方法名(参数1,参数2){
return 返回值;
}
5.11 goto语句
格式:goto 标识符
作用:当程序执行到goto语句时,程序会直接跳转到标识符所标识的程序位置,继续执行代码。
实列:
error:
{
代码体;
}
goto error;
6.2 字符串
声明方式:string 变量名=“赋初始值”
6.3 字符串的大小写转换
ToUpper大写字母 ToLower小写字母
6.4 字符串的比较
1、字符串类型.Equals(字符串1,字符串2)返回布尔值
2、直接用==
3、字符串类型.Compare(字符串1,字符串2)
6.4 字符串的格式化
String.Format(要转换的格式,格式化的对象,格式化的对象);
6.4 字符串的截取
字符串1.Substring(整数n);//将字符串1前n个长度的字符串截取,保留后面的字符串
字符串1.Substring(整数n,整数n);//保留从字符串1第n个长度开始数m个长度的字符串。
6.4 字符串的转换
1、显示转换
字符串1=(需转换类型)字符串2;
检查是否溢出:Checked(检查内容);
字符串1=Convert.ToString(字符串2);
int.Parse();//只能转换为字符串
6.17 StringBuilder类的使用
步骤:
1、 引入命名空间System.Text
2、 通过new关键字初始化 StringBuilder myStringBuilder=new StringBuilder(“内容”);
3、 进行使用,与string类的使用一样
myStringBuilder.Append(“需添加的内容“);//在myStringBuilder后添加内容。
myStringBuilder.Insert(位置,“需添加的内容“);
myStringBuilder.Remove(位置,个数);//移除从索引开始的n个字符。
myStringBuilder.Insert(“原有的内容“,“需替换的内容“);
myStringBuilder.AppendFormat(“需添加的内容{0;C}“,0的值);//按照指定的格式来添加对应的字符串
7.1 一维数组的声明与使用
声明格式:数据类型[] 数组名称={};//用于已知变量数组内容的声明;
数据类型[] 数组名称;
数组名称=new 数据类型[长度];//用于未知数组各元素的值一个声明,制定数组长度
7.3 二维数组的声明与使用
声明格式:数据类型[,] 数组名称;
初始化的第一种方法:指定字面值。//数据类型[,] 数组名称={{},{},{}};
初始化的第二种方法:new关键字,适用于元素内容的未知。//数据类型[,] 数组名称;
//数组名称=new 数据类型[行数, 列数];
7.5 遍历数组
Length:数组的长度 GetLowerBoung:指定数组维度的下限 GetUpperBoung:指定数组维度的上限 格式:GetLowerBoung(0代表行,1代表列);
7.9 ArrayList类中元素的添加
1、引入命名空间system.Collections;
2、初始化:ArrayList 类名=new ArrayList(固定大小);
//ArrayList的好处是长度不固定,类型随意。
//数组的长度是固定的,不能更改的,类型单一,只能为其中一种。
增加元素:类名.Add(增加元素);//add方法用于一次性向ArrayList中添加单个元素,每次只能添加一个。AddRange方法用于一次性向ArrayList中添加多个元素,可以是一个数组。
7.10 ArrayList类中元素的删除
1)ArrayList 变量名.Remove(值);// 变量名.Remove(值);
2)变量名.RemoveAt(索引值);
3)变量名.RemoveRange(开始索引值,删除数);
4)变量名.RemoveRange ();//删除所有元素
//遍历时需要使用数据类型为object
7.11 ArrayList类中元素的查找
1)IndexOF(要查找的元素);//返回一个索引值,如果查找不到,返回-1.
2)LastIndex(要查找的元素);//返回一个最后一次出现的索引整数值,否则返回-1
3)BinarySearch();//如果查找不到,返回-1.数据不一致时可能出错。
8.2 方法(函数)的声明及调用
修饰符 返回值类型 方法名称(参数列表)
{
方法体;
}//修饰符:public、private、static等等
//返回值类型:void、int、double
参数列表可为数组
Params用于数组只允许出现一个参数
8.3 静态方法和实列方法
实列成员:数据类型 变量名=初始值;
静态成员:static 数据类型 变量名=初始值;
静态方法:static void 方法名(){
}//只能访问静态成员,不能访问实列成员。
调用静态方法:方法名();
实列方法:void 方法名(){

}//可以使用类的任何成员。注:我们写的方法都在class Program这个类中。
调用静态方法:Program 变量名=new Program();//调用前先将类实列化。
变量名.方法名();
8.4 虚方法//虚方法能够被重写
判定:有无virtual修饰符
新建类:class 类名
{
//默认的方法被指定为私有的,只能在当前类中访问private
//需要在其他类中访问就需要将指定为public:访问权限最高,只有在项目内部都可以进行访问
//virtual关键字必须位于void前
虚方法格式:public virtual void 方法名(){
}
}
调用://先将类实列化
类名 变量名=new 类名();
变量名.方法名();
类的继承:class 类名:要继承的类名//此时继承的类叫派生类
{
}
重写虚方法:public override void 方法名(){//在void前加入sealevoid可以保护虚方法不被重写;

}
8.6 外部方法
当方法声明包含extern修饰符时,称该方法为外部方法。
位置:通常在类当中,与其他方法保持平级关系。
[DllImoort(“User32.dll”)]//使用之前应该引入命名空间:System.Runtime.InteropServices
声明格式:public static extern int 方法名(int h//默认为0就好,string m//主体内容, string c ,\\标题,int type//默认为0就好);//利用return 进行弹出对话框,需要将Main方法改为有返回值,将void改为int就行。
8.7 分部方法
分部方法:方法声明中含有partial修饰符。//分布方法必须在分布类或分部结构中声明,必须私有。
严格的限制:
1) 方法必须返回void,只能默认为partial。
2) 分部方法不能为virtual和extern方法;
3) 分部方法可以有ref参数,但不能有out参数;
先声明:partial void 方法名();
后定义:partial void 方法名()
{
}
调用:Program 变量名=new Program();//先实列化
变量名.方法名();
8.9 Main方法
表现形式:1)public static void Main();//一定是静态的
2)public static int Main();
3)public static void Main(string[] args);
4)public static int Main(string[] args);//返回0,说明正常。
9.1 结构
位置:命名空间的下面,类的外面。
Public struct 结构名{
代码体;
}
调用:结构名 变量名=new 结构名();//初始化
9.2 枚举
声明方式:public enum 枚举名//位置和构造一致
{
值1,
值2
}
枚举名 变量名=枚举名.枚举内的设置;
9.5 类的声明
声明方式:1)class 类名
{
{
2)项目右击-添加=类或新建项
3)alt+c
//字段,命名规范,_camelCase;字段可以存放多个值,变量只能存放一个值。//修饰符private
调用:类名 变量名=new 类名();
9.6 属性的使用
属性的作用:保护字段,对字段的取值于赋值进行限定;//字段下方
格式:public 对应的字段类型 属性名//快捷键:ctel+r e
{
get{return 字段;}//可以用于对取值进行限定
set{字段=value;}//set用于对赋值进行限定,用if语句//if()value=?;上面一样
}
9、8 构造函数和析构函数
构造函数:public 构造名(参数)//使用new关键字重载
{

}
析构函数:~析构函数()//用于销毁一个类的实列的方法成员
{
}
10、1接口的声明
声明方式:修饰符 interface 接口名//接口以I开头
{
成员;
}
10、5 抽象类与抽象方法的声明
声明方式:public abstract class 类名称//抽象类
{
public abstract void名称();
}
重载类要用override关键字
11、1 捕捉异常
Try…catch//捕捉异常
try…finally//清楚异常
try…catch…finally//处理所有
catch(Exception 变量名)
{
Console.WriteLine(变量名.Message.ToString());//显示错误原因
}
11、2 清除、处理异常
Try
{

}
Finally
{
}
11、4 预定义异常类
Exception 所有异常对象的基类
SystemException 运行时产生的所有错误的基类
IndexOutOfRangeException 当一个数组的下标超出范围时运行引发
NullReference Exception 当一个空对象被引用时运行时引发
Argument Exception 所有参数异常的基类
12、1 Windows窗体技术及基础控件
文件夹内容:bin包含debug子目录及XXX.exe文件和xxx.pdb文件
obj包含debug子目录,含有编译过程中生成的中间代码。
Properties包含AssemblyInfo.cs文件,他是在创建项目过程中自动添加的。此文件包含程序集属性的设置。
App.cofig包含项目所需的资源文件。存放字符串、图标等。
Form1.cs窗体文件,包含窗体代码。
Form1.Designer.cs设计窗体时,编译器自生成代码与窗体及控件有关的代码。
12、3窗体的常用属性
设置窗体属性有两种方法
1) 一种是通过属性面板(三种方法)
右键、视图、F4
2) 一种是通过代码
窗体惟一标识.属性名=属性值;
BackColor 设置窗体背景颜色
Backgroundimage 设置背景图片
Cursor 鼠标光标形状
HelpButton 是否显示帮助按钮//不能与最大化最小化同时显示
MinmizeBox最小化按钮
MaxmizeBox最小化按钮//将最小化和最大化设置为false就可以显示帮助按钮
Icon 窗口左上角的图标
MainmumBox 为本窗口指定朱MenuStrip(后边讲)
MaxmumSize 窗口最大化大小
MinmumSize 窗口最小化大小//设置为一样后,用户不能鼠标拖动大小
Name窗体的惟一表示名//Mainform主窗体标识
Text 文本内容
ShowIcon确认窗体显示图标
ShowInTaskbar确实窗体是否早状态栏中
Size设置窗体的大小
StartPosition确定窗体第一次出现的位置
TopMost是否居顶
12、3窗体的常用属事件
Load窗体运行完成即为加载,加载完成会触发事件。
Click点击事件
DoubleClick双击事件
FormClosed窗体关闭(窗体已关闭)
KeyDown建被按下的时候
KeyUp键被释放
KeyPress用户按下并释放某个按键发生
MouseClick鼠标点击
MouseDoubleClick 鼠标双击
MouseDown 鼠标按键按下
MouseHove鼠标光标悬停
MouseMove鼠标移动窗体
MouseUp 鼠标释放
窗体的标识.Controls.Add(控件标识符);//用代码添加控件
窗体的标识符.Show//窗体的显示
窗体的标识符.Hide//窗体的隐藏
12、7 MDI窗体
定义:(多文档界面),用于同时显示多个文档,MDI子窗体的创建避免了用户打开很多窗口的时候任务程中挤满了窗体。
MDI窗体的使用方法
1)确定一个主窗体,把窗体的IsMdiContainer属性设置为ture。
2)创建子窗体,并且设置他们的主窗体。
LayoutMdi(MdiLayout.TileHorizontal)//设置子窗体水平分部。更多样式在MdiLayout属性中。
12、9 文本控件
Label标签控件
Button按钮控件
TextBox文本框控件
RichTextBox有格式文本控件
Random类//用于随机数的产生,使用时先实例化。调用:变量名.Next(//产生数区间,);
clientSize 显示区大小
控件表示名.Location=new Point(水平坐标,垂直坐标); //文本显示的位置
12、10 Button控件
MouseEnter鼠标悬浮事件
Image 定义按钮的背景图片
12、11 TextBox控件
TextBox控件上有一个箭头,MuitLine属性,多行显示。提供了基本的文本输入和编辑功能,
AcceptsRetun 控制我们按下回车键时是换行还是激活按钮//默认flase激活ACCEPTBUTTON这个按钮TRUE换行
CharaterCasing 字母的大小写//U{PER大写LOWER小写NORMAL正常
MacLenght最大的字符长度
PassswordChar 密码文件显示的符号
ReadOnly控制只读(ture)
ScrollBars 显示滚动条
WordWrap控制文本框换行
12、13 RichTextBox控件
RichTextBox控件允许用户输入和编辑文本的同时提供了比普通的TxetBox控件更高级的格式特征。
richTextBox1.SelectionColor=Color.blue;//设置richTextBox1中文本的字体颜色为blue色。
richTextBox1.SelectionFont=new Font(“隶书”,18);// 设置richTextBox1中文本的字体为隶书18号字体。
richTextBox1.SelectionBullet=ture;设置richTextBox1中文本的字体前是否有项目符号。
richTextBox1.SelectionBackColor=Color.blue; 设置richTextBox1中文本的字体底纹颜色为blue色。
12、15 Timer控件
Timer控件是定期引发的事件的控件,时间间隔的长度由Interval属性定义,其值以毫秒为单位。
应用后需将Enabled的值设置为ture。
DateTime.Now.ToString()是获取当前时间并转换成字符串。
12、18 CheckBox控件
选择类控件,主要包含复选框控件(CheckBox)、单选框控件(RadioButton)、下拉组合框控件(ComboBox)、列表控件(ListBox)和复选组控件(CheckBoxList)数值选择控件(NumericUpDown)等。
CheckBox作用:用于一个或少数选项列出,让用户从中选择一个或者多个。
属性值:Checked 复选框被选中
Unchecked 复选框没有选中
Indeterminate 在这种状态下复选框是灰色,并不可选。
12、20 RadioButton控件
作用:用于从用户给定列表中选定一个选项。
属性值:Checked是否选中状态
12、21 ComboBox控件、ListBox控件、CheckedListBox控件
ComboBox控件被称为下拉组合框控件,
ListBox控件主要作用是将一个集合数据以列表框的形式显示给用户从中选择一项或多项。//SelectionMode属性可控制ListBox可多选或单选。
CheckedListBox控件相当于多个CheckBox控件。
12、23 NumericUpDown控件
主要作用是将一个数按一定的值进行增加或减少。
常用属性:Increment 每次单击按钮时增加或减少的量。
Maximum最大值
Minimum最小值
Value当前值
12、25 Panel控件//在容器当中
主要作用就是将其他控件组合在一起放在一个面板上。
实例化:Regular 变量名=new Regular();
变量名.TopLevel=false;//不让顶级控件添加到panel控件上。
变量名.FormBorder
this.panell.Controls.Add(变量名);
12、27 GroupBox控件
作用是为其他控件提供一个可识别的分组。
12、28 TabControul控件
作用就是将相关的组件组合到一系列选项卡页面上。
Multiline属性用来设置是否显示多行选项卡。
Appearance属性是指示选项卡绘制成按钮还是绘制成常规选项卡,该属性有三个值分别为Normal(绘制成常规选项卡)、Buttons(绘制成常规按钮)、FlatButtons(绘制成平滑按钮).
TabControl控件管理TabPages集合。
SelectedTab属性可以确定当前的选项卡,每次选择新选项卡时,都会触发SelectedIndexChanged事件,通过SelectedIndex属性和SelectedTab属性确认当前选择,就可以根据选项卡进行特定的处理。
12、29 MenuStrip控件(菜单控件)和ContextMenuStrio控件
MenuStrip控件(菜单控件)是用户获取应用程序中主要功能和实用程序的主要途径,如新建文件、打开文件等。在建立菜单时,要给MenuStrip控件添加ToolStripMenu对象。
//&f可以设置快捷键为ctrl
ShortcutKeys属性可设置快捷键
ContextMenuStrio控件用于MenuStrip中右键显示的选项卡。//设置是需将ContexeMenuStrip属性调为自定义的ContextMenuStrio控件。
ToolTip工具提示。在工具栏中。//添加在控件上后,会多一个ToolTip属性。IsBalloon显示样式。
12、31 ToolStrip控件
工具栏是另一种获取应用程序主要功能的常用方法,比起菜单更直观。ToolStrip作用是创建易于自定义的常用工具栏。TookStrip控件的属性管理着控件的显示位置和显示方式,是MenuStrip控件的基础。
AllowItemRecorder 设置工具可以按住ctrl键进行拖拽。
DisplayStyle属性设置图标样式,可设置图像或图像和文本,
Dock停靠位置
LayouyStyle设置工具栏的分布方式,一般默认,
GripMargin手柄是否可见
Items自己和
ShowItemToo设置鼠标悬浮时是否有提示语
12、32 StatusStrip控件
StatusStrip控件是状态栏,用于显示用户状态的简短信息,作用是在应用程序中表示对话框底部的一栏,通常用于显示应用程序当前状态的简短信息。
StatusStrip控件中可以使用ToolStrip中的一些控件,还有一个专用控件,即StatusStripStatusLabel,作用就是使用文本和图像向用户显示应用程序当前状态的信息。
Spring控制队形的。
Int 变量名1=当前控件名.GetFirstCharIndexOfCurrentLine();//获取当前行的索引值。
Int 变量名2=当前控件名. GetFirstCharIndexFromtLine(变量名1)+1;//计算行号
Int 变量名3=当前控件名.SelectionStart-变量名1+1;//计算列号
13、1 PictureBox控件
可以显示来自位图、图标或者元文件,以及来自增强的元文件、JPEG或GIF文件的图型,
SizeMode属性裁剪图片大小
值:Normal图片置于控件左上角,图片大于控件的部分会被裁剪。
Slabl7 mage 图片调整大小去适应控件
AutoSize 控件调整大小适应图片
CanterImage图片处于控件中心
Zoom 图片去适应控件,但是图片宽高比例不变。
//设定图片如何在PictureBox中显示
控件名.SizeMode=PictureBoxMode.StretchImage;
设定PictureBox默认显示图片
控件名.Image=Image.FromFile(@“图片绝对位置。”);
13、3 ImageList控件
又叫存储图像控件,用来存储图像的组合,但他不能显示图像。
Image 图片储存变量=Image.FromFile(@“图片路径”);
控件名.Images.add(图片储存变量);//添加单个元素
控件名.Images.addRange(new Image[] {图片储存变量1, 图片储存变量2,…);//添加多个元素,需将原来的图片储存变量。
控件名.Images.AddStrip(图片储存变量);
Graphics 变量1= Graphics.FromHwnd(this.Handle);
//创建了一个窗口句柄(handle) H wnd windows
//了解一下graphics的一种声明方法
控件名.Draw(变量1,new Point(50,50)//显示位置,0//图片索引值);
Draw的三种重载方式://上面一行属于第一种方式,三种方式只在于参数不同
1.(graphics对象名,左上角点坐标,索引值);
2.(graphics对象名,水平坐标,垂直坐标,索引值);
3、(graphics对象名, 水平坐标,垂直坐标,图像宽度,图像高度,索引值);
System.Threading.Thread.Sleep(1000);//显示速度,按每秒一次。
控件名.Images.RemoveAt(索引值);
13、5 ListView控件
是Windows列表视图控件,该控件显示可用五种不同视图之一显示的项的集合。
LargeIcon:在项文本旁显示大图标,如果控件够大,则项显示在多列中。
Smalllcon除显示小图标外,其他方面与大图标视图模式相同。
List:显示小图标,但总是显示在单列中。
Details:在多列中显示。
Tile:每个项都显示为一个完整大小的图标,在它的右边带项标签和子项信息。(仅支持XP/server 2003)
添加节点:TreeNode 变量名1=new TreeNode();
变量名1.Text=textBox1.Text.Trim();//textBox1是接受用户收入的一个TextBox控件,Trim用于消除用户输入时文本前后的多余空格;
控件名.Nodes.Add(变量名1);//将新建节点加入视图
控件名.SelectedNode.Nodes.Add(变量名1);//将新建节点加入视图选中的子节点中去;
删除节点:节点变量名.Remove();
节点变量名.Nides.Count;//查询字节的个数。
ImagesList属性可以显示节点图标,可以调用imageList控件里的图片,
13、8 DateTimePicker控件
该控件可以使客户可以从时间或日期列表中选择单个选项。
13、10 MonthCalendar控件
该控件是用来查看和设置日期信息。
BoldedDates属性包含单个日期,可用于加粗当前日期。
AnnuallyBoldedDates属性也包含每年以粗体显示日期。
MontblyBoldedDates属性包含每月以粗体显示的日期。
MaxDate和MinDate可以控制显示日期的范围。
BackColor月份中显示的颜色。
ForeColor显示月份中文本的颜色。
TitleBackcolor确定星期数的字体颜色及日历标题的背景色/
TitleForeColor显示日历标题中文的颜色。
TrailingForeColor确定所显示月份之前和月份之后的日期颜色
ShowToday确定是否在控件底部显示尽头日期。
ShowTodayCircle确定是否在今天这一日期上加圆圈。
ShowWeekNumbers确定是否在每行日期的左侧显示周数。
13、12 ErrorProvider控件
该控件可以对窗体或控件上的用户输入进行验证,
Icon属性可以设置为自定义错误图标而不是默认图标。
设置DataSource属性后,ErrorProvider控件可为数据集显示错误数据信息。
ErrorProvider控件的主要方法是SetError方法,该方法可以指定错误信息字符串和错误图标应出现的位置。其格式为:
ErrorProvider变量名.SetError(需要在那个控件傍边显示错误信息);
13、13 HelpProvider控件
该控件用于将html帮助文件(.btm文件或chm文件)与windows应用程序相关联。
HelpNamespace属性将帮助文件HelpProvider组件相关联。
通过调用SetHelpNavigato并提供指定控件的HelpNavigator枚举值来指定提供的帮助类型:
通过调用SetHelpKeyword方法为提供关键字或主题,
13、14 Progressar控件
该控件痛过在水平条中显示相应数目的矩形来指示操作的进度。
控件名.Value=进度值。
控件名.Increment(进度值);//两者均用于控制进度条进度值。
14、9 Connection连接、关闭数据库
1)一种是以SQL验证登陆
2)另一种是以Windows身份验证
步骤:
1) 引用命名空间System.Data.SqlClient
2) 将连接方法声明至字符串中。
3) 创建Connection对象
4) 调用方法
String 变量名1=”Server=.;integrated security=SSPI;Initial Catalog=数据库名”;//连接数据库,windows身份验证方法
String 变量名2=”Server=.;user=用户名;pwd=密码;database=数据库名”;//SQL验证方式登陆。
SqlConnection mysqlCon=new SqlConnection(变量名1);//实例化
mysqlCon.Open();//打开
mysqlCon.Close();为了节省空间,每次用完后都要关闭数据库。
Using(mysqlCon)//通过using语句实现数据库的关闭,用完后自动关闭。
{
mysqlCon.Open();
}

try//通过try…catch…finally…实现数据库的实时关闭
{
mysqlCon.Open();
}
catch
{

}
finally
{
mysqlCon.Close();
}

try//通过using和try…catch…finally…结合实现数据库的实时关闭
{
Using(mysqlCon);
{
mysqlCon.Open();

}
}
catch
{

}
finally
{
mysqlCon.Close();
}
14、10 Command操作数据
常用属性:
CommandText 要下达至数据源的命令。
CommandTimeout 出错时等待命令
//使用前需引用命名空间Using System.Data.SqlClient;
String 变量名2=”Server=.;user=用户名;pwd=密码;database=数据库名”;//先连接数据库
SqlConnection 变量名1 =new SqlConnection(变量名2);
try
{
//创建Command对象过程
变量名1.Open();
String 变量名3=“select * from 表名//T-SQL语句”;
SqlCommand 变量名4=new SqlCommand(变量名3,变量名1);
变量名4. CommandTimeout=2;//两秒内还没执行显示出错。

//更改数据,ExcuteNonQuery();
变量名1.Open();
String变量名5=“insert 表名(字段)values(字段信息);//T-SQL语句”;
SqlCommand 变量名4=new SqlCommand(变量名5,变量名1);
变量名4.ExecuteNonQuery();
String变量名6=“select Max(字段) from 表名//T-SQL语句”;
SqlCommand 变量名7=new SqlCommand(变量名6,变量名1);
int t=0;
t=(int) 变量名7.ExecuteScalar();//获取数据
}
Catch(Exception ex)
{
Console.Writeline(ex.Message.ToString());
}
finally
{
mysqlCon.Close();
}
三种方法之二:
ExecuteNonQuery() 不返回任何值,一般应用于insert,uodate,delete语句中。
ExecuteScalar() 返回一个值,一般用于只返回一个值的语句,如求数据统计的count语句,求最大数Max/最小数Min语句。
14、11 DataReader读取数据
常用属性:
FieldCount 表示记录中有多条字段
HasRows 用来表示DataReader是否包含数据
IsClosed 表示DataReader是否关闭
String 变量名2=”Server=.;user=用户名;pwd=密码;database=数据库名”;//先连接数据库
SqlConnection 变量名1 =new SqlConnection(变量名2);
try
{
变量名1.Open();
String变量名3=“select * from 表名//T-SQL语句”;
SqlDatader 变量名4;//声明Datareader
变量名4=变量名3.ExecuteReader();//引用
if(变量名4.HasRows){}判断表中是否有数据
变量名4.FieldCount;//查询表中有几个字段
//sClased;//显示是否已经关闭,此位置输出会显示false;
变量名4.Close();
}
Catch(Exception ex)
{
Console.WriteLine(ex.Message.ToString());
}
Finally
{
变量名1.Close();
}
常用方法:
Close 将DataReader对象关闭
GetDataTypeName 取得指定字段的数据形态//变量名4. GetDataTypeName(字段位置);
GetName 取得指定字段的字段名称//变量名4. GetName(字段位置);
GetOrdinal 取得指定字段名称在记录中的顺序//string 变量名5=“字段”;
//变量名4. GetOrdinal(变量名5);
GetValue 取得指定字段的数据//使用它前先将前面String变量名3=“select * from 表名 where id=查询数据的位置//T-SQL语句”;还要在语句前加if(变量名4.Read())否则显示无数据查询;
GetValues 取得全部字段的数据//使用它前先将前面String变量名3=“select * from 表名 where 字段=查询数据的字段内容//T-SQL语句”;先声明数据object[] 变量6=new object[变量名4. FieldCount]; 变量名4. GetValues(变量6);遍历需要while循环:while(变量名4.Read()){foreach(object 变量 in 变量6)}
Read 读取下一条记录//访问时既可以使用字段,也可以使用索引值;
14、13 数据集DataSet
实现离线访问技术的核心。该对象通过将数据驻留在内存来实现离线访问。
DataSet对象由一组DataTable对象组成。这些对象于DataRelation对象互相关联。这些DataTable对象又包含Rows(行)集合、Columns(列)集合,Rows集合是由多个DataRow对象组成。Columns集合是由多个Datacolumns对象组成。
步骤:
1) 引入命名空间System.Data
2) 创建DataSet对象//DataSet 变量1=new DataSet(“自取名称”);
3) 创建DataTable对象//DataTable 变量2=new DataTale(“自取表名“);
4) 将DataTable对象加入DataSet对象中。//变量1.Tables.Add(变量2);
5) 定义列,并向DataTable中增加已经定义好的列//DataColumn 变量3=new DataColumn(“字段名“,Type.GetType(“字段类型”));变量2.Columns.Add(变量3);
6) 插入行数据//DataRow 变量4=变量2.NewRow();变量4【索引】=字段数据;
变量2.Rows.Add(变量4);
变量1.AcceptChanges();//进行保存
7) 进行相关操作
方法:
Clear 移除表中所有行来清除任何数据的DataSet.
Clone 复制该DataSet的结构但不复制数据
Copy 复制DataSet的结构和数据
Dispose 释放DataSet对象
Equals确认两个DataSet对象是否相同
Merge 将指定的DataSet DataTable或DataEow对象的数组合并到当前的DataSet或DataTble中
Reset 将DataSet重置为初始状态

Public static void outValues(DataSet ds)//声明一个方法
{
Forrach (DataTable 变量5 in ds.Tables)//遍历表
{
Console.WriteLine(“表名称:“+变量5.TableName);
Foreach(DataRow 变量6 in 变量5.Rows)//遍历行
{
foreach(DataColumn 变量7 in 变量5.Columns)//遍历列
{
Console.Write(变量6【变量7】+“\\t”);
}
}
}
}
DataTable 变量8=要复制的表.Clone();
DataRow 变量9=变量8.NewRow();//创建新行
变量8.Rows.Add(new object[] {字段数据});//添加数据
变量1.Merge(变量8);//将变量8及其架构合并到变量1中。
DataSet myds001=变量8.Copy();
14、15 数据适配:DataAdpter对象
DataAdapter对象是DataSet和数据源之间的桥梁,可以建立并初始化数据表(即DataTable),对数据源执行SQl指令,与Dataset对象结合,提供Dataset对象存储数据,可视为Dataset对象的操作核心。
在使用DataAdapter对象时,只需要设置SQL命令和数据库连接两个参数,就可以通过Fill方法把查询结果放置在一个DataSet对象中。
实列1:填充DataSet数据集:;利用DataAdapter的Fill方法实现。
引入命名空间:using System.Data.SqlClient;
Using System.Data;
Stying constr=”Server=.; user=sa;pwd=sa;database=csharpzxw”;
SqlConnection mycon=new SqlConnection(constr);
Try
{
Mycon.Open();
String sql=”select * from mytable001”;
SqlDataAdapter myda=new SqlDataAdapter(sql,mycon);
DataSet myds=new DataSet();
Myda.Fill(myds,”mytable001”);
}
Catch(Exception ex)
{
Console.WriteLine(ex.Message.ToString());
}
Finally
{
Mycon.Close.//关闭数据库
}
数据适配:DataAdapter对象概述
DataAdapter对象可用于执行数据库的命令操作,含有四个不同的操作命令,分别如下:
1) SelectCommand: 用来选取数据源中的记录。
2) Insert Command:用来向数据源中新插入一条记录:
3) UpdatateCommand:用来更新数据源中的数据:
4) DatateCommand:用来删除数据源中的记录。
实例2:更新数据源:DATa Adapter的Update方法可用来将DataSet中的更改解析回数据源。
mycon.Open();
string updutesql=”update mytable001 set gender=’女’ where name=’张三’”;
Sql Data Adapter myda=new SqlDataAdapter(“select * from mytable001”,mycon);
Myda.UpdateCommand=new SqlCommand(updapter,mycon);//写完这句就可以开始更改数据了。
DataSet myds=new DataSet();
Myda.Fill(myds,”mytable001”);//acceptchange处于true状态,后面的更改无用。需进行以下操作
DataRow row=myds.tables[0].Rows[0];
Row[“性别字段”]=”女”;
OutValues(myds);//输出
15、1 初识DataGrdView
常用属性:
AllowUserToAddRows 允许用户输入行数据
AllowUserToDeletRows 允许用户删除行数据
AllowUserToOrderColumns 允许用户排列列数据
AllowUserToResizeColumns 允许用户调整列数据大小
AllowUserToResizeRows 允许用户调整行数据大小
AutoSizeColumnsMode 根据内容自动调整列大小
Gridcolor 数据间距颜色
15、2 DataGridView绑定数据方法
两种方法
1) 绑定模式
将以存在的数据库中数据表绑定到控件上。
Private DataSet BindNodeSource()
{
String contr=”Server=.;user=sa;paw=sa;database=csharpzxw”;
SqlDataAdapter myda=new SqlDataAdapter(sql,mycon);
DataSet myds=new DatatSet();
Try
{
Mycon.Open();
String sql=”select name,gender from mytabl001”;
SqlDataAdapter myda=new SqlDataAdapter(sql,mycon);
Myda.Fill(myda,”mytable001”);
}
Catch(Exception ex)
{
MessageBox.Show(ex.Message);
}
Finally
{
Mycon.Close();
}
Retrun myds;
}
dgvBindMode.DataSource=BindModeSoure().Table[0];//在主函数中调用函数
2) 非绑定模式
通过代码手动填充数据
Private DataTable NonBindSource()
{
DataTable mydt=new DataTable();
Mydt.Columns.Add(“name”,Type.GetType(“System String”));
String[,]={{,},{,}}
For(int i=0;i<mystr.Length/2;i++)
{
DataRow mydr=mydt.New();
Mydr[0]=mystr[i,0];
Mydr[1]=mystr[i,1];
Mydt.Rows.Add(mydr);
}
Return mydt;
}
dgvBindMode.DataSource= NonBindSource ();//在主函数中调用函数
15、3 DataGridView获取当前单元格
通过DataGridView的Rows属性和Column属性的索引来取得的,他们的索引都是从0开始的。
Private void dataGridView1_CellClick(object sender,DataGridViewEventArgs e)//鼠标双击事件方法
{
//获取行列索引
//1种方法
Int row=e.RowIndex+1;
Int col=e.ColumnIndex+1;
//2种方法
Int row=dataGridView1.GurrentCell.RowIndex+1;
Int col=dataGridView1.GurrentCell. ColumnIndex+1;
//3种方式
Int row=dataGridView1.CurrentCellAddress.Y+1;
Int row=dataGridView1.CurrentCellAddress.X+1;
//4种行的引用
Int row=dataGridView1.CurrentRow.Index+1;
//获取单元格内容
//1种方法
String cell=dataGeidView1.Rows[row-1].Cells[col-1].Value.ToString();
//2种方法
String cell=dataGrifView1.CurrentCell.Value.ToString();
}
15、4 DataGridView隐藏行、列
隐藏与显示 Visible
dataGridView1.Columns[索引].Visible=false;
dataGridView1.Rows[索引].Visible=false;
15、5 DataGridView右键删除行
右键 ContextMenuStrip//属性中有CellMouseUp双击可进入右键事件
删除行
Private int rowIndex=0;//声明全局变量
Private void dataFridView1_CellMouseUp(object sender,DataGridViewCellMouseEventArgs e)
{
If(e.ButtonMouseButtons.Right)//判断是否是右键
{
This.dataGridView1.Rows[e.RowIndex].Selected=true;
rowIndex=e.RowIndex;// rowIndex等于当前行
this.dataGridView1.CurrentCell=this. dataGridView1.Rows[e.RowIndex].Cells[1];//这两行代码的作用是选中当前一整行。
This.contextMenuStrip1.Show(this.dataGridView1,e.Location);//出现右键单元行
contextMenuStrip1.Show(Cursor.Position);//使右键单元行出现在鼠标下方
}
}
Private void 删除行ToolStripMenuItem_Click(object sender,EventArgs e)
{
If(!this.dataGridView1.Rows[this.rowIndex].IsNewRow)//判断当前行是不是新行
{
This.dataGridView1.Rows.RemoveAt(rowIndex);//删除行
}
}
DataGridView1.Rows.RemoveAt(行索引值);
15、6 DataGridView分类排序、筛选
Sort 分类 //也可手动
dataGridView1.Sort(dataGridView1.Columns[3],ListSortDirection.Descending);//按降序排序。
DataView dv;
dv=new DataView(this.csharpzxwDataSet.mytable001,”department=’开发部’”,“age Asc”,DataViewRowState.CurrentRows);//筛选
dataGridView1.DataSource=dv;//删除dv中有的行
15、7 DataGridView直接修改数据
DataGridView单元格进入编辑模式的方法:
1) 双击或F2
//修改后反馈到数据库
//双击CellValueChanged进入事件
SqlConnection mycon=GetConnection();
Try
{
Mycon.Open();
String mystr1=dataGridView1.Columns[e.ColumnIndex].HeaderText+”=”+”’”+dataGridViewView1.CurrentCell.Value.ToString()+”’”;//获取字段+获取用户输入内容
String mystr2=dataGridView1.Rows[e.RowIndex].Cell[0].Value.ToString();
String updateSql=”update mytable001 set “+ mystr1+” where id=”+ mystr2;
SqlCommand mycom=new SqlCommand(updateSql,mycon);
Mycom.ExecuteNonQuery();
dgvBind();
}
Catch(Exception ex)
{
MessageBox.Show(ex.Message);
}
Finally
{
Mycon.Close();
}
15、8 DataGridView当前行显示不同颜色
如果想人选中DataGridView的行显示不同颜色,就要通过DataGridView控件RowPrePaint事件中重新设置所选行的DeFaultCellStyle属性来实现。
Private void dataGridView1_RowPrePaint(object sender,DataGridViewRowPrePaintEventArgs e)
{
If(e.RowIndex>=dataGridView1.Count-1)return;//判断是否在可选行内
Color oldForeColor=new Color();//用于存储颜色
Color oldBackColor=new Color();
Var row=dataGridView1.Row[e.RowIndex];
If(row
dataGridView1.CurrentRow)//判断当前行与操作行是否是一行
{
If(row.DefaultCellStyle.ForeColor!=Color.White)//判断当前行是否是白色
{
oldForeColor=row. DafaultCellStyle.ForeColor;//进行存储旧颜色
row. DafaultCellStyle.ForeColor=Color.White;
}
If(row.DefaultCellStyle.ForeColor!=Color.Blue)
{
oldBackColor=row. DafaultCellStyle.BackColor;
row. DafaultCellStyle.BackColor=Color.Blue;
}
Else
{
row. DafaultCellStyle.ForeColor= oldForeColor;
row. DafaultCellStyle.BackColor= oldBackColor;
}
}
}
15、9 DataGridView绘制行序号
//双击RowPosPant事件
Private void dataGridView1_RowPosPaint(object sender,DataGridViewRowPosPaintEventArgs e)
{
Rectangle myrec=new Rectangle(e.RowBounds.Location.X,e. RowBounds. Location.Y, dataGridView1.RowHeadersWidth-5,e.RowBounds. H eight);//参数:(X,Y,宽度,高度)
TextRenDerer.DrawText(e.Graphics,(e.RowIndex+1).ToString(),dataGridView1.RowHeadersDefaultCellStyle.Font,myrec,dataGridView1.RowHeadersDefaultCellStyle.ForeColor,TextFormatFlags.VerticalCenter|TextFormatFlags.Right);// TextFormatFlags.VerticalCenter 垂直居中/ TextFormatFlags.Right 右对齐
}
15、10 DataGridView隔行显示不同颜色
两种方法:
1) DataGridView1.Rows[i].DefaultCellStyle.BackColor
//双击窗体
Private void Form1_Load(object sender,EventArge e)
{
//TODO:这行代码将数据加载到表“csharpzxwDataSet.mytable001”中。您可以根据需要移动或删除他。
This.mytable001TableAdapter.Fill(this. csharpzxwDataSet.mytable001);
For(int i=0;i<this. DataGridView1.Rows.Coumt;i++)
{
If(i%2==0)
This.data GridView1.Rows[i].DefaultCellStyle.BackColor=Color.Pink;
Else
This.data GridView1.Rows[i].DefaultCellStyle.BackColor=Color.Violet; // Violet默认颜色
}
}
2) AlternatingRowsDefaultCellStyle属性
获取或设置应用于DataGridView的奇数行的默认单元格样式。
RowsDafaultCellStyle属性
获取或设置应用于DataGridView的行单元格的默认样式。
//双击窗体
Private void Form1_Load(object sender,EventArge e)
{
//TODO:这行代码将数据加载到表“csharpzxwDataSet.mytable001”中。您可以根据需要移动或删除他。
This.mytable001TableAdapter.Fill(this. csharpzxwDataSet.mytable001);
This. data GridView1.Rows[i].DefaultCellStyle.BackColor=Color.Violet;
This.dataGridView1.AiternatingRowsDefaultCellStyle.BackColor=Color.SaddleBrown;// BackColor背景色 ForeColor 字体色
}
15、11 DataGridView分页显示
思路:将数据表整体填充至一个DataSet中,然后部分显示(DataAdatater Fill重载)
DataGridView
BinddingNavigate
BindingSource
15、11 DataGridView单元格自动填充
在DataGridView单元格中,当输入指定的字符时,自动完成填充。
通过TextBox实现
AutoCompleteMode
AutoCompleteMode.Suggest;
AutoCompleteSource
AutoCompleteSource.Custom;
16、1 预处理命令
程序调试,是一个程序员的基本的技能,对每一个编程人员而言,找bug将是一个极为费时的事情,然而,这也是要深入下u去编写更为复杂程序所必须掌握的技巧。
Bug
程序缺陷、臭虫,电脑系统或者程序中存在的任何一种破坏正常运转能力的问题或缺陷,都可以叫做“Bug”。
预处理命令都是以#开始
#define和#undef必须用在程序的开头,并且在其他任何关键字之前,例如用在命名空间声明中的那些指令之前。
#if#elif#else#endif是告诉编译器是否要对某段代码执行编译
#warning和#error
使用这两个指令可以检查#define是否出错,使用#warning语句还可以提醒自己做过的事。
#region和#endregion
将一段代码标记给任意指定的一个块,可被编译器识别,让程序员的可读性更高。
#line 用于改变编译器在警告和错误信息中显示的文件名和行号信息
恢复默认行号的方式 #line default
#pragma 可以抑制或恢复指定的编译警句
Disable 抑制
Restore 恢复
可省去CS
16、3 非中断调试
生成应用程序时,解决方案的配置有两种
Debug(默认)
Release
在Debug配置下生成应用程序,不仅仅是运行编写好的代码,调试程序包含了应用程序的符号信息,VS知道执行每一行代码发生了什么。此类信息文件包含在.pdb文件中,这些文件位于计算机的Debug目录下。
输出窗口有两种模式:
调式(Debug)
生产(Build)
Debug.Write();//需引入using System.Diagnostics;
Trace.WriteLine();
区别:Debug.WeiteLine()在Debug模式下运行,甚至不能编译为可发布的程序,Release版本中会消失。
Trace.WriteLine();还可用于发布程序。
16、5 断点调试
所有的调式功能都在【调式】菜单中。
写好程序后,可以采用两种方式去执行:
调式模式
非调式模式
断点调式:断点是调式器设置的一个代码位置。当程序运行到断点时,程序中断执行,回到调式器。断点是最常用的技巧。调式时,只有设置了断点并使程序回到调式器,才能对程序进行在线调式。
设置断点
鼠标、快捷菜单、快捷键、条件断点
开始调试
调式方式
逐过程(F10)
逐语句(F11)
跳出(Shift+F11)
继续(F5)
设置下一句(Ctrl+Shift+F10)
显示下一条语句(Alt+*)
停止:
全部停止(Ctrl+Alt+Break)
停止程序的执行(Shift+F5)
调式技巧:
局部变量
自动窗口
监视
调用堆栈
查看定义
即时窗口
17、1 正则表达式
一种查找工具:正则表达式
一种用于快速搜索而组织的Hashtable
正则表达式就是记录文本规则的代码。
RegEx tester小程序用于测试文本
简单语法之匹配规则:
\\d 匹配数字(0~9)//大写字母一般与小写字母意思相反
\\D匹配非数字
\\w任意字符
\\W非单字符
\\s空白字符
\\S非空字符
.任意字符
[…]括号中的任意字符
^字符串的开始
$字符串的结尾
\\b一个单词的边界
\\B一个单词的非边界
转义字符、限定字符
{n} 匹配n字符
{n,}匹配n次和n次以上的字符
{n,m}匹配n次以上和m次一下字符
?匹配0或1次
+匹配0或多次
*匹配0次以上
[^…]匹配非括号字符
17、4 c#中正则表达式的构建与匹配
使用方法:
1) 引用命名空间System.Text.RegularExpressions
2) 构造正则表达式
基本形式:Regex(正则表达式);
重载形式:Regex(正则表达式,匹配选项);
匹配选项是一个枚举值,包括一下六个值:
IgnoreCase 忽略大小写
ReghtLeft 从左到右
None 默认
CultureInvariant 忽略区域
MultLine 多行模式
SingleLine 单行模式
在Regex类中包括IsMatch()、Replace()、Split()等
IsMatch():测试字符是否满足正则表达式,返回布尔值。//格式:Regex.IsMatch(要判断的字符串,正则表达式);
17、5正则表达式替换
格式:
Regex.Replace(要搜索匹配的字符串,要替换的原字符串,替换后的字符串);
//实例化方法
Regex myregex=new Regex(要替换的原字符串);
String result=myregex.Replace(要搜索匹配的字符串, 替换后的字符串);
17、6 正则表达式拆分
格式:
Regex.Split(要拆分的字符串,要匹配的正则表达式模式);
17、7 Hashtable概述及元素的添加
需引入命名空间:using System.Collections;
声明:Hashtable ht=new Hashtable();
添加:Add//ht.Add(1,”张三”); ht.Add(2,”里斯”);//key不一定是数字
ht[3]=”王五”;//遍历时Foreach里用的数据类型为DictionaryEntry
17、9 Hashtable概述及元素的删除
ht.Remove(key);key为添加元素时,索引一样的东西。
ht.Clear();//清除
17、10 Hashtable概述及元素的查找
ht.ContainsKey(1);判断key为1的是否存在
ht.ContainsValue(“张三”);//判断为该值的是否存在
18、1 迭代器
引入命名空间:using System.Collections;
位置:与方法(构造函数)一个位置
Public static IEnumerable SimpleDemo();
{
yieId return “string1”;
yieId return “string2”;
yieId break;//停止迭代
yieId return “string3”;
}
遍历:
Foreach(string item in SimpleDemo())//位于主函数中
{
}
//
Public class Month : IEnumerable
{
String[] month={“jan”.”fab”,”mar”,…}
Public IEnumerable GetEnumerator()
{
For(int i=0;i<month.Length;i++)
{
yieId return month[i];
}
}
}
调用:
Months mon=new Months();
Foreach (string m in mon)
{
}
18、3 分部类
关键字:partial
Partial class arithmetic//使用前需使用new实例化
{
}
18、4 索引器
声明:
Private int[] myint=new int[10];
Public int this[int index]
{
Get{return myint[index];}
Set{ myint[index]=value;}
}
虚拟索引器:virtual
外部索引器:extern
抽象索引器:abstract
19、3 泛型
在命名空间System.Collections.Generic中。
20、2 文件操作
需引入命名空间System.IO
File.Exists(文件的绝对路径);//判断文件是否存在
FileStream newtext =File.Greate(文件路径+文件名);//创建文件
newtext.Close();//关闭
FileStream txtFile=File.Open(文件路径,FileMode.mode);//打开文件
Byte[] biteWrite ={ (byte)’5’, (byte)’1’, (byte)’z’, (byte)’x’, }
txtFile.Write(biteWrite,0, biteWrite.Length);//输入内容
txtFile. Close();//关闭
File.Copy(源文件路径,目标文件,false);//文件复制,源文件中有内容,目标文件中无内容。False不允许覆盖,true允许覆盖。
File.Move(源文件路径,目标文件路径);//文件的移动
File.Delete(文件路径);//删除文件
FileInfo myfileinfo=new FileInfo(文件路径);//查看文件属性时需实例化
myfileinfo.需查看的属性对应方法,可看提示;//查看属性
20、9 文件夹操作
Directory.Exists(文件夹路径);//判断文件夹是否存在
Directory.GreateDirectory(文件夹路径);//创建文件夹
Directory.Delete(文件夹路径,false);//删除文件夹
Directory.Move(源文件夹路径,目标文件夹路径);//移动文件夹
Directory.GetFiles(文件夹路径);//获取文件夹下的文件
Directory.GetDirectories(文件夹路径);//获取文件夹下的文件夹
20、14 数据流
System.IO.Stream命名空间中。

以上是关于C#学习笔记的主要内容,如果未能解决你的问题,请参考以下文章

C#学习笔记——值类型

C# 学习笔记-- C# 的基础语法

C# 学习笔记线程

C# 教程学习笔记

C# 学习笔记 进程

C#学习笔记——引用类型