C#【基础笔记整合,全覆盖】

在这里插入图片描述
干货满满,记得备水!

C#基础


using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;

namespace day_01
{
     
    class Program
    {
     
        static void Main(string[] args) 
        {
     
			Console.WriteLine("Hello World!!!");
			Console.ReadKey();
        }
    }
}

//1.C#简介

C#是面向对象语言

  • 面向对象:把问题分解成各个对象,建立对象的目的不是为了完成一个步骤,而是为了描述某个事物在整个解决问题的步骤中的行为
  • 面向对象就是高度实物抽象化(功能划分)程序相当于盖浇饭
  • 易维护、易复用、易扩展,性能比面向过程低

基本名词:

  • .NET framework:舞台
  • c#:舞台上的演员
  • visual studio:开发工具

.NET框架组件

  • 公共语言运行时:CLR、包含CLS数据类型和CTS面向对象的通用功能
  • 框架类库:FCL

工具类:Console类

  • 不换行输出:Write()

  • 换行输出:WriteLine()

  • 槽占位输出:WriteLine("{0}{1}",one,two)

  • 输入字符串:ReadLine()

  • 输入单个字符:Read()、返回整数,整数对应字符编号

  • 热键输入:ReadKey()

转义字符:

  • 单引号:’
  • 双引号:"
  • 反斜杠:\
  • 空:\0
  • 警告(产生峰鸣):\a
  • 退格:\b:backspace
  • 换页:\f
  • 换行:\n
  • 回车、回到一行开头:\r
  • 水平制表符:\t:tab
  • 垂直制表符:\v
  • 回车换行符:\r\n 推荐使用:Environment.NewLine
  • 在字符串前面加@表示取消字符串中的转义

注释:Ctrl+/

  • //单行注释
  • /* 多行注释 */
  • /// 文档注释

Visual Studio快捷键:https://zhuanlan.zhihu.com/p/98271375


//1.变量的声明与赋值

变量:可以变化的量就是变量 说明我的变量的值不固定 是随时可以进行变化操作

取名:一定要是合法的变量名

  • 必须以 “字母” 或@开头
  • 后面可以跟 “字母” , 数字 , 下划线
  • 不能与 关键词 重名

@有2种意义:

  • 字符串中如果有\,则不理解为转义符
  • 使字符串可以换行

声明并赋值:数据类型 变量名 = 值;

  • 例如:int money = 100;

//2.数据类型

1.字符型char:用于存储单个字符

  • char 2字节 取值范围:0 ~ 65535
    例如:char a = ('A');

2.字符串型string:用于存储一串字符

  • string 取值范围:任何""之间的字面值
    例如:string a = ("hello java");

3.小数型float - double:用于存储小数

  • float 4字节 取值范围:10^-38 ~ 10^38
  • double 8字节 取值范围:10^-308 ~ 10^308
  • 当你不声明的时候,默认小数都用double来表示,所以如果要用float的话,则应该在其后加上f
    例如:float a=1.3f;
  • float是8位有效数字,第7位数字将会产生四舍五入(5及5以下的都将舍去)

● 4.整数型byte - short - int - long:用于存储整数

  • sbyte 1字节 取值范围:-128 ~ 127
  • byte 2字节 取值范围:0 ~ 255
  • short 2字节 取值范围:-32768 ~ 32767
  • ushort 2字节 取值范围:0 ~ 65535
  • int 4字节 取值范围:-2147483648 ~ 2147483647
  • uint 4字节 取值范围:0 ~ 4294967295
  • long 8字节 取值范围:-2的63次方 ~ 2的63次方-1
  • ulong 8字节 取值范围:0 ~ 2的64次方-1

● 5.布尔型boolean:只有两个值 一个true正确 / false错误

  • booleam 1字节 取值范围:true / false

● 6.object:所有类型的根

  • 如果没有明确指定继承类型,默认继承自object类

//3.字段

作用

  • 表示存储位置,用来保存类的各种数据信息

实例:默认不加字段

常量:const

  • 无法进行修改的变量
  • 例:const int i = 10

只读:readonly

  • 修饰字段,表示该字段为只读字段

//4.类型转换

自动类型转换:两种类型相互兼容 目标类型大于源类型

  • 例如:
short a = 123 ;
int  b = a ;

强制类型转换:两种类型相互兼容 目标类型小于源类型

  • 例如:
short a = 123 ;
byte  b = (byte)a ;

规则:

  • 整数长度足够,数据完整。
    例:int i = 100; byte b = (byte)i; //b = 100
  • 整数长度不够,数据截断。
    例:int i = 10000; byte b = (byte)i; //b = 16(符号位变化)
  • 小数强转整数,数据截断。
    例:double d = 2.5; int i = (int)d; //i = 2(小数位舍掉)
  • 字符整数互转,数据完整。
    例:char c = 65; int i = c; //i = 65
  • boolean的取值为true/false,不可与其他类型转换。

类型转换方法:

  • 字符串 转其他类型:类型.Parse(字符串)
  • 字符串 转整数:Convert.ToInt32(需要转换的内容)
  • 字符串 转小数:Convert.ToDouble(需要转换的内容)
  • 任意类型转 字符串:Convert.ToString(需要转换的内容)
  • 任意类型转 字符串:需要转换的内容.ToString
  • 数组类型转换:Array.ConvertAll<需转换类型, 转换后类型>(数组名, s => 转换后类型.Parse(s))

//5.运算符和操作符

算术运算符 +(加) - (减) *(乘) /(除) %(模) ++(递增+1) --(递减-1)

比较运算符 > < >= <= ==(等于) !=(不等于)

逻辑运算符 &&(与) ||(或) !(非)

赋值运算符 右边进行运算 再将运算的结果赋值给左边

例如:int y = 3 * (10 - 5);

操作符 = += -= *= /= %=

  • 例:n += 2 相当于 n = n+2

操作符 ? :布尔表达式 ? 结果1 : 结果2 (真)获得结果1 (假)获得结果2

  • 例:
int i = 99;
int z = i ==100?666:111;
结果:z=111

进行算数运算时:

  • 两个操作数有一个为double,计算结果提升为double
  • 如果操作数中没有double,有一个为float,计算结果提升为float
  • 如果操作数中没有float,有一 个为long,计算结果提升为long
  • 如果操作数中没有long,有一个为int,计算结果提升为int
  • 如果操作数中没有int,均为shortbyte,计算结果仍旧提升为int
  • 任何类型与String相加(+)时,实为拼接,其结果自动提升为String

//1.数组的声明与赋值

作用:

  • 保存多个数据
  • 批量对多个数据进行操作

数组的声明与分配空间

  • 声明:数组类型[] 数组名称
  • 分配空间:数组名称 = new 数组类型[数量]
  • 声明并分配空间:数组类型[] 数组名称 = new 数组类型[数量]
  • 往数组的空间中存值:数组[下标] = 值;

数组静态初始化

  • (简化格式):int[] i = {1,2,3};
  • (完整格式):int[] i = new int[] {1,2,3};

数组的遍历

  • 获得数组的长度:数组名称.length
int[] a = {
     1, 2, 3, 4};
for(int i = 0; i < a.length; i++){
     
	Console.Write("遍历:"+a[i]);
}

二维数组,一维数组的列表

  • 声明并分配空间:int[] name = new int [n] [n];
  • 声明等长二维数组并分配空间:int[, ] name = new int [n, n];
  • 遍历方法:
int[][] arr = {
     {
     2, 3}, {
     1, 3}, {
     0, 0}, {
     0, 3}};
for(int row = 0; row < arr.length; row++) {
     
	for(int col = 0; col < arr[row].length; col++) {
     
		Console.WriteLine("{0} ",arr[row][col]);
	}
} 

三维数组,二维数组的列表

  • 声明并分配空间:int[] name = new int [n] [n] [n];
  • 声明等长二维数组并分配空间:int[, ,] name = new int [n, n, n];

数组默认值

  • 整数:0
  • 小数:0.0
  • 字符:\u0000
  • 布尔:false
  • 字符串:null

//2.数组的属性

获取维数:Rank

  • 返回一维是1,二维是2

获取所有元的个数:Length

//3.数组的方法

获取指定维度中的元素个数:GetLength(维度下标)

  • 获取一维(列数),下标为0。获取二维(行数),下标为1

获取指定维度的索引上限:GetUpperBound(维度下标)


//1.类的定义与对象的实例化

类的定义

  • 文件名就是类名,文件名是其它的文件

给类中添加属性

  • 私有属性:String color;
  • 公有属性:public String color;

对象的实例化

  • 类名 变量名 = new 类名();
  • 例:Day a = new Day();

获取对象的属性值并修改

  • 对象.属性名=值
  • 例:a.color = "黄色";

//2.定义方法并使用

定义方法格式:

  • 访问修饰符 返回值类型 方法名( 形参的类型 形参名称 ){方法执行内容}

返回值类型

  • 默认:void
  • 基本类型:如int
  • 数组:数组类型名[]
  • 字符串:String
  • 自定义的类:类名

调用方法

  • 对象调方法:对象.方法名( );
  • 例:a.method();
  • 方法调方法:方法名( );
  • 例:method();

调用带有返回值的方法

  • 用一个和返回值相同类型的变量 接收这个返回值
  • 返回值类型 变量名 = 对象.方法名( );
  • 例:String js = a.method( );

调用带有参数的方法

  • 对象.方法名( 实参1,实参n );
  • 例:a.method ( eee: "成功", i: 5 );

//3.对象数组

与普通数组的区别

  • 对象数组可以存自定义对象
  • 普通数组存基本数据类型

对象数组的定义

  • 类名[] 变量名 = new 类名[长度];

对象数组中的方法调用

  • 遍历调用每一个数组成员的方法
for(int i = 0; i < 对象数组.length; i++){
     
	对象数组[i].方法名();
}

//4.修饰符

属性修饰符

  • Serializable:按值将对象封送到远程服务器。在按值封送对象时,就会创建一个该对象的副本,并将其序列化传送到服务器。 任何对该对象的方法调用都是在服务器上进行的。
  • STAThread:单线程套间、是一种线程模型
  • MTAThread:多线程套间、是一种线程模型

访问修饰符

  • 公有访问:public、不受任何限制
  • 保护访问:protected、实例不能访问
  • 私有访问:private、子类,实例都不能访问
  • 内部访问:internal、只限本项目内访问,其他不能访问
  • 内部保护访问:protected internal 内部保护访问,只限于本项目或是子类访问,其他不能访问

类修饰符

  • public:不受限制
  • internal:只限本项目内访问
  • Partial:部分类,可以将一个类分成几部分写在不同文件中,最终编译时将合并成一个文件,且各个部分不能分散在不同程序集中。常见场景在Winform定义窗体或者控件时,自动生成的前端单元和逻辑单元。
  • Abstract:修饰类,表示不能够创建该类的实例。修饰方法,表示该方法需要由子类来实现,如果子类没有实现所有的抽象方法那么子类同样是抽象类;且含有抽象方法的类一定是抽象类。
  • Sealed:修饰类,表示该类不能够被继承。修饰方法,表示该方法不能被覆写。
  • Static:修饰类,表示不能够实例化该类的对象,也不能含有对象成员和构造函数;修饰类成员时,该成员为类成员,只能通过(类.成员名)的方式访问

成员修饰符

  • 公共修饰符:public

  • 私有修饰符:private

  • 保护修饰符:protected

  • 内部修饰符:internal

  • virtual:修饰方法成员,表示虚方法。父类可以含有该类的实现,子类可以覆写该函数。

  • override:表示该方法为覆写了父类的方法。

  • Readonly:修饰字段,表示该字段为只读字段。

  • Const:修饰字段,表示该字段为只读字段。并且在编译时必须能够明确知道该字段的值,其值是硬编码到程序中去的,修改了该类型成员后需要重新编译才能使修改生效。

  • Readonly不能修饰局部变量,const可以。

  • abstract用来修饰抽象类,表示该类只能作为父类被用于继承,而不能进行对象实例化。抽象类可以包含抽象的成员,但这并非必须。abstract不能和new同时用。

  • sealed用来修饰类为密封类,阻止该类被继承。同时对一个类作abstractsealed的修饰是没有意义的,也是被禁止的。

  • 注意:当一个类或方法没有被任何修饰符修饰时,默认为internal

//5.关键词

对象本身:this

  • 访问时,表示访问对象本身的值
  • 静态方法无法使用

从派生类中访问基类的成员:[:base()]

  • 可以调用基类的构造函数、属性和方法,基类没有时,会再往上找
  • 调用基类构造函数时,不需要再次指定参数的类型
  • 格式:public 子类方法名([参数列表]):base(父类方法的实参) {方法代码}

引用传递

  • ref:给方法传递值类型的参数,直接操作同一个变量,必须设置其初始值,侧重于修改
  • out:和ref相似,且可以不设置初始值,但是在方法中必须初始化,侧重于输出

as和is的转换规则

  • as:检查两个对象类型的兼容性,并返回转换结果,不兼容则返回null
  • is:检查两个对象类型的兼容性,并返回布尔值

//1.程序和程序结构

程序概念:计算机为了实现某种特定的功能而编写的一段程序

顺序结构:按照程序的顺序执行

选择结构:根据给定的条件进行判断,由判断的结果确定下一步的执行

循环结构:在条件成立的范围内,重复的执行

条件的本质最终就是布尔值

//2.if选择结构

概念:是一种根据条件判断之后 再做处理的语法结构

用法:第一个条件不成立时,执行第二个条件,都不成立执行else

  • 例:
if (条件1) {
     
	条件一成立之后执行的程序
} else if (条件2) {
     
	条件一不成立,条件二成立之后执行的程序
} else {
     
	两个条件都不成立时执行的程序
}

//3.switch结构

概念:用于处理定值的分支

用法:

switch(a){
     
	case 1:
		Console.WriteLine("a=1");
		break;
	case 2:
		Console.WriteLine("a=2");
		break;
	default:
		Console.WriteLine("a!=1或2");
		break;
}

属性:

  • break:打破的意思 会让代码跳出整个循环体、必须有
  • default:都不满足时,执行这个程序
  • yield:产生一个指定值来转移控制权

//4.while和for循环结构

概念:在条件成立的范围内,重复的执行

while():基本循环结构

  • 例:
while(条件) {
     
	条件成立之后循环执行的程序
}

int i = 0;
while(i < 10) {
     
	Console.WriteLine(++i);
}

`

do{}while():至少会执行一次,再判断条件

  • 例:
do{
     
	至少循环一次的程序
}while (条件)

int i = 0;
do{
     
	Console.WriteLine(++i);
}while (i < 10)

for():括号里填 初始值、循环条件、条件变化

  • 例:
for (条件变量:初始值; 循环条件; 条件变量的变化){
     
	条件成立之后循环执行的程序
}

for (int i = 0; i < 10; i++) {
     
	Console.WriteLine(i);
}

属性:

  • continue:跳过本轮循环,下一轮还会继续
  • break:跳出整个循环体,会执行循环体后面的代码
  • goto:跳转标识,可以标记一个位置,再使用

//5.foreach循环结构

概念

  • 用于列举出集合中所有的元素,可以迭代数组或者一个集合对象
  • foreach循环是只读的,不能遍历修改数据

用法:foreach (只读变量 变量名 in 遍历元素) { }

  • 例:
int[] nums = {
     1, 2, 3, 4};

foreach (int num in nums) {
     
	Console.WriteLine(num);
}

//1.数字函数:Math

方法

  • 返回绝对值:abs()
  • 返回上入整数:Ceiling()
  • 返回下舍整数:Floor()
  • 返回两个十进制数中较大的一个:Max()
  • 返回两个十进制数中较小的一个:Min()
  • 返回xy次幂:pow(x,y)
  • 返回平方根:sqrt()
  • 返回指定角度的余弦值:Cos()
  • 返回指定角度的双曲余弦值:Cosh()
  • 返回指定角度的正弦值:Sin()
  • 返回指定角度的双曲正弦值:Sinh()

//2.生成随机数:Random

创建并使用Random对象

  • Random r = new Random()

方法

  • 返回一个正随机数,小于所指定最大值:Next(指定最大值)
  • 返回一个0-1之间的随机数:NextDouble()

//3.时间:DateTime

创建并使用DateTime对象,获取本地时间

  • DateTime DT = DateTime.Now

属性

  • 年:Year
  • 月:Month
  • 日:Day
  • 时:Hour
  • 分:Minute
  • 秒:Second

方法

  • 获得当前日期、格式为 2020年1月1日:ToLongDateString()

  • 获得当前日期、格式为 2020/1/1:ToShortDateString()

  • 获得当前时间、格式为 17:59:23:ToLongTimeString()

  • 获得当前时间、格式为 17:59:ToShortTimeString()

  • 获取此实例的日期:Date


//1.预处理器:#region、可折叠代码块

用法:

#region 折叠后的说明文字
	折叠的代码
#endregion


#region 输出打印i
int i = 0;
Console.WriteLine(i);
#endregion

//2.异常处理:Exception

属性

  • 获取 用户定义的其他异常信息的键/值对的集合:Data
  • 获取或设置 指向此异常所关联帮助文件的链接:HelpLink
  • 获取或设置 HRESULT (特定异常的编码数字值):HResult
  • 获取 导致当前异常的 Exception 实例:InnerException
  • 获取 描述当前异常的信息:Message
  • 获取或设置 导致错误的应用程序或对象名称:Source
  • 获取 调用堆栈上直接帧的字符串表示形式:StackTrace
  • 获取 引发当前异常的方法:TargetSite

异常捕捉:Try-Catch-Finally

  • 用法:
try {
     
	可能出现异常的代码写这里
} catch (异常类型 异常对象){
     
	出错后执行的代码
} finally {
     
	资源回收代码
}
  • 一个try块可对应多个catch块,用于捕获多个不同异常,但只会执行其一
  • 所有父类异常的catch块放在子类异常块的后面
  • finally块回收在try块中打开的物理资源,如数据库连接,网络连接等
  • try不能独立存在,finally不是必须存在。必须先执行完finally后再返回

//1.字符串的属性

得到字符串的字符数:Length

  • 用法:字符串.Length

不分配存储空间:string.Empty

//2.字符串的方法

构造方法:new string(‘字符’,数量)

  • 用法:string Str = new string('H',20)、构造由20个H组成的字符串
  • 用法:string Str = new string(new char[]{'H','e','l','l','o'})、hello

判断字符串是否相同:Equals()

  • 用法:string Str=“内容”; Str.Equals("内容");返回true
  • 不区分大小写:Equals("内容", StringComparison.Ordinal IgnoreCase)

比较字符串里字符转整数的大小:string.Compare(Str1,Str2)

  • 返回整数:1表示大于 0表示等于 -1表示小于
  • 字符一个个进行比较,只要一个字符不相同,那么就停止比较得出结果

获取字符串中,内容的索引位置

  • 从左边开始找:IndexOf()
  • 用法:string Str="hello"; Str.IndexOf("l"); 返回整数2
  • 从末尾开始找:LastIndexOf()
  • 用法:string Str="hello"; Str.LastIndexOf("l"); 返回整数3
  • 注意点:lastIndexOf,返回的是从左往右数的下标

字符串的截取:Substring()

  • 一个参数表示从指定的位置截取字符串到结束
  • 用法:string Str="hello"; Str.Substring(3); 返回lo
  • 两个参数表示从参数1开始截取,截取参数2长度的内容
  • 用法:string Str="hellojava"; Str.Substring(1,6); 返回elloja

分割字符串为字符串数组:Split()

  • 用法:string[] 数组名= 字符串.Split('分割符')
  • 分割后用数组接收,分割符会消失,且左右两边的字符串会分成两份

拼接字符串数组为字符串:string.Join(“拼接符”,数组名)

  • 数组的数据之间,用拼接符进行拼接

字符串转换大小写

  • 小写:字符串.ToLower() 大写:字符串.ToUpper()

去掉字符串的空格:Trim()

  • 去掉前后空格:字符串.Trim()
  • 去掉前面的空格:字符串.TrimStart();
  • 去掉后面的空格:字符串.TrimEnd();

判断是否以指定子字符串开始:StartsWith()

  • 用法:string Str="hello"; Str.StartsWith("he"); 返回true

判断是否以指定子字符串结束:EndsWith()

  • 用法:string Str="hello"; Str.EndsWith("o"); 返回true

判断是否包含指定的子字符串:Contains()

  • 用法:string Str="hello"; Str.Contains("ell"); 返回true

将指定的子字符串替换成你想要的字符串:Replace()

  • 用法:string Str ="hello!"; Str.Replace("!","?"); 返回hello?

判断字符串是否为空:string.IsNullOrEmpty()

  • 用法:string Str="hello"; string.IsNullOrEmpty(Str); 返回true

槽占位拼接字符串:string.Format()

  • 用法:string Str = string.Format("10+10={0}","20")
  • 占位长度:{槽位 , n}、占n的长度,正数右对齐,负数左对齐
  • 货币格式:{槽位 : Cn}、输出货币格式,保留n的小数位数
  • 保留小数位数:{槽位 : Fn}、保留n的小数位数
  • 数字三位分级法:{槽位 : N}、整数从右到左每三个数加一个逗号
  • 百分比计数法:{槽位 : Pn}、以百分比计数,保留n的小数位数
  • 十六进制格式:{槽位 : X000}、输出十六进制格式

字符串的连接:string.Concat(字符串1,字符串2)

valueOf()

  • 数据类型.valueOf( 整数或字符串, 指定使用的进制数 );返回对应类型
  • 整数:Integer 小数:Float、Double 字符串:string

获取每个字符的ASCII值:System.Text.Encoding.Default.GetBytes(str)

  • 将返回数组Byte[],汉字占两位,其他占一位
  • ASCII码:汉字的第一位ASCII码*256+第二位ASCII码,对应数字
  • 45217~45252:A 45253~45760:B 45761~46317:C
  • 46318~46825:D 46826~47009:E 47010~47296:F
  • 47297~47631:G 47632~48118:H 48119~49061:J
  • 49062~49323:K 49324~49895:L 49896~50370:M
  • 50371~50613:N 50614~50621:O 50622~50905:P
  • 50906~51386:Q 51387~51445:R 51446~52217:S
  • 52218~52697:T 52698~52979:W 52980~53640:X
  • 53689~54480:Y 54481~55289:Z

//3.字符串的StringBuilder类型:定义可变字符串

声明赋值的格式

  • StringBuilder sb=new StringBuilder("字符串");

追加字符串:append()、字符串会添加在后面

  • 用法:sb.append("字符串",索引,字符数);
  • 从字符串 的 索引 位开始,往后的 字符数 添加在后面

将行终止符 ‘;’ 追加到当前对象的末尾:AppendLine()

  • 用法:sb.AppendLine("字符串");
  • 行终止符:\r\n

槽占位追加字符串:AppendFormat()

  • 用法:sb.AppendFormat("字符串");

指定位置插入内容:insert()

  • 用法:sb.insert(插入的索引值,插入的内容);

移除指定字符串:remove()

  • 用法:sb.remove(开始的索引值,移除的长度);
  • 移除的长度从0开始

替换指定字符串:replace()

  • 用法:sb.replace("要替换的字符串","替换后的字符串");

清空字符串:clear()

  • 用法:sb.clear()

获取或设置当前字符串长度:length

  • 用法:sb.length = 0;

获取或设置可存放的最大字符个数:Capactiy

  • 用法:sb.Capactiy = 20;

//1.ADO.NET结构

结构

  • Connection:连接数据库
  • Command:对数据库执行命令
  • DataReader:从数据源读取数据
  • DataAdapter:数据集合数据库的联系
  • DataSet:存放独立于数据源的数据

数据源,命名空间 数据提供程序:.NET Framework

  • SQL ServerSystem.Data.SqlClient
  • OLE DBSystem.Data.OleDb
  • ODBCSystem.Data.Odbc
  • OracleSystem.Data.OracleClient

命名空间对应的Connection对象

  • System.Data.SqlClientSqlConnection
  • System.Data.OleDbOleDbConnection
  • System.Data.OdbcOdbcConnection
  • System.Data.OracleClientOracleConnection

//2.连接SQL数据库:Connection

SQL连接字符串

  • Sql Server身份验证:string 变量名 = "Data Source=服务器名; Initial Catalog=数据库名; User ID=用户名; pwd=密码"C#【基础笔记整合,全覆盖】_第1张图片

  • 服务器名:".",表示本机

  • integrated security=true 表示采用信任模式连接(window身份验证登录)

  • Windows身份验证:Data Source=.;Initial Catalog=SecondHandCarDB;Integrated Security=True不需要用户名和密码C#【基础笔记整合,全覆盖】_第2张图片

创建并使用Connection对象

  • SqlConnection 变量名 = new Sqlconnection(SQL连接字符串);
  • 打开数据库连接:Open()
  • 关闭数据库连接:Close()

//3.执行语句:Command

创建并使用Command对象

  • SqlCommand 变量名=new SqlCommand(执行语句, Connection对象);

方法

  • 执行不返回行的语句,返回受影响的行数:ExecuteNonQuery()
  • 返回SqlDataReader对象:ExecuteReader()
  • 返回单个值,第一行的第一列:ExecuteScalar()

验证用户的方法框架

  • 验证信息,返回布尔型:ValidateUser()
  • 显示返回的结果:CheckLogin()

//4.检索只读、只进的数据流,每次读取一行:DataReader

创建并使用DataReader对象

  • SqlDataReader SqlRead= SqlCom.ExecuteReader();
  • 获取列名:SqlRead["列名"]
StringBuilder sb = new StringBuilder();

while(sqlread.Read()){
     
	sb.AppendFormat("[0]\t[1]",sqlread["id"],sqlread["content"]);
	Console.WriteLine(sb);
	sb.Length = 0;
}

属性

  • 当前行中的列数:FieldCound
  • DataReader中列的值:Item
  • 指出是否包含一行或多行:HasRows

方法

  • 前进到下一行记录,返回true表示还有下一条数据:Read()
  • 关闭DataReader对象:Close()
  • 获取指定列的名称:GetName()
  • 获取指定序号处的列的值:GetValue()

关闭关联的SqlConnection

  • CommandBehavior 设置为 CloseConnection
  • 则关闭 SqlDataReader 会自动关闭 SqlConnection 连接
  • 写法:CommandBehavior.CloseConnection

//5.执行语句,查询的返回数据将存储在DataSet:DataAdapter

创建并使用DataAdapter对象

  • SqlDataAdapter SqlAda = new SqlDataAdapter(统计语句, Con对象);
  • 方法2:SqlAda.SelectCommand = Sqlcom;

DataAdapter操作命令

  • 自动生成命令,对DataSet做的更改和数据库相协调:new SqlCommandBuilder(DataAdapter对象);
  • 选取记录:SelectCommand
  • 插入记录:InsertCommand
  • 更新数据:UpdateCommand
  • 删除记录:DeleteCommand
  • 使用方法:Sqlada.操作命令 = new SqlCommandBuilder(Sqlada).Get对应操作命令

向DataSet 中的表填充数据方法:Fill()

  • SqlAda.Fill(DataSet对象, DataSet里数据表的名称)

将DataSet 中的数据提交到数据库:Update()

  • SqlAda.Update(DataSet对象, DataSet里数据表的名称)

//6.创建在内存中的集合对象,相当于临时的数据库:DataSet

作用

  • 可包含任意数量的数据表及约束、索引和关系
  • 它将数据复制在本地内存,供用户读取数据,降低数据库服务器压力

创建并使用DataSet对象

  • DataSet ds = new DataSet(数据集的名称字符串(默认NewDataSet));

属性

  • 存放表的集合:Tables
  • 获取数量:Count

方法

  • 添加一行到指定行的位置:ds.Tables["表名"].Rows.InsertAt(row, 下标)
  • 复制表的结构和数据:Tables[].Copy()

基本结构

  • 数据集:DataSet
  • 数据表的集合:DataTableCollection
  • 数据表:DataTable
  • 数据列的集合:DataColumnCollection
  • 数据列:DataColumn
  • 数据行的集合:DataRowCollection
  • 数据行:DataRow

DataGridView控件属性

  • 所有列的集合:Columns
  • 所有行的集合:Rows
  • 数据源:DataSource
  • 显示的表的名称:DataMember
  • 获取或设置DataGridview中的显示行:RowCount
  • 是否可编辑单元格:ReadOnly
  • 获取选中行的索引:SelectedIndex
  • 获取选中的行:SelectedRow

选择行:创建并使用DataRow对象

  • DataRow row = DataSet对象.Tables["表名"].Rows[下标];

  • 行:Rows[行的下标]

  • 行里面的列:DataRow对象[列的下标]

  • 新列:NewRow()


//1.枚举类:Gender

作用

  • 调用枚举类的枚举,不会误修改

创建方法

  • 普通类:class 类名称
  • 枚举类:enum 枚举类的名称
class class1 {
     
}

enum class2 {
     
}

添加枚举

  • 添加字符串内容:枚举类{ 内容1, 内容2 }
enum class1 {
     
	"a", "b"
}
  • 多种属性类型:字符串1=整数1,字符串2=整数2
  • 类型转换时,’=’ 左右的属性会互转
  • 整数属性默认为下标,从0开始
  • 如果修改了整数,之后的整数属性会根据下标排,但之前的整数不会变化

调用枚举类的属性

  • Gender g = Gender.枚举属性

//2.结构类:struct

作用

  • 结构类的结构传值是值传递
  • 结构类中不允许有实例字段初始值设定项

创建方法

  • 普通类:class 类名称
  • 结构类:struct 结构类的名称
class class1 {
     
}

struct class2 {
     
}

添加结构

  • 添加字段和方法和普通类一样

实例化结构类

  • 可以不用newstruct s
  • 如果不new结构,需要把字段全部赋值
struct class1{
     
	public string name;
	public int age;

	public void aaa() {
     
		Console.WriteLine("aaa");
	}
}
// 第一种:报错
class Program
    {
     
        static void Main(string[] args)
        {
     
        	Class1 c;
        	
            c.aaa();

            Console.ReadKey();
        }
    }
// 第二种:正常
class Program
    {
     
        static void Main(string[] args)
        {
     
        	Class1 c;
        	
        	c.name = "张三";
        	c.age = 18;
        	
            c.aaa();

            Console.ReadKey();
        }
    }
// 第三种:正常
class Program
    {
     
        static void Main(string[] args)
        {
     
        	Class1 c = new c();
        	
            c.aaa();

            Console.ReadKey();
        }
    }

//1.XML

作用

  • XML是一个可扩展标记语言,用来存储节点内容,尾部为 .xml
  • 文字是文本节点,注释是注释节点
  • 导包:using System.Xml

文档对象

  • 生成文档对象:XmlDocument doc = new XmlDocument()
  • 加载xml:Load(xml路径)
  • 获取xml的根节点,返回XmlNode类型:DocumentElement

XmlNode

  • 获取名称:Name
  • 获取该节点和所有子节点的文本节点,不同层级会分行:InnerText
  • 获取当前节点的子节点,返回XmlNodeList类型:ChildNodes
  • 获取XmlNodeList的节点数量:XmlNodeList.Count

//2.文件

作用

  • 可以打开一个文件对象,进行读写,和获取目录和文件的信息
  • 导入:using System.IO

File方法和属性

  • 判断文件是否存在:Exists
  • 获取文件后缀:Extension
  • 复制文件:Copy(旧路径,新路径)

文件信息:FileInfo

  • 文件信息对象:FileInfo fi = new FileInfo(文件路径)

  • 获取文件名:Name

  • 获取文件后缀:Extension

  • 获取文件的绝对路径:FullName

  • 获取文件的字节数:Length

  • 判断文件是否存在:Exists

  • 复制文件:CopyTo(新路径)

  • 剪切文件:MoveTo(新路径)

  • 删除文件:Delete()

目录信息:DirectoryInfo

  • 目录信息对象:DirectoryInfo di = new DirectoryInfo(根目录)

  • 获取目录名:Name

  • 获取当前目录的子目录对象数组:GetDirectories()

  • 获取目录下所有文件对象,返回FileInfo[]:GetFiles()

文件流

  • 文件流对象:FileStream fs = new FileStream(文件路径,读写方式)
  • 关闭文件流:Close()

读写方式:FileMode

  • Append:打开一个文件用于尾部写入,不存在则创建新文件
  • Open:打开一个文件用于只读,不存在则报错
  • OpenOrCreate:打开一个文件用于读写,不存在则创建新文件
  • Create:打开一个文件用于写入,文件存在则覆盖、不存在则创建新文件
  • CreateNew:创建一个文件用于写入,文件存在则报错

操作文件流

  • 写入器对象:StreamWriter sw = new StreamWriter(文件流对象)

  • 写入文件:写入器.Write("写入内容")

  • 关闭写入器:Close()

  • 读取器对象:StreamReader sw = new StreamReader(文件流对象)

  • 从文件的当前位置读取所有字符,返回string:读取器.ReadToEnd()

  • 关闭读取器:Close()

等下还会出C#窗体笔记C#面向对象笔记

你可能感兴趣的:(C#总结,c#,经验分享,sql)