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

第一章 用Hello ACCP.NET快速热身(一)


1-1.进入C#世界

a.第一个C#程序

(1)新建项目【项目:project】
(2)生成解决方案【生成:build,解决方案:solution】
(3)调试【调试:debug】


b.认识控制台应用程序文件夹结构

Program.cs .cs作为扩展名
HelloACCP.exe 是编译后生成的文件,可以直接执行
经验:视图-解决方案资源管理器 也可以使用快捷键Ctrl+Alt+L
工具-选项-项目和解决方案-总是显示解决方案

c.认识C#程序
(1)namespace关键字 (2)using关键字 (3)class关键字 (4)Main方法 (5)关键代码
语法:
static void Main(string[] args){}
static int Main(string[] args){}
static void Main(){}
static int Main(){}
这四种Main()方法都是对的,我们可以根据需要自己选择,代码模板自动生成的是第一种。

对比:
组织代码的方式:C#使用命名空间(namespace),java使用包(package)
引入命名空间或包的关键字:C#使用using,java使用import
程序入口:C#使用Main有4种形式,java使用main有一种形式

1-2.C#中的变量和运算符

a.C#中的数据类型

Java C#
int int
float float
String string
boolean bool
注意:C#中布尔类型的关键字与java不同,使用bool,C#中字符串数据类型是小写的。
b.C#中变量的命名
语法:
访问修饰符 数据类型 变量名称;
组成:52个英文字母(A-Z,a-z) 10个数字(0-9) 下划线(_) 除此之外不能含有其他的字符。
开头:只能以字母或下划线开头
不能使用的:不能是C#中的关键字
c.C#中的运算符

算术运算符 + - * / % --
比较运算符 > < >= <= == !=
条件运算符 ?:
赋值运算符 = += -= *= /= %=
逻辑运算符 && || !
1-3.C#中的注释

C#的行注释和块注释与Java是完全相同的,分别使用//和/*..*/,但文档注释与java中的略有不同,使用"///",且文档注释的每一行都以"///"开头。

1-4.Console类

a.向控制台输出
语法:
方式一:Console.WriteLine();
方式二:Console.WriteLine();
方式三:Console.WriteLine("格式字符串",变量列表);
注意:第一种和第二种方式的用法与Java中System.out.println();方法的用法相同.第三种方式可是C#中的新东西.
例如:
string course="C#";
Console.WriteLine("我的课程名称是:{0}",course);
b.从控制台输入
语法:
Console.WriteLine();
例如:
string name=Console.ReadLine();
int age=int.Parse(Console.ReadLine());
扩展:float.Parse(); double.Parse(); int.Parse();这个必须是字符串的数字 如:"120"

c.简单综合应用
using System;
using System.Collections.Generic;
using System.Text;

namespace HelloACCP
{
///<summary>
///此示例演示向控制台输出学员信息
///</summary>
class Program
{
static void Main(String[] args)
{
string name1;//第一个学员姓名
string name2;//第二个学员姓名
int age1;//第一个学员年龄
int age2;//第二个学员年龄

//输入第一个学员信息
Console.WriteLine("请输入第一个学员的姓名:");
name1=Console.ReadLine();
Console.WriteLine("请输入第一个学员的年龄:");
age1=int.Parse(Console.ReadLine());
//输入第二个学员信息
Console.WriteLine("请输入第二个学员的姓名:");
name2=Console.ReadLine();
Console.WriteLine("请输入第二个学员的年龄:");
age2=int.Parse(Console.ReadLine());

//输出学员信息
Console.WriteLine("第一个学员的姓名"+name1+",年龄"+age1+"岁");
Console.WriteLine("第二个学员的姓名"+name2+",年龄"+age2+"岁");
}
}
}
经验:教你一招快速输入 输入cw+Tab+Tab,就出来Console.WriteLine();了!
1-5.C#中的条件判断
a.if结构
语法:
if结构
if(表达式)
{
//代码块
}

if-else结构
if(表达式)
{
//代码块1
}
else
{
//代码块2
}

多重if结构
if(表达式1)
{
//代码块1
}
else if(表达式2)
{
//代码块2
}
else
{
//代码块3
}
b.switch结构
语法:
Java中 C#中
swtich() switch() switch()
{ { {
case 常量表达式1; case 常量表达式1; case 常量表达式1;
语句1; 语句2; case 常量表达式2;
break;//可以没有 break;//必须有 语句2;
case 常量表达式1; case 常量表达式2; break;//必须有
语句2; 语句2;
break;//可以没有 break;//必须有
... ... ...
default: default: default:
语句n; 语句n; 语句n;
break;//必须有 break;//必须有
} } }
c.常见错误
经验:
(1)改正错误,往往从最上面的一条错误信息开始
(2)为了方便定位,我们需要VS显示行号 工具-选项-文本编辑器-C# 右边的显示-行号

第二章 用Hello ACCP.NET快速热身(二)


2-1:C#中的循环语句

a.基本循环语句
(1)while循环
语法:
while(条件表达式){
//代码块
}
(2)Do-While循环
语法:
do
{
//代码块
}while(条件表达式);
(3)for循环
语法:
for(表达式1;表达式2;表达式3)
{
//代码块
}
(4)foreach循环
语法:
foreach(类型 元素(局部变量) in 集合或者数组)
{
// 代码块
}
例如:
using System;
using System.Collections.Generic;
using System.Text;

namespace HelloACCP
{
///<summary>
///此操作演示如何使用foreach循环
///</summary>
class Program
{
static void Main(String[] args)
{
Console.WriteLine("请输入一个字符串 :");//输入提示
string line=Console.ReadLine();//从控制台读入字符串
//循环输出字符串中的字符
foreach(char c in line)
{
Console.WriteLine(c);
}
Console.ReadLine();
}
}
}
注意:任意的循环 相互使用都叫做二重循环 内层循环结束后,才能进行外层循环!
b.VS调试技巧
(1)设置断点(断点:breakpoint)
(2)监视变量值
(3)单步跟踪(步:step)
F5-开始调试 Shift+F5-停止调试 F9-设置或删除断点 F10-单步执行

2-2:二重循环


a.循环进阶
例如:
using System;
using System.Collections.Generic;
using System.Text;

namespace HelloACCP
{
///<summary>
///此程序演示二重循环应用
///</summary>
class Program
{
static void Main(String[] args)
{
int i,j;//循环变量
int sum=0;//总分
int average;//总分
int score;//输入的分数

//外层循环控制逐个计算每个班级
for(i=0;i<3;i++)
{
sum=0;//总分清0,重新计算
Console.WriteLine("\n请输入第{0}个班级的成绩",i+1);
//内层循环计算每个班级的总分
for(j=0;j<4;j++)
{
Console.Write("第{0}个学员的成绩:",j+1);
score=int.Parse(Console.ReadLine());
sum=sum+score;
}
average=sum/4;//计算平均分
Console.WriteLine("第{0}个班的平均分为:{1}分",i+1,average);
}
Cnosole.ReadLine();
}
}
}
b.流程控制进阶
(1)continue语句 (2)break语句 (3)二重循环continue和break语句对比
c.常见错误
循环结构和条件出错!
2-3:C#中的数组

a.C#中的一维数组
(1)声明
语法:
数据类型[] 数组名; 例如:int[] arrya;
(2)指定数组大小
例如:int[] array; array=new int[5];//创建一个含有5个元素的整形数组
(3)初始化
例如:int[] array=new int[5]{0,1,2,3,4};//创建一个含有5个元素的整形数组
int[] array=new int[]{0,1,2,3,4};//省略数组长度
int[] array={0,1,2,3,4};//省略new
(4)获取数组长度 通过:"数组名.Length"
例如:
int[] array=new int[5]{0,1,2,3,4};
for(int i=0;i<array.Length;i++)
{
Console.WriteLine(array[i]);
}
注意:与java同样,是通过下标进行访问,在C#中我们把下标称为索引.
b.常见错误
注意:C#允许在初始化的同时指定数组长度,但是数组初始值的数目必须与数组的长度完全一样.
例如:
using System;
using System.Collections.Generic;
using System.Text;

namespace HelloACCP
{
///<summary>
///此示例演示声明和初始化一维数组时的错误
///</summary>
class Program
{
static void Main(String[] args)
{
int[] array=new int[5]{0,1};//声明 并初始化一维数组
foreach(int i in array)//输出数组中的所有元素
{
Console.WriteLine(i);
}
Console.ReadLine();
}
}
}
注意:此示例是错误的哈!!!(*^__^*) 嘻嘻……

2-4:冒泡排序
注意:(1)数组 长度 (2)外层 外循环次数 (3)内层 内循环次数 数组 N 外 N-1 内 N-1-i
例如:
using System;
using System.Collections.Generic;
using System.Text;

namespace HelloACCP
{
///<summary>
///此程序演示二重循环实现冒泡排序
///</summary>
class Program
{
static void Main(String[] args)
{
int[] scores=new int[5];//成绩数组
int i,j;//循环变量
int temp;//临时变量

//读入成绩
Console.WriteLine("请输入5个学员的成绩:");
for(i=0;i<5;i++)
{
Console.WriteLine("请输入5个学员的成绩:",i+1);
scores[i]=int.Parse(Console.ReadLine());//类型转换
}

//开始排序-使用冒泡排序
for(i=0;i<scores.Length-1;i++)//控制比较多少轮
{
//将最大的元素交换到最后
for(j=0;j<scores.Length-1-i;j++)
{
if(scores[j]>scores[j+1])
{
//交换元素
temp=scores[j+1];
scores[j+1]=temp;
}
}
}

//排序后输出
Console.WriteLine("排序后的成绩为:");
for(i=0;i<scores.Length;i++)
{
Console.Write("{0}\t",scores[i]);
}
Console.ReadLine();
}
}
}
经验:冒泡排序快速记口诀(升序):
N个数字来排序,两两相比小靠前
外层循环N-1,内层循环N-1-i
如果要降序排序,只要把程序中的大于号换成小于号就行了。

外层循环对应轮数 内层循环对应次数
第三章 用Hello ACCP.NET快速热身(三)

3-1:C#中的命名空间
例如:
//using System;
//using System.Collections.Generic;
//using System.Text;

namespace HelloACCP
{
///<summary>
///此示例演示命名空间
///</summary>
class Program
{
static void Main(String[] args)
{
System.Console.WriteLine("Hello ACCP.NET");
}
}
}
3-2:自定义方法

a.定义方法
语法:
访问修饰符 返回类型 方法名(参数列表)
{
//方法的主体
}
(1)访问修饰符 (2)方法的返回类型 (3)方法名 (4)参数列表 (5)方法的主体
b.向方法中传递参数
(1)值传递
例如:
using System;
using System.Collections.Generic;
using System.Text;

namespace HelloACCP
{
///<summary>
///此示例演示使用方法计算税后的工资
///</summary>
class Program
{
static void Main(String[] args)
{
int pay;//税前工资
float taxRate=0.1f;//税率
float afterTax;//税后工资
pay=int.Parse(Console.ReadLine());

//调用方法计算税后工资
afterTax=GetPay(pay,taxRate);
Console.WriteLine("税前工资{0},税后工资{1}",pay,afterTax);

Console.ReadLine();
}

//此方法根据税前工资计算税后工资
private static float GetPay(int pay,float taxRate)
{
float afterTax;//税后的工资
if(pay<=1600)//低于1600不缴税
{
afterTax=pay;
}
else
{
afterTax=pay-(pay-1600)*taxRate;
}
return afterTax;
}
}
}
注意:
Java C#
import using
包(对应硬盘上的一组文件夹)
命名空间(不对应物理文件夹)
一种组织代码的文件 唯一标识文件
(2)按引用传递参数
例如:
using System;
using System.Collections.Generic;
using System.Text;

namespace HelloACCP
{
///<summary>
///此示例演示按引用传递参数交换两个数
///</summary>
class Program
{
static void Main(String[] args)
{
int num1,num2;
Console.WriteLine("请输入两个数字");
num1=int.Parse(Console.ReadLine());
num2=int.Parse(Console.ReadLine());

Console.WriteLine("交换前两个数的分别为:{0}和{1}",num1,num2);

//交换两个数的值
Swap(ref num1,ref num2);

Console.WriteLine("交换后两个数的分别为:{0}和{1}",num1,num2);
Console.ReadLine();
}

//交换两个数的方法
private static void Swap(ref int num1,ref int num2)
{
int temp;//中间变量
temp=num1;
num1=num2;
num2=temp;

}
}
}
c.常见错误
例如:
using System;
using System.Collections.Generic;
using System.Text;

namespace HelloACCP
{
///<summary>
///此示例演示按引用传递参数交换两个数
///</summary>
class Program
{
static void Main(String[] args)
{
int num1,num2;
Console.WriteLine("请输入两个数字");
num1=int.Parse(Console.ReadLine());
num2=int.Parse(Console.ReadLine());

Console.WriteLine("交换前两个数的分别为:{0}和{1}",num1,num2);

//交换两个数的值
Swap(num1,num2);

Console.WriteLine("交换后两个数的分别为:{0}和{1}",num1,num2);
Console.ReadLine();
}

//交换两个数的方法
private static void Swap(ref int num1,ref int num2)
{
int temp;//中间变量
temp=num1;
num1=num2;
num2=temp;

}
}
}
注意:同一个类里面,方法如果是静态的直接使用类名.方法名 若果不是static ,则需创建对象再调用
3-3:IDE使用技巧进阶
选中代码的时候,点击右键选择重构-提取方法,就会自动生成 如上面的那个Swap()方法
3-4:C#中的String类

a.常用的字符串处理方法
bool Equals(string value) 比较两个字符串是否相等,最终返回true或false,与"=="的作用是相同的
int Compare(string strA,string strB) 比较两个字符串的大小关系,最终返回大于0或小于0的数
int IndexOf(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 ToUper() 获得字符串的大写形式
string Trim() 去掉字符串两端的空格
b.Format方法
例如:
string nam="超超";
Console.WriteLine("我的名字是{0},我的年龄是{1}",name,18);
语法:
string myString=string.Format("格式字符串",参数列表);
例如:string myString=string.Format("{0}乘以{1}等于{2}",2,3,2*3);
2乘以3等于6

3-5:在C#中进行类型转换

a.简单的类型转换
(1)隐式类型转换
注意:对应数值类型,任何类型A,只要取其值范围完全包含在类型B的取值范围内,就可以隐式转换为类型B。
也就是说,int类型可以隐式转换为float,double类型,float类型可以隐式转换为double类型,很好理解哈,(*^__^*) 嘻嘻……
(2)显示类型转换
注意:与隐式类型转换相反,当要把取值范围大的类型转换为取值范围小的类型时,就需要显示转换。
b.数值类型与字符串之间的转换
(1)字符串转换为数值型
例如:
int.Parse(string);
float.Parse(string);
double.Parse(string);
(2)数值类型转换为字符串
例如:
int age=18;
string myage=age.ToString();
c.使用convert类进行转换
Convert.ToInt32() 转换为整型(int型)
Convert.ToSingle() 转换为单精度浮点型(float型)
Convert.ToDouble() 转换为双精度浮点型(double型)
Convert.ToString() 转换为字符串类型(string型)
d.常见错误
注意:Parse()方法只用于将字符串转换为其他数据类型,如果传入的参数为其他类型,则会出现以下情况
double money=20.53;
int pay=int.Parse(money);
错误原因:Parse()方法不接受string类型以外的参数。

第四章 第一个Window程序

4-1:第一个Windows应用程序

a.创建第一个Windows应用程序
(1)打开VS编辑器 (2)文件-新建-项目 (3)项目类型选择"Visual C#" (4)模板选择"Windows应用程序"
b.认识Windows应用程序文件夹结构
查看解决方案资源管理器
例如:
using System;
using System.Collections.Generic;
using System.Text;

namespace HelloACCP
{
///<summary>
///应用程序的入口点
///</summary>
class Program
{
static void Main(String[] args)
{
Application.EnableVisualStyles();
Application.SetCompatibleTextRenderingDeault(false);
Application.Run(new Form1());//关键,程序运行的
}
}
}
c.认识窗体文件
(1)partial关键字
partial是部分的意思,这是.NET Framework2.0引入的一个新特性-分布类
在C#中,为了方便代码的管理和编辑,使用partial关键字可以将同一个类的代码分开放在多个文件夹中,每个文件都是类的一部分代码。
比如,必须两把钥匙同时用,才能开启门,为了安全
partial关键字,在编译时,VS就会识别出来,并把Form1.cs和Form1.Designer.cs合并成一个类来进行处理,这就是partial的作用,就是将一个类标识为分布类。
(2)Form类【Form是.NET Framework定义好的一个最基本的窗体类,具有一些窗体最基本的属性和方法。冒号表示继承】
例如:public partial class Form1:Form

4-2:认识窗体

a.窗体的重要属性
属性:
Name 窗体对象的名字,用以在代码中进行标识
BackColor 窗体的背景色
BackgroundImage 窗体的背景图像
FormBorderStyle 窗体显示的边框样式,有7个可选取的值,默认是Sizable
MaximizeBox 确定窗体标题栏的右上角是否有最大化框,默认为true
ShowInTaskbar 确定窗体是否出现在Windows任务栏中,默认为true
StartPosition 确定窗体第一次出现时的位置
Text 窗体标题栏中显示的文本
TopMost 指示窗体是否始终显示在此属性为设置为true的所有窗体之上,默认为false
WindowState 确定窗体的初始可视状态,包括Normal(普通),Maximized(最大化),Minimized(最小化),默认值为Normal
b.窗体的重要事件
事件:
Load 窗体加载事件,窗体加载时发生
MoseClick 鼠标单击事件,当用户单击窗体时发生
MouseDoubleClick 鼠标双击事件,当用户双击窗体时发生
MouseMove 鼠标移动事件,当鼠标移过窗体时发生
KeyDown 键盘按下事件,在首次按下某个键时发生
KeyUp 键盘释放事件,在释放键时发生
例如:
namespace MyForm
{
public partial class Form1:Form
{
public Form1()
{
InitializeComponent();
}
private void Form1_MouseMove(object sender,MouseEventArgs e)
{

}
}
}
函数,构造方法无返回值 类型与类同名【如上所示:】
4-3:使用窗体控件

a.使用菜单条
Name 代码中菜单对象的名称
Items 在菜单中显示的项的集合
Text 与菜单相关联的文本

Name 窗体对象的名称
Text 窗体标题栏显示的文字
WindowState 窗体出现时是最大化的(Maximized)
例如:
//用户选择"退出"菜单项时,退出应用程序
private void tsmiExit_Click(object sender,EventArgs e)
{
Application.Exit();//退出应用程序的方法
}
规范:
菜单条和菜单项命名:
为菜单设置Name属性时,加前缀ms,如:msUser。为菜单项设置Name属性时,加前缀tsmi,如:tsmiAddStudentUser 、tsmiExit等.
b.使用基本控件
(1)标签【Lable】 属性:Image将在标签上显示的图像 Text在标签上显示的文本
(2)文本框(TextBox)
属性
MaxLenth 指定可以在文本框中输入的最大字符数
Multiline 表示是否可以在文本框中输入多行文本
PasswordChar 指示在作为密码框时,文本框中显示的字符,而不是实际输入的文本
ReadOnly 指定是否允许编辑文本框中的文本
Text 与文本框相关联的文本
(3)按钮【Button】
属性 Text 按钮上显示的文本 TextAlign 按钮上文本的对齐方式
事件 Click 单击按钮时发生
(4)单选按钮【RadioButton】
属性 Checked 指示单选按钮是否以选中 Text 单选按钮显示的文本
事件 Click 单击单选按钮时发生
(5)列表框【ListBox】
属性
Items 列表框中所有的项
Text 当前选定的文本
SelectedIndex 当前选定项目的索引号,列表框中的每个项都有一个索引号,从0开始
SelectedItem 获取当前选定的项
(6)组合框【ComboBox】
属性
Items 组合框中的项
DropDownStyle 定义组合框的风格,指示是否显示列表框部分,是否允许用户编辑文本框部分
Text 与组合框相关联的文本
SelectedIndex 当前选定项目的索引号,列表框中的每个项都有一个索引号,从0开始
SelectedItem 获取当前选定的项
(7)分组框【GroupBox】
(8)面板【Panel】
规范:
每个控件都有一个Name属性,用以在代码中表示该对象。我们每拖放到窗体上的一个控件,首先要为控件命名。通常加的前缀:Lable为lbl,TextBox为txt,
Button为btn,RadioButton为rdo,ComboBox为cbo等等。

例如:
//"取消"按钮的Click事件处理程序
private void btnCancle1_Click(object sender,EventArgs e)
{
this.Close();//关闭当前窗体
}

using System;
using System.Collections.Generic;
using System.Text;

namespace HelloACCP
{
///<summary>
///修改运行的窗体
///</summary>
class Program
{
static void Main(String[] args)
{
Application.EnableVisualStyles();
Application.SetCompatibleTextRenderingDeault(false);
Application.Run(new AddStudentForm());//修改此方法设置运行的窗体
}
}
}
c.实现窗体间的跳转
(1)创建窗体对象 被调用的窗体类 窗体对象名=new 被调用的窗体类;
(2)显示窗体 窗体对象名.Show();
例如:
//用户选择"新增学员用户"菜单项时,出现创建学员用户窗口
private void tsmiNewStudent_Click(object sender,EventArgs e)
{
//创建窗体对象
AddStudentForm addStudentForm=new AddStudentForm();
addStudentForm.Show();//显示创建用户窗体
}
4-4:使用MessageBox对象

a.显示消息框
例如:
MessageBox.Show(要显示的字符串);
MessageBox.Show(要显示的字符串,消息框的标题);
MessageBox.Show(要显示的字符串,消息框的标题,消息框按钮);
MessageBox.Show(要显示的字符串,标题,消息框按钮,消息框图标);
b.消息框的返回值 如:DialogResult.OK;//用户单击了"确定"返回的值
例如:
//验证是否输入了信息
private void btnLogin_Click(object sendar,EventArgs e)
{
if(txtLoginId.Text=="")
{
DialogResult result;
result=MessageBox.Show("请输入用户姓名","输入提示",MessageBoxButtons.OKCancel,MessageBoxIcon.Information);
if(result==DialogResult.OK)
{
MessageBox.Show("你选择了确定按钮");
}
else
{
MessageBox.Show("你选择了取消按钮");
}
}
}

第五章 用控件进行快速开发

5-1:排列窗体上的控件

a.对齐
(1)选择你要对齐的控件 (2)在VS的菜单中,选择“格式”-“对齐”
b.使用Anchor
(1)选择要锚定的控件
(2)在"属性"窗口中,单击Anchor属性右边的箭头,显示编辑器
(3)在显示的十字形上选择或清除控件锚定的边
(4)单击Anchor属性名,关闭编辑器。
经验:一次锚定多个控件,按住Ctrl键选择多个控件,然后再设置Anchor属性,可以一次锚定多个控件。
锚定的作用:设置控件对于窗体的摸个边缘的距离保持不变,也就是说窗体一起动态调整控件的大小,这是每个控件都有的属性。
c.使用Dock
(1)选择要停靠的控件 (2)在"属性"窗口中,单击Dock属性右侧的箭头,显示编辑器 (3)设置停靠方式
为什么要用停靠?
除了让控件能够跟随窗体动态调整大小,有的时候我们还想让控件始终保持在窗体的边缘,或者填充窗体。比如我们常见的记事本,它的菜单
总是在窗体的最上边,而它的文本输入区域总是填充了窗体的剩余部分。

5-2:创建多文档界面应用程序(MDI)

a.为什么使用MDI
比如:记事本
如果想在一个窗口中打开多个文件,就要使用MDI(多文档界面)应用程序。
b.什么是MDI
比如:在Microsoft Excel中,我们可以同时打开多个Excel文档,而不需要新开一个Excel窗口,这种应用程序我们称为MDI(多文档界面);
c.如何创建MDI
(1)创建MDI【设置父窗体:将父窗体的IsMDIContainer属性设为true。设置子窗体:在调用打开子窗体的Show()方法前,在代码中将子窗体的MdiParent属性设为this】
例如:
//用户单击菜单项时,出现创建学员用户窗口
private void tsmiNewStudent_Click(object sender,EventArgs e)
{
//创建窗体对象
AddStudentForm addStudentForm=new AddStudentForm();
addStudentForm.MdiParent=this;
addStudentForm.Show();//显示创建学员用户窗体
}
(2)为父窗体添加子窗体列表【在父窗体中添加一个菜单Name(tsmiWindows),添加一个"窗口"菜单项,将菜单控件的MdiWindowListItem属性设为"窗口"菜单项(tsmiWindows)】

5-3:使用WinForms高级控件

a.使用工具条控件和状态条控件
工具条和状态条的主要属性 ImageScalingSize 工具条或状态条中的项显示的图像的大小 Items 在工具条或状态条上显示项的集合

工具条或状态条上的按钮和标签的主要属性和事件

属性
DisplayStyle 设置图像和文本的显示方式,包括显示文本、图像、文本和图像或什么都不显示
Image 按钮/标签上显示图片
Text 按钮/标签上显示的文本

事件
Click 单击按钮/标签时,触发该事件

使用:(1)设置工具条 (2)设置状态条
b.使用选项卡控件
属性
MultLine 是否可以显示多行选项卡
TabPages 包含的选项卡页的集合
SelectedIndex 当前所选选项卡页的索引值

c.使用图片框、图像列表、计时器控件
图片属性
Image 图片框显示的图像
SizeMode 指定如何处理图片的位置和控件的大小

图像列表的属性
Images 存储在图像列表中的所有图像
ImageSize 图像列表中图像的大小
TransparentColor 被视为透明的颜色

计时器的属性
Interval 事件发生的频率,以毫秒为单位
Enable 是否定时引发事件

计时器的事件
Tick 每当指定间隔发生的事件

计时器的方法
Start 启动计时器
Stop 停止计时器

例如:
using System;
using System.Collections.Generic;
using System.Text;

namespace HelloACCP
{
///<summary>
///About窗体
///</summary>
public partial class AboutForm:Form
{
int index=0;//图片框的索引
public AboutForm()
{
InitializeCompontent();
}

//计时器的事件处理方法,定时变换图片框中的图片
private void timer_Tick(object sender,EventArgs e)
{
//如果当前显示的图片索引没有最大值就继续增加
if(index<ilAnimatino.Images.Count-1)
{
index++;
}
else
{
//否则从第一个图片开始显示,索引从0开始
picAnimation.Image=ilAnimation.Images[index];
}
}

//图片框的单击事件处理方法,单击是关闭窗体
private void picOK_Click(object sendar,EventArgs e)
{
this.Close();
}
}
}
d.显示模式窗体

例如:
//"关于考试管理系统"菜单项的Click事件处理
private void tsmiAbout_Click(object sender,EventArgs e)
{
AboutForm aboutForm=new AboutForm();
aboutForm.ShowDialog();//打开"关于"窗体,显示为模式窗体
}
5-4:用户输入验证

例如:
//单击"登陆"按钮时,验证用户的输入
private void btnLogin_Click(object sender,EventArgs e)
{
//调用用户验证方法,根据返回值确定是否通过验证
if(ValidateInput())
{
MessageBox.Show("验证成功");
}
else
{
MessageBox.Show("验证失败");
}
}
5-5:窗体的数据传递 具体,亲查询P137页


第六章 用ADO.NET连接数据库


6-1:ADO.NET概述

a.ADO.NET简介
ADO.NET可以把从数据源检索到的数据保存在本地的一个叫做"数据集"的地方,这样应用程序直接操作本地的数据就行了,
数据源就可以给更多的应用程序提供服务。这就是ADO.NET的断开连接模型。
b.ADO.NET的主要组件
(1).NET Framwork数据提供程序是专门为数据处理以及快速地只进、只读访问数据而设计的组件。使用它,我们可以连接到数据库、执行命令和检索结果,直接对数据进行操作。
(2)DataSet是专门为独立于任何数据源的数据访问而设计的。使用它,我们可以不必直接和数据库打交道,可以大批量的操作数据,也可以将数据绑定到控件上。

6-2:使用Connection对象

a.认识Connection对象
属性
ConnectionString 用于连接数据库的连接字符串
方法
Open 使用ConnectionString属性所指定的设置打开数据库连接
Close 关闭与数据库的连接

连接数据库主要分为3步:
(1)定义连接字符串
Data Source=服务器名;Initial Catalog=数据库名;User ID=用户名;Pwd=密码
string connString="Data Source=.;Initial Catalog=pubs;User ID=sa";
(2)创建Connection对象
SqlConnection connection=new SqlConnection(connString);
(3)打开与数据库的连接
connection.Open();

在这三步中,第一、二步也可以调换,可以先创建Connection对象,再设置它的ConnectionString属性,如:

SqlConnection connection=new SqlConnection(connString);
string connString="Data Source=.;Initial Catalog=pubs;User ID=sa";
connection.ConnectionString=connString;
b.连接数据库实例
例如:
using System;
using System.Collections.Generic;
using System.Text;

namespace HelloACCP
{
///<summary>
///本实例演示打开和关闭数据库连接
///</summary>
public partial class AboutForm:Form
{
int index=0;//图片框的索引
public AboutForm()
{
InitializeCompontent();
}

//测试打开数据库的操作
private void btnTest_Click(object sender,EventArgs e)
{
//数据库连接字符串
string connString="Data Source=.;Initial Catalog=MySchool;User ID=sa";
//创建Connection对象
SqlConnection connection=new SqlConnection(connString);

//打开数据库连接
connection.Open();
MessageBox.Show("打开数据库连接成功");

//关闭数据库连接
connection.Close();
MessageBox.Show("关闭数据库连接成功");
}
}
}
注意:为了使用SQL Server.NET数据提供程序,我们在程序的开头增加了一条引用命名空间的语句using System.Data.SqlClient;

6-3:异常处理

a.如何处理异常
语法:
try
{
//包含可能出现异常的代码
}
catch
{
//处理异常的代码
}

比如:
try
{
conn.Open();
//其它操作
conn.Close();
}
catch(Exception ex)
{
//错误处理代码
}


try
{
conn.Open();
//其它操作

}
catch(Exception ex)
{
//错误处理代码
}
finally
{
conn.Close();
}
b.处理数据库操作异常实例 详细请查询P155页

6-4:使用Command对象

a.认识Command对象
Command对象的主要属性和方法
属性
Connection Command对象使用的数据库连接
CommandText 执行的SQL语句
方法
ExecuteNonQuery 执行不返还行的语句,如update等
ExecuteReader 执行查询命令,返回DataReader对象
ExecuteScalar 返回单个值,如执行count(*)

使用Command对象,必须有一个可用的Connection对象,使用Command对象的步骤包括:
(1)创建数据库连接
(2)定义执行的SQL语句
(3)创建Command对象
(4)执行Command对象的某个方法执行命令
b.查询数据库实例
例如:
using System;
using System.Collections.Generic;
using System.Text;
using System.Data.SqlClient;//SQL Server.NET数据库提供程序命名空间

namespace HelloACCP
{
///<summary>
///本实例演示打开和关闭数据库连接
///</summary>
public partial class AboutForm:Form
{
int index=0;//图片框的索引
public AboutForm()
{
InitializeCompontent();
}

//打开数据库连接,查询学员记录数量
private void btnTest(object sender,EventArgs e)
{
//创建Connection对象
string connString="Data Source=.;Initial Catalog=MySchool;User ID=sa";
SqlConnection connection=new SqlConnection(connString);

int num=0;//学员信息的数量
string message="";//弹出的结果信息
//查询用的SQL语句
string sql="select count(*) from Student";

try
{
conn.Open();//打开数据库连接
//创建Command对象
SqlCommand command=new SqlCommand(sql,connection);
//执行SQL语句
num=(int)command.ExecuteScalar();

message=string.format("Student表中共有{0}条学员信息",num);
MessageBox.Show(message,"查询结果",MessageBoxButtons.OK,MessageBoxIcon.Information);

}
catch(Exception ex)
{
//错误处理代码
MessageBox.Show(ex.Message);
}
finally
{
//关闭数据库连接
conn.Close();
}
}
}
}
c.常见错误
(1)没有打开数据库或关闭数据库连接
using System;
using System.Collections.Generic;
using System.Text;
using System.Data.SqlClient;//SQL Server.NET数据库提供程序命名空间

namespace HelloACCP
{
///<summary>
///本实例演示打开和关闭数据库连接
///</summary>
public partial class AboutForm:Form
{
int index=0;//图片框的索引
public AboutForm()
{
InitializeCompontent();
}

//打开数据库连接,查询学员记录数量
private void btnTest(object sender,EventArgs e)
{
try
{
//创建Command对象
SqlCommand command=new SqlCommand(sql,connection);
//执行SQL语句
num=(int)command.ExecuteScalar();

message=string.format("Student表中共有{0}条学员信息",num);
MessageBox.Show(message,"查询结果",MessageBoxButtons.OK,MessageBoxIcon.Information);

}
catch(Exception ex)
{
//错误处理代码
MessageBox.Show(ex.Message);
}
finally
{
//关闭数据库连接
conn.Close();
}
}
}
}

(2)ExecuteScalar()方法的返回值没有进行类型转换
try
{
connection.Open();//打开数据库连接
//创建Command对象
SqlCommand command=new SqlCommand(sql,connection);
//执行SQL语句
num=(int)command.ExecuteScalar();

message=string.format("Student表中共有{0}条学员信息",num);
MessageBox.Show(message,"查询结果",MessageBoxButtons.OK,MessageBoxIcon.Information);

}
6-5:综合实例 详细请查看P163页


第七章 用ADO.NET查询和操作数据库

7-1:查询数据【注意:修改或删除必须得有条件】

a.认识DataReader对象
DataReader对象的主要属性和方法
属性
HasRows 是否返回了结果,结果返回true或false
FieldCount 当前行中的列数
方法
Read 前进到下一行记录,结果返回true或false
Close 关闭DataReader对象
b.如何使用DataReader对象
(1)创建Command对象
(2)调用Command对象的ExecuteReader()方法创建DataReader对象 如:SqlDataReader dataReader=command.ExecuteReader();
(3)使用DataReader的Read()方法逐行读取数据 如:dataReader.Read();
(4)读取当前行的某列的数据 如:(string)dataReader["StudentName"];
(5)关闭DataReader对象,调用它的Close()方法 如:dataReader.Close();
c.常见错误
例如:
SqlDataReader reader=command.ExecuteReader();
string name=(string)reader["name"];
应修改为:
SqlDataReader reader=command.ExecuteReader();
if(reader.Read())
{
string name=(string)reader["name"];
}

例如:
SqlDataReader reader=command.ExecuteReader();
if(reader.Read())
{
string name=(string)reader["name"];
}
command.CommandText=newSql;
SqlDataReader newReader=command.ExecuteReader();
应添加
reader.Close();//释放连接对象
7-2:操作数据


7-3:控件进阶

a.ListView控件
ListView控件的主要属性
属性
Columns "详细信息"视图中显示的列
FullRowSelect 当选中一项时,它的子项是否同该项一起突出显示
Items ListView中所有项的集合
MultiSelect 是否允许选择多项
SelectedItems 选中的项的集合
View 指定显示5种视图中的哪一张视图
事件
MouseDoubleClick 鼠标双击事件
方法
Clear() 移除ListView中的所有项
b.ContextMenuStrip控件
菜单项(MenuItem)的主要属性和事件
DisplayStyle 指定是否显示图像和文本
Image 显示在菜单项上的图像
Text 显示在菜单项上的文本
事件
Click 单击事件,单击菜单项时发生

7-4:综合实例 详细请查看P185页

a.查询数据综合实例
(1)创建查询学员用户窗体SearchStudentForm
(2)查询数据
b.操作数据综合实例
(1)添加右键菜单
(2)处理"非活动"菜单项的Click事件
(3)处理"删除"菜单项的Click事件

7-5:操作数据库小结

a.查询操作
(1)查询单个值
(2)查询若干条记录
b.非查询操作

第八章 用DataGridView显示和操作数据库


8-1:DataSet对象

a.认识DataSet对象
数据集就相当于一个临时仓库。
b.如何创建DataSet
语法:
DataSet 数据集对象=new DataSet("数据集的名称字符串");
例如:
DataSet myDataSet=new DataSet();
DataSet myDataSet=new DataSet("MySchool");

8-2:DataAdapter对象

a.认识DataAdapter对象
DataAdapter(数据适配器)属于.NET数据提供程序,所以不同类型的数据库需要使用不同的数据适配器。详细请看P203页
DataAdapter对象的重要属性和方法
属性
SelectCommand 数据库检索数据的Command对象
方法
Fill 向DataSet中的表填充数据
Update 将DataSet中的数据提交到数据库
b.如何填充数据集
语法:
SqlDataAdapter 对象名=new SqlDataAdaper(查询用的SQL语句,数据库连接);
使用步骤:
(1)创建数据库连接对象(Connection对象)
(2)创建从数据库查询数据用的SQL语句
(3)利用上面创建的SQL语句和Connection对象创建DataAdapter对象
(4)调用DataAdpter对象的Fill()方法填充到数据集。
c.如何保持数据集中的数据
(1)使用SqlCommandBuilder对象生成更新用的相关命令
(2)调用DataAdapter对象的Update()方法
语法:
DataAdapter 对象.Update(数据集对象,"数据表名称字符串");
例如:
SqlCommandBuilder builder=new SqlCommandBuilder(dataAdapter);
dataAdapter..Update(dataSet,"Teacher");
经验:
SqlCommandBuilder 只操作单个表,也就是说,我们创建DataAdapter对象时,使用的SQL语句只能从一个表里面查数据,不能进行联合查询。

8-3:DataGridView控件

a.认识DataGridView控件
DataGridView控件的主要属性
属性
Columns 包含的列的集合
DataSource DataGridView的数据源
ReadOnly 是否可以编辑单元格
DataPropertyName 绑定的数据列的名称
HeaderText 列标题文本
Visible 指定列是否可见
Frozen 指定水平滚动DataGridView的列是否移动
ReadOnly 指定单元格是否为只读
AllowUserToAddRows 是否允许用户增加行 false
AllowUserToDeletRows 是否允许用户删除行 false
MultiSelect 是否允许同时选择多行 false
selectionMode 选择模式 FullRowSelect

b.如何使用DataGridView显示数据
(1)添加窗体的控件
(2)设置DataGridView的属性和个列的属性
(3)指定DataGridView的数据源
c.如何保存修改后的数据
(1)增加"保存修改"按钮
(2)编写事件处理方法
d.常见错误
(1)不使用SqlCommandBuilder直接调用Update()方法
(2)利用DataGridView显示数据集中的表时,没有为它的列设置DataPropertyName属性

8-4:综合实例 详细请看P214页
(1)创建窗体,设计窗体界面
(2)设置窗体中DataGridView的属性
(3)填充数据集,显示数据
(4)将修改后的数据提交到数据库
(5)实现按性别筛选功能
8-5:ADO.NET小结

DataReader适用于:只读取查询结果;节省内存,提高性能。

 

转载于:https://www.cnblogs.com/cykj/p/Using-CSharp-to-develop-database-applications.html

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
c#编程集合资料,不错的应用设计,另附一些开发案例的下载地址,欢迎大家下载学习。 学习完本课程之后,我们需要达到以下目标: (1) 掌握基本的C#语法,熟练运用C#编写基本的程序逻辑。 (2) 能够创建C#控制台应用程序并处理输入输出。 (3) 掌握C#中的数组,并对数组进行相应的排序,查找操作。 (4) 熟练使用C#的字符串对象。 (5) 掌握Windows窗体应用程序的创建,能熟练使用常用的控件设计窗体界面。 (6) 掌握MDI应用程序开发步骤。 (7) 了解ADO.NET的组成和工作原理。 (8) 通过ADO.NET访问对C#项目开发全程实录视频教程(全10个案例):htt: /cnrdn com/gCxC 课程说明… 第1章C#语法基础…… 核心技能部分 1.1 Net与C#概述. 111Net与C#的产生与应用 1.1.2 Visual studio 10 1.1.3创建C井应用程序 12 2C#语言基础 16 121变量与常量…16 12.2运算符和表达式 19 123C#语言中的注释 1.2.4使用 Console处理输入输出 21 1.3 C#语句结构 25 131条件语句 .25 132循环结构 32 任务实训部分.… 38 1:根据时间输出问候信息…… 38 2:三个数字比较大小 39 3:判断用户输入的字母 .40 输出裴波那契数列…… 翻着音 40 巩固练习 第2章嵌套循环和数组. 44 核心技能部分… .45 2.1 VS2008中的调试技巧 45 2.2 嵌套循环 47 2.3 数组. 50 231数组的定义 50 232数组的基木操作 50 233数组的排序 51 任务实训部分… 55 1打印等腰三角形 55 2:数组的操作 56 3:数组的排序。 错误!定义书签 4:数组的排序 错误!未定义书签 巩固练习 57 第3章方法与字符串 59 C#项目开发全程实录视频教程(全10个案例):htt: /cnrdn com/gCxC 核心技能部分 使用方法 311方法的定义 312方法的调用 63 313参数传递 String类 321C#语言中常用的字符串处理方法... 68 322格式字符串 32.3 String Builder类. 3.3 类型转换…14 331隐式转换 74 332显式转换.…… 74 333常用类型转换方法… 7 任务实训部分 77 1:方法的使用 2:从邮件地址提取用广名 80 3:网址类型分析 81 4:字符串转换 82 巩固练习. 84 第4章指导学习:阶段总结 86 知识总结 翻着 .:::a:a:.:::a:B:a:::::..aa:::.:.aa:.:aa::: 86 41.1核心技能目标 86 412知识体系总结… 86 4.2 综合实训 任务1:制作月份日历 任务2:数组数据添加和排序. 错误!未定义书签 任务3:自杀游戏… 错误未定义书签。 第5章 Win form常用控件 核心技能部分 90 创建 Windows应用稈序 90 511 Windows应用程序概述. 90 512创建第一个 Windows应用程序 5.13项目结构分析 5,2 Windows窗体….97 5.,21窗体中的常用属性. 98 522窗体中的常用事件…… 99 Windows窗体中的常用控件 9 C#项目开发全程实录视频教程(全10个案例):htt: /cnrdn com/gCxC 5.31 Winform控件公共属性… 532标签Labe) 01 533文本框( TextBox) ·,, 101 534按钮( Button)…102 535列表框 ListBox) 102 536组合框 Combobox) 103 53.7单选按钮( Radio Button)和复选框( CheckBox) 104 538图片框( Pictruebo×)..105 54用 Message Box类显示消息窗口 541消息框的显示……106 5.4.2消息框的返回值 107 综合案例:职员信息管理. 109 仟务实训部分…… 115 1:ATM信息查询 115 2:编写建表向导窗体…… 3:火车票预定程厅… 124 巩固练习… 第6章 MD窗体应用程序设计… 核心技能部分…… 130 6.1 SD窗体和MD窗体应用程序简介. 错误!未定义书签。 6.2 单文档应用程序的创建 30 62.1菜单栏( Menustrip) 130 622菜单栏的创建 130 623上下文菜单 ContextMenuStrip) 6.3 多文档应用程序 错误!未定义书签。 631创建多文档界面应用程序. 错误!未定义书签 632排列子窗口 错误未定义书签。 64图像列表( mageList控件… 134 65工具栏( ToolStrip控件) 135 66 状态( StatusStrip) 138 67选项卡( TabControl Timer控件 69 MD综合示例 错误!定义书签 任务实训部分……143 1创建记事本”应用程序 错误!未定义书签 2:增强”记事本”功能∴ 143 3:实现记事本字体样式设置… 144 C#项目开发全程实录视频教程(全10个案例):htt: /cnrdn com/gCxC 4:变色窗体 巩固练习……… 1448 第7章 使用 ADO. NET完成简单的数据库操作…. ·,, 150 核心技能部分 151 ADO. NET概述 151 1 ADO.NET的简介 151 7.12 ADO.NET的优点 152 713 ADO.NET的结 52 NET Framework数据提供程序 1154 7.21 Connection对象…………………………155 72.2使用 Connection对象链接到数据库 7.3异常操作 57 731try和 catch块 158 732数据库链接示例 Command对象 ∴161 741 Command对象简介 161 742 Command综合示例 任务实训部分 1:实现进销存系统用户注册 168 2:实现进销存系统用户登录.… 171 3:实现用户的删除功能…… .:.::::::.:...:::.:.:a.::::.:::::::::.:::.:::::::.:::.: 172 巩固练习 174 第8章使用 Data Reader完成查询功能 177 核心技能部分… 178 8.1 DataReader对象 811 Data reader对象简介 178 812 Data Reader对象常用的属性和方法 813 Data reader对象的使用 179 8.2 控件 81 821 Listview控件介绍…… 81 822 Listview控件的使用 数据库操作综合示例 187 任务实训部分…… L94 1:使用 Listview控件查询部门员工信息… 94 2:部门员工信息删除和修改 3:实现员工信息模糊查询... 203 巩固练习 204 C#项目开发全程实录视频教程(全10个案例):htt: /cnrdn com/gCxC 第9章 使用 Dataset实现断开式数据访问 206 核心技能部分.… 207 91数据集( Dataset) ·,, 207 911数据集( DataSet)简介…207 912数据集的结构 08 91.3数据集的工作原理 914创建 Data set对象…… 211 9,2 DataAdapter对象1211 92.1 DataAdapter对象简介… 211 922 DataAdapter对象的使用.. 213 3 Datagridview控什的使用 219 931 Data gridview控件简介 219 932 Datagridview控件的使用. 221 9 综合示例 226 仟务实训部分.… 229 1:航班查询窗体设计 29 2:显示所有航班信息 232 3:根据两地査询航班 .233 4:航班详细信息查询 234 巩固练习 235 第10章课程总复习… …)误!未定义书签。 101知识总结 错误!未定义书签 1011核心技能目标 错误!定义书签。 101.2知识体系总结 错误!未定义书签。 02任务实训 错误!未定义书签。 第11章项目案例:酒店管理系统…… 错误!未定义书签 111训练技能点…… 错误未定义书签。 112需求说明 错误!未定义书签 113设计与思路分析 错误未定义书签 113.1系统功能分析 错误!未定义书签。 1132数据库设计 错误!定义书签。 114实现步骤…… 错误!未定义书签 115时间分配 错误!定义书签 C#项目开发全程实录视频教程(全10个案例):htt: /cnrdn com/gCxC 第1章C#语法基础 学习内容 c#的发展史 C#的基本语法 C#的流程控制语句 俨能力目标 掌握仗用S2008开发C#NET控制台应用程序 掌握C#语言的基本语法 掌握c#的程序流程控制语句 C#项目开发全程实录视频教程(全10个案例):htt: /cnrdn com/gCxC 本章简介 从本门课开始我们将要开始学习¢#语言和NET平台。本章将使学员对NET和¢#有一个 初步的认识,了解C#开发环境,编写第一个C#控制台应用程序C#语言的基本语法和我 们之前的学习的C语言、Java语言一样同属于C语言语法系列,有很多相似的地方,同时也 有一些不同的地方,因此我们在学习的时候需要注意它们之间的区别,不要混淆。在本章中, 我们需要掌握c#中的变量、数据类型、运算符、条件、分攴、循环等基C排基础语法,这些 语言血的知识是我们编写所有程序的基础,因此必须牢固掌握。 核心技能部分 1.1Net与C#概述 1.1.1Net与C#的产生与应用 1. Anders Hejlsberg-C#之父 Anders hejlsberg原木是曾经大名鼎鼎的 Borland公司的一员,他曾经编写了 Pasca编译 器,又把 Turbo pascal变为面向对象的 Object Pascal,并以此为基础开发了轰动全球、盛极 时的廾发工具 Delphi,为 Boland公司赚了个盆钵满盈。 随着 Delphi日渐成熟, Anders的兴趣转向了Java领域,他在」ava开发领域扩展方面有 很多自己独特的想法,并想在此领域大展宏图,但 Borland的经营者们还要靠他这棵“摇 钱树”继续在 Delphi上人肆捞金,所以他有一段郁郁不得志。 比尔盖茨三顾茅庐,力邀 Anders hejlsberg,并许以重金和宽松的环境,终于把 Anders 挖到了微软的旗下,其后由其主持设计,在2000年6月发布了新的开发语言C#(读做C Sharp),此后微软在2002年推出了 Microsoft net开发平台。 3 1.1.1 Anders He jlsberg C#项目开发全程实录视频教程(全10个案例):http://cnrdn.com/gcxc 2.C#语及其特点 与Java一样,C#语言是一个完全的面向对象语言,它继承了C++、Java和 Delphi的优 点,又借鉴了VB的简单易学。体现了当今最新的程序设计技术的功能和精华。C#继承了C 语言的语法风柊,同时又继承了C+的面冋对象特性。不同的是,c#的对象模犁己经面向 Internet进行了重新设计,使用的是NET框架的类库;C#不再提供对指针类型的支持,使得 程序不能随便访问内存地址空间,从而更加健壮;C#不再支持多重继承,避免了以往类次 结构中由于多重继承带来的可怕后果。NET框架为C#提供了一个强大的、易用的、逻辑结 构一致的程序设计环境。同时,公共语言运行时( Common Language runtime)为C#程序语 言提供了一个托管的运行时环境,使程序比以往更加稳定、安全。其特点有: 语言简洁。 保留了C++的强大功能 快速应用廾发功能 语言的自由性 强大的Web服务器控件。 支持跨平台 与XML相融合 如果之前没有其他话言的编程经验,使用c#语言编程将是一个良好的开端。如果有其 他语言的编程基础,程序员将发现¢#语言除了像ⅤB一样简单易学外,还是一种拥有强大 功能的语言。而且 ASP NET平台也是完仝通过c#语言开发的,这决定了C语言得天独厚的 优势。但在任何情况下,C#语言都不可能孤立地使用,它必须同 Microsoft. net framework 起使用,因为使用C#语言编写的所有代码总是在 Microsoft .net framework中运行。 1.1.2 Visual studio 微软针对Net推岀了功能强大的集成丌发环境来支持开发人员的№et应用程序丌发,这 就是 Visual studio,它是目前最主要的Net平台开发环境。VS集成了 NET Framework和Net 开发插件,可以用来进行几乎所有Net应用程序的设计和开发L作,如 Windows应用程序 Web应用稈序、 Windows服务、智能设备应用程序等。 随着 NET Framework的不断升级, Visua| Studio也在不断升级,其发展历程可以用表1-1-1 来说明 表1-1-1Vs发展历程 年代 2002 2003 2005 2008 2010 廾发工具版木Vs2002 VS2003 VS2005 VS2008 VS2010 Net 1.0 1.1 2.0 3.5 4.0 Framework 由于本学期的知识点主要集中在C#的基本语法、 Win forms开发和 ADO. NET,这些知识

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值