使用C#开发数据库应用程序




文档描述:
1--3:C#基础语法
4--5:Winforms编程的相关主题
6--8:ADO.NET----对象:Connection,DataReader,DataAdapter,DataSet等。 (注:ADO.NET是数据库去驱动解决方案中的核心技术)

课程详细:

1--3:Hello ACCP.NET快速热身
1,C#世界
.NET Framework是一个创建,部署和运行应用程序的多语言多平台环境,包含庞大代码库为各种.NET语言所共用。
C#:一种强大的面向对象的的程序开发语言,是专门用于.NET的编程语言,其所编写的代码总在.NET Framework中运行。
可编写Windows桌面应用程序(Winforms),Windows服务程序(Windows Service),Internet应用程序(ASP.NET),Web服务程序(Web Service)
2,Visual Studio.NET(简称VS)
集成了.NET Framework,利用Visual Studio.NET可以快速开发.NET应用程序;
VS2005支持的是.NET Framework 2.0
3,IDE
集成开发环境 (在这里就是指VS)

4,控制台应用程序文件夹结构
1,解决方案
解决方案和项目都是VS提供的有效管理应用程序的容器----一个解决方案可以包含一个或多个项目,而每个项目能够解决一个独立的问题。
2,XXX.cs文件
程序源文件
3,XXX.exe
位于bin\Debug目录下,是项目编译后生成的可执行文件,可以直接运行。

5,关键字
namespace
using
class 类名可以不与源文件名相同
Main 注意:1, Main()首字母必须大写;2,Main()方法的返回值可以是void或者int;3,Main()方法中的命令行参数可以没有。即:Main()有四种形式。
static void Main(string args){  }
static int Main(string args){  }
static void Main(){  }
static int Main(){  }

6,数据类型
常用数据类型包含:
C# Java
整型 int int
浮点型 float float
字符串 String string
布尔型 boolean bool

7,变量命名
见开发规范二

8,C#常用的运算符 (和Java支持的一样)
算术 (7个)
比较 (6个)
条件 ?:
赋值 (6个)
逻辑 (3个)

9,c#注释
同Java:
行注释: //
块注释: /*…...*/
异:
文档注释:
///
10,Console类
输出方法:
Console.WriteLine("Hello");
Console.Write();
输入方法:
Console.ReadLine();

11,条件判断
if
注意: 只有满足外层If的条件时才会判断内层的If条件;
else与离他最近的那个缺少else的if相匹配;
规范: 见规范二中if规范

12,switch结构
C# java
可以判断整型或字符串类型 Java只接受整型或字符型
case必须包含break语句(除非该case语句不包含 case可以没有break语句;
其他语句)
即:可判断int,byte,short,char,long
即:可以判断Java的基础上还有String,当case后
只要有语句就必须要有break;

benzhangxiaojie--1:

1,使用VS创建和运行C#控制台应用程序的步骤
2,C#采用命名空间(namespace)组织程序,引入其他命名空间用using关键字;
3,Main()方法首字母大写,根据返回值和参数的不同,Main()方法有4种形式;
4,常用变量类型,布尔型用bool关键字;
5,运算符与Java同
6,3种注释,文档注释用///
7,switch条件判断与Java不同
8,使用Console类进行控制台的输入输出;


13,二重循环continue和break语句对比
break 跳出本层循环执行外层循环
continue 跳出本次循环继续执行下一次循环

14,一维数组
声明:
c# Java
数据类型[]数组名 数据类型[]数组名 ;数据类型[]数组名
即:C#中数据符号必须在数组名前,而Java中随便放;
初始化:
int[] array=new int[2]{1,2};
int[] array=new int[]{1,2};
int[] array={1,2};

即:优先由[]中的数字决定数组大小,如果没有才由后边大括号的个数决定;
错误: 如果既有[]又有{},而相对的值不同那么编译不报错但运行报错!

长度:
组名.leng
访问数组元素用索引(Java中的索引)。

15,冒泡排序
口诀(升序):
N个数字来排队,两两相比小靠前;
外层循环N-1,内层循环N-1-i;
如果要降序排序,只要大于换小于。
代码:
int[] score = new int[5] { 1,2,3,4,5};
            int temp;

            //开始--使用冒泡排序(升序):
            for (int i = 0; i < score.Length - 1; i++)
            {
                //将最大的元素交换到最后:
                for (int j = 0; j < score.Length - 1 - i; j++)
                {
                    if(score[j]>score[j +1])
                    {
                        //交换元素
                        temp = score[j];
                        score[j] = score[j + 1];
                        score[j + 1] = temp;
                    }
                }
            }
            //排序后输出:
            for (int i = 0; i < score.Length; i++)
            {
                Console.WriteLine("{0}\t;",score[i]);
            }
            Console.Read();
排序的次数:
所要排序的数字的个数累加到2即可;
五个数比较5+4+3+2=14次;


benzhangxiaojie--2:

1,4种循环语句:
while,do…while,for,foreach
foreach用来遍历集合或者数组中的每个元素;
2,二重循环
在一个循环中嵌套另一个循环,必须将内层循环完整的包含外层循环的循环体内;
3,break,continue
用在内层循环时,只对内层循环的执行有影响,不影响外层循环;
4,C#一维数组
初始化时不同Java,声明时不能将数组名放在数据类型和方括号之间,
格式必须是:数据类型 [] 数组名;
5,冒泡排序
使用二重循环实现,排序的过程是比较相邻的两个数并交换,直到所有的数都排序;

16,命名空间
命名空间是.NET提供的一种组织代码的方法,有了命名空间就可以唯一的标示代码了;
如果在程序开头没有引入命名空间则在程序中就需要使用完全限定名来访问其他命名空间中的程序;

17,String类
方法: 说明:
bool Equals(string value) 比较两个字符串是否相等,和"=="的作用相同
int Compare(string strA,string strB) 比较字符串大小,返回A长度-B长度
int IndexOf(string value) 匹配字符串的首字母,没匹配的返回-1
int LastIndexOf(string value) 匹配原字符串中相匹配的最后一个的索引,没有返回-1
string Join(string separator,string[] value) 将数组中的字符串用separator连接起来
string []Split(char separator) 分割字符串得到字符串数组
string SubString(int startIndex,int length) 从指定位置开始检索长度为Length的子字符串
string ToLower() 获取字符串的小写形式
string ToUper() 获取字符串的大写形式
string Trim() 去掉字符串两端空格
string Replace(char old,char new) 替换字符串中的字符
string Format("格式字符串",参数列表); 静态方法

注意:
string []Split(char separator)不是静态的,要使用具体字符串调用
string Join(string separator,string[] value)是静态的,直接使用string类名调用;


benzhangxiaojie--3:

1,using关键字
使用using关键字引用命名空间;
2,参数传递
向方法中传递参数:
按值传递:
按应用传递: 需使用ref关键字修饰参数,方法中对参数值的修改可保留。
注意:在方法定义和调用的时候都要使用ref修饰符,
而且使用ref修饰的参数必须在调用的方法中赋值;
3,VS使用技巧
利用重构提起方法
4,String提供的常用字符串处理方法
Format()方法格式化字符串;
5,数据类型转换
隐式转换 常用于数据型之间,大转小
显式转换 常用于数据型之间,小转大
Parse()方法 数字型的数据类型.Parse(string strA) 将有效的数字型字符转为数字
Conver类 各种基本类型间转换
注意:Convert.ToInt32(float XX)时,会对XX进行四舍五入的——即,转int型时进行四舍五入;


第4:第一个Windows程序

18,Windows程序文件夹结构
FormX.cs 窗体文件 程序员编码的存放位置
FormX.Designer.cs 窗体设计文件,VS自动生成
Program.cs 主程序文件,包含程序的入口Main()方法
Main()方法是自动生成,运行窗体的代码:
Application.Run(new FormX());--运行窗体;

19,认识窗体文件
Windows应用程序有两种编辑窗口:
窗体设计器窗口: 进行窗体界面设计,拖放控件,设置窗体及控件属性时使用,不需要编写代码
窗体代码编辑窗口: 用于手动编码时
partial关键字: (标示分布类) ——.NET Framework2.0中引入的新特性
将同一个类的代码分开放在多个文件中,每个文件都是类的一部分代码
利用VS创建的窗体都是分布类
特点:具有相同的命名空间和类名,类名前都都partial关键字,编译时VS把它们合并成一个类进行处理;
Form类:
Form是.NETFramework定义好的一个基本的窗体类,具有一些窗体的最基本的属性和方法,:(冒号)表示继承

20,认识窗体
基本属性(重要)
Name,BackColor,BackgroundImage,FormBorderStyle,MaximizeBox,MinimizeBox,HelpButton
ShowInTaskbar(是否出现在Windows任务栏中默认true),TopMost(显示在最上层),StartPosition,Text,
WindowState(初始可视状态),Opacity(透明度),Font(字体)
重要事件
事件驱动机制:
通过随时响应用户出发的事件,做出相应的响应;如:Windows操作系统本身就是通过事件来处理用户请求的。
WinForms程序也是事件驱动的,.NET Framework定义好了很多事件,我们只需根据需要编写相应的事件处理程序
事件处理程序——当什么事件发生时程序该有什么反应;
注意:
B/S:请求驱动
C/S:事件驱动
事件: (事件参数解释)
sender--事件源: 表示谁引发了事件
e--(事件源的)事件参数对象: 不同的事件有不同的的事件参数
事件参数里封装了一些可能用到的数据,比如鼠标事件就封装了鼠标的横纵坐标;

21,使用窗体控件
MenuStrip--菜单条 顶层菜单项,子菜单(菜单项)
MenuItem--菜单项
ComboBox--组合框
TextBox--文本框

22,退出程序
Application.Exit();

23,基本控件
Lable 标签
TextBox 文本框
Button 按钮
RadioButton 单选按钮 用面板或其他将其包含起来,用于选项的互斥
ListBox 下拉列表 SelectionMode:指示列表框是单选,多选还是不可选 MultiSimple表示每次鼠标单击都就选中,MultiExtended每次单击都更改鼠标的选中项
ComboBox 组合框 输入或选择 组合文本框和列表框的特点,允许在组合框内键入文本或从列表中进行选择
GroupBox 分组框 为其他控件提供可识别分组,由标题
Panel 面板 类似分组框,没标题但可显示滚动条 AutoScroll--当控件内容大于它的可见区域时是否自动显示滚动条,默认为false(不显示)

24.窗体间的跳转
被调用窗体类 对象名=new 被调用窗体类();
对象名.Show();
对象名.ShowDialog(); (模式窗体,唯一显示)

24,MessageBox对象
消息框的返回值:DialogResult类型;


benzhangxiaojie--4:

1,利用VS创建Windows应用程序的步骤
2,认识窗体的重要属性和事件
3,控件的使用
4,生成并编写窗体和控件的事件处理程序
5,使用窗体的Show()方法实现窗体间的跳转
6,使用MessageBox.Show()显示消息框(MessageBox),消息框的返回值是一个DialogResult类型;


第5:用控件进行快速开发

25,排列窗体上的控件
对齐 选择要对齐的控件-->选择“格式”-->"对齐",选择对齐方式
注意:第一个控件是主控件,其他控件都与它对齐;
Anchor 设置控件相对于窗体的某个边缘的距离保持不变,即和窗体一起动态调整控件大小
Dock 停靠

26,MDI--多文档界面应用程序
SDI 单文档界面——一个记事本窗口只能打开一个文件
MDI 多文档界面--Excel窗口——主要由两种窗口组成:父窗口和子窗口
特点:
启动MDI应用程序时,首先显示父窗体
每个应用程序界面都只能有一个MDI父窗体,是所有其他窗口的容器
关闭父窗体则自动关闭所有打开的MDI子窗体
可以打开多个子窗体任何MDI子窗体都不能移除MDI框架区域
创建
指定父窗体:将父窗体IsMDIContainer=true;
设置子窗体:实例化子窗体后在显示前制定其父窗体:sunForm.MdiParent=this;
为父窗体添加字窗体列表:
菜单项: 在父窗体中添加一个菜单项,并添加一个”窗口“菜单项
菜单: 将菜单控件的MdiWindowListItem属性设置为”窗口“菜单项
注意:只能用Show()方法显示而无法用模式窗口(ShowDialog()方法)显示;

27,工具条控件和状态条控件
ToolStrip 工具条(包含其他控件,DropDownButton--具有图片可点击的下拉列表)
DropDownStyle--Combox:只能选不能写;
AcceptButton-->设置绑定按钮的click事件;
Opcity透明度;
经验:
将添加好的工具项转换为其他形式:
选中工具条项,鼠标右键,选择”转换为“,选择要转换为的形式即可;
StatusStrip 状态条,放在底部用于显示基本信息

28,选项卡控件
显示多个选项卡页,可包含图片以及其他控件等

29,图片框,图像列表,计时器控件
PictureBox
ImageList 用于存储Windows窗体其他控件使用的图像,图像大小相同;TransparentColor,被视为透明的颜色;
Timer 让程序每隔一定时间爱你重复做一件事情(死循环)
属性:
Interval:事件发生的频率,一毫秒为单位
Enabled:是否定时引发事件,要使用该控件需设置为true;
事件: Tick:每当指定间隔发生的事件
方法: Start()
Stop()
代码:
int index = 0;
        //计时器的事件处理方法,定时变换图片框中的图片
        private void timer1_Tick(object sender, EventArgs e)
        {
            //如果当前显示的图片索引没有到最大值就继续增加
            if (index < imageList1.Images.Count - 1)
            {
                index++;
            }
            else//否则从第一个图片开始显示,索引从0开始
            {
                index = 0;
            }
            //设置图片框显示图片
            this.pictureBox1.Image = imageList1.Images[index];
        }

30,模式窗体
模式窗体:当窗体显示时禁止访问应用程序的其他部分;如果正在显示的对话框在处理前必须由用户确认
无模式窗体:允许使用应用程序的其他部分;
模式窗体:唯一显示并要求确认处理否则拒绝继续操作应用程序其他部分;


benzhangxiaojie--5:

1,排列窗体控件有3种方式:对齐,使用Anchor(锚定),使用Dock(停靠);
2,创建MDI(多文档界面),需要分别设置父窗体和子窗体的属性,还可以在父窗体上建立子窗体的列表
3,会使用Winforms的高级控件:工具条(ToolStrip),状态条(StatusStrip),选项卡(TabControl),
图片框(PictureBox),图像列表(ImageList),计时器(Timer)
4,窗口有两种显示方式:模式窗口和非模式窗口,显示模式窗口使用ShowDialog()方法,显示非模式
口用Show()方法;
5,为了能在窗体之间传递数据,新建UserHelp类存放登陆的用户名和登陆类型


第6:用ADO.NET连接数据库
benzhangxiaojie--6:

1,ADO.NET Framework中的一组允许应用程序与数据库交互的类
2,ADO.NET 的两个主要组件时.NETFramework数据提供程序和DataSet
3,.NET数据提供程序包括4个核心对象:Connection,Command,DataAdapter,DataReader(存储数据的容器)
4,Connection对象用于建立应用程序和数据库之间的连接,需要定义连接字符串,必须显示关闭数据库连接
5,Command对象允许向数据库传递请求,检索和操作数据库中的数据
6,Command对象的ExecuteScalar()方法可以检索数据库并返回一个值
7,数据库操作可能出现异常,可以使用try…catch…finally来处理异常

第7:用ADO.NET查询和操作数据库
benzhangxiaojie--7:

1,使用DataReader
查询数据记录,通过Command对象的ExecuteReader()方法返回一个DataReader对象
读取数据时,每次调用Read()方法读取一行数据
使用完毕后要调用Close()方法关闭
2,使用Command对象
ExecuteNonQuery()方法对数据进行增删改的操作
返回受影响的行数
3,ListView(列表视图)
5种视图模式,常用的有详细视图(Details)
4,ContextMenuStrip(快捷菜单)
可以与其他控件结合使用,通过设置控件的ContextMenuStrip属性来指定它的快捷菜单

操作数据库小结:
1,查询单个值
需要使用Command对象的ExecuteScalar()方法
1)创建Connection对象(数据库连接对象)
2)创建查询用SQL语句
3)利用SQL语句和Connection对象创建Command对象
4)打开数据库连接,调用Connection对象的Open()方法
5)调用Command对象的ExecuteScalar()方法,返回一个标量值
6)操作完成后关闭数据库连接
2,查询若干条记录
需要使用Command对象的ExecuteReader()方法
1)同1中查询单个值
2)同1
3)同1
4)同1
5)调用Command对象的ExecuteReader()方法,返回一个DataReader对象
6)调用DataReader对象的Read()方法逐行读取记录,如果读到记录返回True,否则返回false
7)使用(type)dataReader[列名或索引]的方式读取这一行中某一列的值
8)关闭DataReader对象

9)操作完成后关闭数据库连接,调用Connection对象的Close()方法
3,非查询操作
包括增加,修改,删除数据,都是用Command对象的ExecuteNonQuery()方法执行命令,返回受影响的行数
1)同1中查询单个值
2)同1
3)同1
4)同1
5)调用Command对象的ExecuteNonQuery()方法执行命令,返回受影响的行数

6)操作完成后关闭数据库连接,调用Connection对象的Close()方法


第8:使用DataGridView显示和操作数据库
benzhangxiaojie--8:

1,数据集DataSet可以在断开数据库连接的情况下操作数据,对数据进行批量操作,
结果与SqlServer数据库类似
2,使用DataAdapter的Fill()方法填充DataSet,使用Update()方法把DataSet
中修改过的数据返回给数据库

ADO.NET小结:
ADO.NET由两部分组成:.NET数据提供程序和数据集(DataSet)
.NET数据提供程序包括4个核心对象:
Connection对象,用来建立数据库的连接
Command对象,用来对数据库执行命令
DataReader对象,用来从数据库中获取只读,只进的数据
DataAdapter对象,是数据集(DataSet)和数据库之间的桥梁,用来将数
据填充到数据集,并把数据集中修改过的数据提交给数据库
.NET数据提供程序是与数据库有关系的,不同类型的数据库要使用不同命名空间中的.NET数据提供程序

数据集(DataSet)
临时存储数据的地方,位于客户端的内存中。不和数据库直接打交道而是通过DataAdapter
对象和数据库联系的

应用程序在操作数据库的时候的两种方法:
一:直接对数据库执行命令
如果查询单个值就使用Command对象的ExecuteScalar()方法;如果要查询多个值,就使用Command对象的
ExecuteReader()方法,返回一个DataReader()对象,利用DataReader对象的Read()方法可以每次读出一条记录;
如果要对数据进行修改,可以使用Command对象的ExecuteNonQuery()方法,返回受影响的行数
二:利用DataSet简介操作数据库的数据
通过DataAdapter对象的Fill()方法把需要的数据一次放在DataSet中,
如果不需要对数据进行修改,只需要Fill()方法就可以了;
如果对数据集的数据进行了修改,要把更新数据到数据库,就需要使用DataAdapter对象的Update()方法

DataReader和DataSet的选择:
DataSet适用于:
想把数据缓存在本地,供应用程序使用;
想在断开数据库连接的情况下仍能使用数据;
想为控件指定数据源,比如使用DataGridView
DataReader适用于:
只读取查询结果;节省内存,提高性能。


quanbuxiaojie--使用C#开发数据库应用程序:

1,C#基础语法,包括变量,数据类型,条件语句,循环语句,数组,自定义方法,两种传递参数的方式,强大的String类
2,WinForms常用控件:包括基本控件和高级控件
Label,TextBox,ComboBox,ListBox,GroupBox,Panel,Button,RadioButton,PictureBox,
ImageList,MenuStrip,ToolStrip,StatusStrip,TabControl,Timer,ListView,DataGridView
3,ADO.NET基础知识,包括.NET数据提供程序的4个核心对象,数据集(DataSet)

你可能感兴趣的:(数据结构,C++,c,应用服务器,C#)