C#基础
Console.write(); 类似于C语言中的printf()函数
区别:C中支持占位符%d,%c. 而C#不行
使用:输出
1.write()直接输出字符串,如:write("你好");
若用/t,/n 须放入双引号中
2.write()输出变量,如int a = 12; write(a);
3.write()字符串+变量,如int a =12; write("a的值是"+a);
4.write()使用格式占位符:{} 如 int a =12; write("a的值是:{0}",a);
输入:Console.Read(); 类似于C语言中的scanf()函数。
如:
string sex = Console.ReadLine();
注:Console.ReadLine();获取到的都是字符串
如用户输入:12 得到的是:“12”.
注释:跟C一致
//: 单行注释
/**/:多行注释
///:文档注释
数据类型:
int:整型(4字节) short:短整型(2字节) lnog:长整型(8字节)
byte:字节
float double decimal(浮点数)
bool(布尔值)true false
string(字符串)
char(字符)
DataTime(日期)
变量:
等同于C语言
变量的声明与赋值。
语法:
int num;
num = 12;
or
int num = 12;
定义变量名的规范:驼峰式命名法.
eg: int StuAge;
常量:
意义等同于C语言,代表不可改变的量。
一旦定义,在使用过程中,不允许被修改。
常量关键字:const;
语法:
const 数据类型 常量名=值;
const double PI = 3.1415926535;
常量名命名规则:全大写。
掌握简单(原始)数据类型的转换
数据类型转换:
两种情况:
第一种:自动(隐式)转换
第二种:强制(显示)转换
重点:使用数据类型转换只需要考虑数据类型的大小关系。
注意:转换一般出现在数值类型之间的转换,也就是 byte,int,short,long,flort,double.
所以只需要掌握以上6种数据类型的大小关系。
byte<short<int<long<float<double
注意:从整型转换为char类型,通过ASCII。
自动转换
:从小往大转。如从byte转换为short或者double,则该转换由系统自动完成。
强制转换
:从大往小转。如double转换为int,则就需要由我们进行强制转换。
double db =12.5;
int num = 12;
int sum = db+num;//这个时候就必须进行计算结果的强制转换。 注意,进行运算时必须同类型
因为结果sum为int类型,而计算过程中,db为double类型,num为int类型。
在计算时,num会自动转换为double类型与db进行加法运算。算出来的结果一定为double类型。
而此时,sum又为int类型,所以必须将计算的结果强制转换为int.
//第一种解决方案:
//先计算得出结果,再转换类型
int sum = (int)(db+num);
//第二种解决方案:
int sum = (int)db + num;
如果需要转换以下这种类型的数字,则需要另一种转换方法。
string num =“12”;
利用parse()方法进行转换
只能将字符串转为其他类型。
如需要将上面的num转换为int。
则: int number = int.Parse(num);
万能转换器:Convert类
可将任意类型转为任意类型。
Convert.To数据类型
eg:
Convert.Toint32(值) -->返回值:int
注:转为float Convert.ToSingle(值) -->返回值:float
判断:
if单分支语句
if(){
语句1...
}
语句2....
if else 双分支语句
if(){
语句1...
}else{
语句2....
}
语句3....
if else if 单分支语句
if(){
语句1...
}else if(){
语句2....
}else if(){
语句3....
}else{
语句4....
}
语句5....
switch语句:
switch(){
case 常量1:
break;
case 常量2:
break;
.
.
.
case 常量N:
break;
default:
代码块;
break;
}
switch能实现的功能,if else if 都能执行,反之则不一定。
switch只能在条件范围小,有固定常量值时使用。
循环:某一段代码块需要重复执行时
while循环(先判断后执行)
while(循环条件){
循环体;
}
do while 循环(先执行后判断)
do{
循环体;
}while(循环条件)
for 循环(先判断后执行)
for(int i=1;i<=5;i++){
循环体;
}
break,continue
break:在循环中,只要遇到break,那么该循环直接结束。 如果出现循环嵌套,break只会结束他所在的当前循环体,不会结束外层循环。
continue:在循环中,只要遇到continue,则结束当前次循环,进入下一次。
数组
用作存储同类型的数据,可以存储多个数据,具体数量一旦定义,则无法改变。
语法:
//声明数组:
数据类型 [] 数组名;
初始化数组:
数组名 = new 数据类型[数组大小];
如:
int [] numbers = new int[5];
数组使用赋值的三种方式:
第一种:直接赋值
如:
int [] numbers = {12,13,14}; //常用
第二种:指定大小并赋值
如:
int [] numbers = new int[3]{12,13,14};
第三种:根据数组元素获得长度(不定义大小)
如:
int [] numbers = new int[]{12,13,14};
数组名.Length
:获取该数组的大小。
数组的下标(index)是从0
开始。
数组的赋值:
numbers[index]=值;
nubmers[0]=12;
则该数组的第一个格子存放的数据就是12;
获取数组中的数据:
数据类型 变量=numbers[index];
int num = numbers[0];
foreach:
只会用作查询显示数据
用作遍历数组或者集合中的数据,特点不能改变集合或者数组中的内容。因为在该循环中无法操作下标。
语法:
foreach(数据类型(数组为什么类型这就是什么类型) 变量名 in 集合或者数组){
代码块
}
字符串处理
双引号所包含的内容就叫字符串。
如:“123”; 该数字123为字符串,而不是数值。不能用作直接运算,需要强制转换。
在C#中,使用数据类型string进行表示字符串。
如:string age=“20”;
在C#当中,系统提供了一系列常用的字符串处理方法。
如:
trim():
去掉字符串前后的空格。
ToLower():
将大写字母变为小写字母。
ToUpper():
将小写字符变为大写字母。
insert():
将一个字符插入到指定的位置(下标)。
indexOf():
得到某个字符第一次出现的下标位置。
LastIndexOf():
得到某字符最后一次出现的下标位置。
Join():
将两个字符串合并成一个新的字符串。
Replace():
用某字符串替换掉原字符串
CopyTo():
复制字符串
Split():
将字符串以某个特定字符进行拆解,得到一个字符串数组。
Substring():
截取指定位置的字符串。
Format():
格式化字符串
注:Join方法是用
string.Join("连接符",数组名).
Substring(StartIndex,length);下标,长度
方法
目的:实现书写一次代码,能够多次使用,简化代码块
(1).无参无返回值
访问修饰符 void 方法名(){
代码块
}
//调用:(调用方法前应先实例化)
类名 i = new 类名();
i.方法名()
(2).有参无返回值
void 方法名(形参1,形参2,形参n){
代码块
}
//调用:
方法名(实参1,实参2,实参n);
(3).无参有返回值
数据类型 方法名(){
代码块
return 值;
}
//调用:
数据类型 变量名 = 方法名();
(4).有参有返回值
数据类型 方法名(形参列表){
代码块
return 值
}
//调用:
数据类型 变量名 = 方法名(实参列表);
注:形参与实参数量顺序必须一致
return后的值与返回值类型必须一致
访问修饰符:修饰该方法访问的权限
public:公共的
protected:受保护的(需考虑包,继承关系)
internal:内部的
private:私有的
注:通常都为public,若没有写则默认为private。
随机数:
//创建对象:
Random rd = new Random();
//产生随机数.
int num = rd.Next(); //产生非负整数
int num = rd.Next(上限);
int num = rd.Next(下限,上限);
窗体
窗体命名要求:
frm + 英文描述
eg:
frmLogin
常用属性
Icon:标题栏显示的图片(必须是xxx.ico图片)
Text:标题栏显示的字体
MaxMizeBox:是否显示最大化
MinMizeBox:是否显示最小化
HelpButton:是否显示帮助按钮(最大化,最小化和它只能显示其一)
StartPosition:窗体第一次出现的位置,值为CenterScreen,居于屏幕中央
FromBorderStyle:窗体边框样式,值为FixedSingle,运行后不能在变
AcceptButton:设置按“回车”相当于按了哪个按钮
共有的属性:
Text:文本值
Name:控件的名称
Enabled:是否启用
TabIndex:确定按"Tab"键的顺序
BackColor:背景颜色
BackgroundImage:背景图片
BackgroundImageLayout:背景图片布局方式
常用事件(加载事件)窗体加载时发生(按下运行后,就会执行Load事件执行完后窗体才会显示)
任何在窗体呈现时就已经有的事件,都应写在Load事件中
事件
一种行为做不同的行为就会触发不同的事件
控件:
所以控件公有属性
Text:显示文本内容
Font:设置字体
ForeColor:字体颜色
Enabled:是否启用控件
TabTndex:确定按Tab键顺序
Lable:文本(lbl + 描述)
Button:按钮(btn + 描述)
常用事件:Click(单击事件默认)
this:
当前窗体
取控件的值:
数据类型 变量名 = this.控件名.Text;
给控件赋值:
this.控件名.Text = 值;
TextBox:文本框(txt + 描述)
判断非空
if(this.控件名.Text.Trim()==""){
//消息提示框
MessageBox.Show("要提示的内容","标题",MessageBoxButtons.按钮,MessageBoxIcon.图标);
//让文本框获取焦点
this.控件名.Focus();
}
清空文本框:
方式1:this.控件名.Text ="";
方式2:this.控件名.Clear();
消息框:
MessageBox.Show("要提示的内容");
MessageBox.Show("要提示的内容","消息框的标题");
MessageBox.Show("要提示的内容","消息框的标题",MessageBoxButtons.按钮,);
MessageBox.Show("要提示的内容","消息框的标题",MessageBoxButtons.按钮,MessageBoxIcon.图标);
关闭当前窗体:
this.Close();
ComboBox:组合框(下拉列表框)(cbo + 描述)
常 用属性;
Name:名称
Text:文本值
Items:集合
DropDownStyle:值为DropDownList表示只能选择,不能修改
常用操作:
(1)往控件中添加项:
this.控件名.Items.Add(值); //值可以是:任何类型(object)
(2)默认选中第一项;
this.控件名.SelectedIndex = 索引;
当往控件中添加多项之后,就通过索引来区分每一项(索引就是下标,从0开始)
(3)判断是否选中:
if(this.控件名.SelectedIndex==0 或者 this.控件名.Text=="--请选择--")
{
.....................
}
(4)删除项;
方式1:删除指定的项;
this.控件名.Items.Remove(要删除项);
方式2:根据下标删除:
this.控件名.Items.RemoveAt(下标);
(5)删除所有项(清空所有项):
this.控件名.Items.Clear();
常用事件;
SelectedIndexChanged:
默认事件(触发时间更早)
SelectionChangeCommitted:
下拉列表选中某个项而列表项关闭时发生 你不选它就不触发
格式化:
string str = string.Format("....");
RadioButton:单选 前缀:rdobtn+描述
常用属性:
Name:控件名称
Text:控件显示的文本
Checked:是否默认选中
判断是否选中:
if(this.控件1.Checked==false && this.控件n.Checked==false)
{
未选择...................
}
单选框取值:
方式1:
string sex="";
if(this.rdobtnNan.Checked == true) 注意:==true可以不写
{
sex = "男" 或者 sex = this.rdobtnNan.Text
}
else
{
sex = "女" 或者 sex = this.rdobtnNv.Text
}
方式2:
string sex = this.rdobtnNan.Checked == true ? "男" : "女";
消息框返回值:DialogResult
MessageBoxButtons.OKCancel //表示消息框上出现:确定和取消
DialogResult dr = MessageBox.Show("您确定要删除吗","温馨提示", MessageBoxButtons.OKCancel, MessageBoxIcon.Information);
if(dr == DialogResult .OK) //根据显示的按钮来判断
{
点击了确定.....
}
else
{
点击了取消........
}
窗体跳转:
步骤1:创建要跳转的窗体对象
窗体名 对象名 = new 窗体名();
例如:
frmMain main = new frmMain(); //注意:frmMain是要跳转的窗体的名称 main是自己取的对象名(像变量名一样)
步骤2:显示窗体
对象名.Show();
eg:
main.Show();
Timer:计时器
常用属性;
Enabled:是否启用,如果是false,计时器被禁用
Interval:间隔时间(单位是毫秒)
常用事件;
Tick:每当经过间隔时间时就会触发
常用方法;
Start():启用计时器 语法:this.计时器控件名.Start();
Stop:停止计时器 语法:this.计时器名.Stop();
Picturebox:图片框
常用属性:
Image:设置图片框显示的图片
ImageList:图片列表
常用属性;
Images:图片的集合
从控件中获取某一张图片:
this.控件名.Images[下标];
MenuStrip:菜单栏
根菜单快捷键设置;
Text属性值:描述&字母
文件(&F)—>按下Alt+F就能打开这个菜单
子菜单快捷键设置:
ShortcutKeys:选择对应的快捷键
命名前缀:tsmi+描述 例如:tsmiOpen tsmiClose
注意:双击子菜单,就能使用它的单击事件
ToolStrip:工具栏
工具栏上的Button控件:
常用属性:
Name:控件名称 前缀:tsbtn+描述
Text:显示的文本
Display:设置图片与文的显示方式 ImageAndText表示图片文字都
Image:按钮上显示的图片
TextImageRelaction:图片与文字的排版方式(文字在图片在上下左右哪个位置)
工具栏调整大小;
步骤1:选中“ToolStrip”整个工具栏,设置两个属性
属性1:Locked设置为true(表示允许调整控件的大小)
属性2:ImageScalingSize的值设置为更大(放大缩放比例,如:60,60)
步骤2:选中工具栏上的其中一个控件(如按钮),设置一个属性
Size属性:调整尺寸(如:80,65),回车之后,其它控件将会自动放大
StatusStrip:状态栏
多文档窗体(MDI):必须将窗体的IsMdiContainer设置为true
是指一个父窗体中可以同时打开多个子窗体
单文档窗体(SDI):
是指一个父窗体中只能打开一个子窗体
打开一新窗体:
步骤1:创建要找开的窗体的对象
Form1 f1 = new Form1();
步骤2:显示该窗体
方式1:普通窗体
f1.MdiParent = this; //设置它的父窗体为:当前窗体( 必须将窗体的IsMdiContainer设置为true)
f1.Show(); //普通窗体,可以同时打开多个(多文档)
方式2:模式话窗体
f1.ShowDialog(); //模态窗体(模式话窗体),只能打开一个子窗体(单文档)
ADO.NET
C#连接sqlserver数据库
C#连接mysql数据库
什么是ADO.NET:
是应用程序(winform)与数据库之间的桥梁,在应用程序中可以使用ADO.NET来操作数据库(增,删,改,查)
ADO.NET的两大组件:
(1) .netframework数据提供程序 负责:提供了四大对象供用户操作数据库
(2) DataSet(数据集,内存数据库,临时数据库) 负责:负责临时存放数据
四大对象:using System.Data.SqlClient;
(引入命名空间)
(1)SqlConnection
:连接对象
负责:打开、关闭数据库
常用方法:
Open():连接打开数据库
Close():关闭数据库
(2)SqlCommand
:命令对象
负责:执行sql语句(insert update delete select)
常用方法:
ExecuteNonQuery():负责执行insert update delete
ExecuteScalar():负责执行select,返回:查询结果中第一行第一列的值 单行单列查询
ExecuteReader():负责执行select,返回:DataReader(利用这个读取器读取需要的数据) 多行多列查询
(3)SqlDataReader
:数据读取器
负责:读取数据(将数据库中的数据读取应用程序) 特点:一次只读一行,只向前只读,读取数据基本不能关闭数据库(连接式查询)
(4)SqlDataAdapter
:数据适配器
负责:执行select 语句,并且可以将查询到的数据全部一次性取出来 (断开式查询),放到DataSet中
执行增、删除、改:
//步骤1:创建连接对象有(目的:打开和关闭数据库)
SqlConnection conn = new SqlConnection("server=. ; database=要连接的数据库 ; uid=用户名 ; pwd=密码"); //注意:conn是自己取的对象名
//步骤2:打开数据库(注意:打不开就是连接字符串有问题)
conn.Open();
//步骤3:创建命令对象(目的:为了执行sql语句)
SqlCommand cmd = new SqlCommand(sql,conn); //理解:告诉cmd在conn打开的数据库中去执行sql语句 sql是变量名,里面装的是要执行的sql语句
//步骤4:执行(执行出错就是sql变量中的语句有错误)
int row = cmd.ExecuteNonQuery(); //注意:row是自己取的变量名,接收方法的返回值(返回的是受影响的行数)
//步骤5:关闭数据库
conn.Close()
//判断:
if(row >= 1)
{
成功........
}
else
{
失败......
}
数据查询:
//步骤1:创建连接对象
SqlConnection conn = new SqlConnection("server=.;database=数据库名;uid=sa;pwd=123456");
//步骤2:打开数据库
conn.Open();
//步骤3:创建命令对象
SqlCommand cmd = new SqlCommand(sql,conn);
//步骤4:执行
object 变量名 = cmd.ExecuteScalar(); //返回sql语句执行后查询结果中:首行首列的值(第1行第1列)(单行单列查询)
//步骤5:关闭数据库
conn.Close();
//判断:
if(变量名 == null) //表示没有取到任何数据
{
}
else //表示取到了数据
{
}
数据增、删除、改、查:
//步骤1:创建连接对象
SqlConnection conn = new SqlConnection("server=.;database=数据库名;uid=sa;pwd=123456");
//步骤2:打开数据库
conn.Open();
//步骤3:创建命令对象
SqlCommand cmd = new SqlCommand(sql,conn);
//步骤4:执行
//(1)执行insert update delete语句:
int 变量名 = cmd.ExecuteNonQuery(); //返回sql语句执行后受影响的行数
//(2)执行select语句:
object 变量名 = cmd.ExecuteScalar(); //返回sql语句执行后查询结果中:首行首列的值(第1行第1列)(单行单列查询)
//(3)执行select语句:
SqlDataReader 变量名 = cmd.ExecuteReader(); -->数据读取器,可以使用这个读取器在数据库中读取需要的数据 (多行多列查询/连接式查询)
//步骤5:关闭数据库
conn.Close();
断开式查询:
//步骤1:创建连接对象
SqlConnection conn = new SqlConnection("连接字符串");
//步骤2:创建数据适配器
SqlDataAdapter sda = new SqlDataAdapter(sql,conn);
//步骤3:创建数据集(准备的一个装数据的容器)
DataSet ds = new DataSet();
//步骤4:填充数据(sda适配器将取到的数据放到/填充到dataset中去)
sda.Fill(ds);
//将dataset中的数据显示到控件中去(数据绑定)
this.dgvInfo.DataSource = ds.Tables[0];
ComboBox:下拉列表框
数据绑定:
//步骤1:指定数据源
this.控件名.DataSource = ds.Tables[0]; //ds:装数据的DtaSet
//步骤2:指定显示列:
this.控件名.DisplayMember = "字段名"; //呈现给用户看的那个列的名称
//步骤3:指定实际列(隐藏列):
this.控件名.ValueMember = "字段名"; //可选的,可要可不要
//只要绑定数据时设置了两个值,取值时就可以取两个:
//取显示值:
this.控件名.Text
//取实际值:
this.控件名.SelectedValue; //取出来是object类型
DataGridView获取选中行的值:
this.控件.SelectedRows[0]:获取选中项的第一行
this.控件.SelectedRows[1]:获取选中项的第二行 要选中两行才不会报错
DataGridView获取上行某个列的值:
this.控件.SelectedRows[0].Cells[索引].Value:索引就是从0开始数的下标 出来来是:object类型
this.控件.SelectedRows[0].Cells[0]:获取选中项第1行第1列的值
C#中到调试:
设置断点 --> F5运行 --> F10 执行下一句代码(F11代码块为方法,进入其中看过程)
shift + F5
停止调试
一个文件可有n个断点,但调试完毕一定要取消断点