c#基础 创建一个银行,有一个静态成员变量初始化balance,创建三个成员方法,存钱

C#OOP之 深入理解方法
方法是完成特定功能的代码集。举例来类比一下,比如一台电视,我们开启电视开关之后,我们不需要去理解电视是如何选台、和电视台联系上而播放的步骤,只需要知道会开关电视、选台等就可以了。所以,方法就象一个被封闭的起来的功能操作。
方法深入研究
方法是完成特定功能的代码集。举例来类比一下,比如一台电视,我们开启电视开关之后,我们不需要去理解电视是如何选台、和电视台联系上而播放的步骤,只需要知道会开关电视、选台等就可以了。所以,方法就象一个被封闭的起来的功能操作。
访问修饰符
封装就是使某些信息隐藏起来,但是,对于一定范围的信息仍是可见的。
封装是面向对象三大特性之一。主要是为了一.避免非法数据的访问;二.保证数据的完整性。
我们可以通过访问修饰符来实现封装。C#支持以下如下访问修饰符:
访问修饰符是一些关键字,用于指定声明的成员或类型的可访问性。
【世间万物皆有一定的存在或活动范围,比如你是中国人,那么你的活动范围大部分在中国,如果你要去国外你就得办个护照。再比如你是郑州海洋馆的一只热带鱼,那么别人要来看你,至少要买张门票。世间万物的这种活动和访问范围的机制使世界可以有条不紊的运作。对象或对象成员属性和方法也需要通过某种机制来约束其访问,所以就有了访问修饰符这些东东。】
本节介绍四个访问修饰符:
nprotected
使用这些访问修饰符可指定下列五个可访问性级别:
声明的可访问性
访问不受限制。
访问仅限于包含类或从包含类派生的类型。
访问仅限于当前程序集。
protected internal
访问仅限于从包含类派生的当前程序集或类型。
访问仅限于包含类型。
切记前面有分号,表示分隔.
项目1:模拟CS游戏中警察的程序
项目背景:对于每位玩过第一人称射击类游戏的朋友来说,CS不能不被反复提起。我们以里面的警察为例,来学习一下访问修饰符符的用处与区别。
解决方案:通过修改访问修饰符,来观察了解访问修饰符的作用范围。
任务1:编写代码,在UltraEdit中编写如下代码,并尝试修改访问修饰符。
功能:实现一款游戏中的一个角色的定义
classPolice
//属性:Police的成员变量;
//private:私有的?何为私有:只能被类本身来访问;
private string NickN //昵称
private string C //衣服
//行为:成员方法
public void SetInfo() //设置警察信息方法
id=888; //这些信息不应该放在Game类里,而应该由Police类的对象来操作;同样访问一个类的成员变量需要,使用对象.成员变量
NickName="菜青虫";
Clothes="绿色迷彩服";
public void Display()
Console.WriteLine("Id:"+id+"昵称:"+NickName+" 衣服:"+Clothes); //显示一下信息
public void Pao() //成员方法定义:[访问修饰符][返回类型]方法名(参数列表){方法代码}
Console.WriteLine("跑@....");
public void Zou()
Console.WriteLine("走#....");
public void Sheji()
Console.WriteLine("射击DDDDDD");
class Game
static void Main() //程序的入口处
Police kiki=newPolice();
//尝试在此处直接访问类的成员变量
//kiki.id=”007”;kiki.NickName=”金头云”
kiki.SetInfo();
kiki.Display();
kiki.Pao(); //对象名.方法()
kiki.Zou();
kiki.Sheji();
Console.ReadLine();
2.选择文件&保存,以保存该文件,并以Police.cs结束。
3.编译并运行该程序。
4.观察测试不同访问修饰符的区别异同。
方法的定义
方法是类的组成元素,而方法本身又是由很多代码组成的,这些代码也可以包含对方法的调用。事实上,我们在前面的章节已经不止一次用过方法了,例如Main(),我们一直在使用这个方法。方法的定义包括
&访问修饰符&&返回类型& 方法名 (形式参数列表)
方法命名规则和变量名命名规则一样,方法名应该反映对象行为的含义。
方法的参数列表表示方法接受的处理数据,很多时候事务的行为需要一定的处理数据行为才能正常执行。比如说洗衣机的处理数据是要洗的衣服,动物“吃”方法的处理数据是吃的东西等等。参数列表可以是以下形式:
void eat(); //空参数,不需要参数
void eat(string sPork); //一个形式参数sPork (简称形参)
void eat(string sEgg,int iNum); //两个形式参数(sEgg,iNum)
void eat(string sEgg,int iNum,stringsAddress);//三个形式参数(sEgg,iNum,sAddress)"
方法调用:eat(“猪肉”) //注意在此处传入的值”猪肉”为实际参数(简称实参)
方法体指要在方法中执行的代码,它是该方法的详细处理步骤。比如洗衣机的“洗衣”方法里面就包括详细洗衣的步骤,比如左转20圈然后右转20圈、洗衣20分钟、甩干等。
返回类型用关键字return,return语句使用时重点要注意以下几个问题:
n一个方法中可以出现多个return语句,但只有一个会被执行;
n返回值的数据类型必须与方法定义返回值数据类型相同;
n如果方法定义了返回值则必须使用return语句进行返回;
n当遇到return语句时,方法执行将终止,执行被中断并退出方法;
下面来看一下计算器的程序,看是否仍有需要提高的地方。
功能:实现一个非常简单的计算器,根据客户的要求来进行+ - * /运算;
时间: ;在第三章Demo\Switch基础上完善
版本:2.1.3
class Calc //Calc类完成的功能是什么?用户输入和计算;输入应该放到客户端来实现,但是此处留个小尾巴.到4.0扩展;
//1.成员变量
double x,y; //1.声明两个变量
//op表示操作符; //注意比较:int、char、string的使用,使用哪个更好一些。
//2.成员方法
public void Shuru()
Console.WriteLine("请输入第一个操作数:");
x=Convert.ToDouble(Console.ReadLine());
Console.WriteLine("请输入第二个操作数:");
y=Convert.ToDouble(Console.ReadLine());
public void Jisuan()
Console.WriteLine("请输入您要进行的运算:+ - * /");
op=Convert.ToChar(Console.ReadLine()); //因为op是char型的,需要强制转换;
switch(op)
case '+':
Console.WriteLine("和为:"+(x+y));
case '-':
Console.WriteLine("差为:"+(x-y));
case '*':
Console.WriteLine("积为:"+(x*y));
case '/':
Console.WriteLine("除数不能为0");
Console.WriteLine("商为:"+(x/y));
Console.WriteLine("错误选择:");
//***************************************客户端类
class CalcGUI
static void Main()
Calc jisuanqi=new Calc();
jisuanqi.Shuru();
jisuanqi.Jisuan();
该版本的计算器中已经很好的实现了,业务逻辑(计算功能)和界面(客户端:输入)的功能,但是依据OO的原则,应该具有良好的扩展性和复用性,如果在此时,需要增加新的功能则必须再次修改swich中的内容,并且输出功能也应该在客户端实现。因此,此程序仍有完善的必要。下面请大家做项目2,实现业务逻辑与客户端分离的程序。
项目2:计算器:将计算功能和用户输入、输出功能分离
项目背景:剖析计算器,更好的体会OO扩展性、复用性的好处。
解决方案:使用带返回值的方法来解决.
任务1:编写代码
功能:实现计算器;将计算功能和用户输入分离
时间: 星期二 第二节课
版本:4.1.1
//Calc类的成员变量x,y
private double x,y;
p //再增加一个结果变量
public void ShuRu()
//在此接受x,y的值
Console.WriteLine("请输入第一个操作数:");
x=Convert.ToDouble(Console.ReadLine());
Console.WriteLine("请输入第二个操作数:");
y=Convert.ToDouble(Console.ReadLine());
public double Jia()
result=x+y;
public double Jian()
result=x-y;
public double Cheng()
result=x*y;
public double Chu()
return 0; //注意此处是有问题的,考虑如何修改
result=x/y;
/**********客户端类,即界面类***********/
classClacGUI
static void Main()
C //jisuanqi=?
jisuanqi=new Calc();
jisuanqi.ShuRu();
Console.WriteLine(“和”+jisuanqi.Jia()); //返回double型的和--&数
Console.WriteLine(“差”+jisuanqi.Jian()); //返回double型的差--&数
Console.WriteLine(“积”+jisuanqi.Cheng()); //返回double型的积--&数
Console.WriteLine(“商”+jisuanqi.Chu()); //返回double型的商--&字符串
//doublex,y; //在Main()方法内,所以说不是ClacGUI的成员变量.叫什么呢?(考察的知识点,为变量的作用域)
任务2:保存程序为Calc4.cs,并编译程序
任务3:运行程序Calc4
任务4:体会本程序与Calc3的区别,考虑改进在何处,是否仍有改进的余地。
任务5:扩充,使用没有返回值的方法,使用返回类型为string的方法如何做?
项目3:计算器:使用带参数的方法
项目背景:剖析计算器,更好的体会OO扩展性、复用性的好处。在原有计算器的基础上增加求平方、求阶乘的功能。
解决方案:使用带返回值及带参数的方法来解决.
任务1:编写代码
功能:实现计算器;将计算功能和用户输入分离
时间: 星期二 第二节课
版本:5.1.1
p //再增加一个结果变量
public double Jia(double num1,double num2) //加法运算:形参:num1,num2
result=num1+num2;
publicdouble Jian(double num1,double num2) //减法运算
result=num1-num2;
publicdouble Cheng(double num1,double num2) //乘法运算
result=num1*num2;
publicdouble Chu(double num1,double num2) //除法运算
result=num1/num2;
publicdouble PingFang(double num1)
result=num1*num1;
publicdouble NciFang(double num1,double num2) //num1:2的num2:5次方
result=1; //定义result为1
for(inti=1;i&=num2;i++)
result=result*num1;
/**********客户端类,即界面类***********/
classClacGUI
static void Main()
C //jisuanqi=?
jisuanqi=new Calc();
double x,y; //x,y为Main()的局部变量
Console.Write("请输入第一个数字:");
x=Convert.ToDouble(Console.ReadLine());
Console.Write("请输入第二个数字:");
y=Convert.ToDouble(Console.ReadLine());
//op为Main()的局部变量,表示操作符
Console.Write("请输入您要进行的运算:+ - * / ^:"); //^:表示求N次方
op=Convert.ToChar(Console.ReadLine());
switch(op)
case '+': //加运算
Console.WriteLine(jisuanqi.Jia(x,y));
case '-':
Console.WriteLine(jisuanqi.Jian(x,y));
case '*': //加运算
Console.WriteLine(jisuanqi.Cheng(x,y));
case '/':
Console.WriteLine("除数不能为0");
Console.WriteLine(jisuanqi.Chu(x,y));
case '^':
Console.WriteLine(jisuanqi.NciFang(x,y));
Console.WriteLine("其他无效选择!!!");
任务2:保存文件,并编译程序
任务3:运行程序
任务4:体会参数在方法中的应用。
方法参数:值参数、引用参数、输出参数
值参数:声明方法时,不带任何修饰符号的是值参数,一个值参数相当于一个局部变量。当使用值参数时,将会分配一个新的存储位置,将实参的值拷贝到这个位置,并且将此拷贝传递给该方法。允许方法将新值传递给值参数,但是这样的赋值只影响实参的副本,而不影响在方法调用时由调用方法给出的实参。被调用方法不会修改内存中实参的值,所以,使用值参数时可以保证实参值是安全的。
简而言之:值参数只能将值带进方法,不能将值带出方法。
案例:二数字交换
//NotSwap.cs
// 值参数不能影响实参的值
static void NotSwap(int x, int y)
Console.WriteLine("进入NotSwap时:x = {0}, y = {1}", x, y);
int temp =
Console.WriteLine("退出NotSwap时:x = {0}, y = {1}", x, y);
static void Main()
int i = 1, j = 2;
Console.WriteLine("执行NotSwap前:i = {0}, j = {1}", i, j);
NotSwap(i, j);
Console.WriteLine("执行NotSwap后:i = {0}, j = {1}", i, j);
程序运行效果是值参数的值仅仅在方法体内被改变,而不能影响对应的实参的值。
引用参数:
用ref修饰符声明的参数是引用参数。与值参数不同,引用参数不能创建新的存储位置,用参数表示的存储位置就是在方法调用中,作为实际参数对应的变量所表示的存储位置。
变量在作为引用参数传递之前,必须先明确赋值。
简而言之:引用参数既能将值带进方法,也能将值带出方法。
案例:二数交换
// 引用参数会影响实参的值
static void Swap(ref int x, ref int y)
Console.WriteLine("进入Swap时:x = {0}, y = {1}", x, y);
int temp =
Console.WriteLine("退出Swap时:x = {0}, y = {1}", x, y);
static void Main()
int i = 1, j = 2;
Console.WriteLine("执行Swap前:i = {0}, j = {1}", i, j);
Swap(ref i, ref j);
Console.WriteLine("执行Swap后:i = {0}, j = {1}", i, j);
输出参数:
用out修饰的参数是输出参数,其他同ref参数一样,在使用之前无须赋值,必须在方法内完成对象的初始化。
简而言之:输出参数不能将值带进方法,只能将值带出方法。
案例:将路径分解为目录名和文件名的方法SplitPath,需要返回目录名和文件名两个值。
//SplitPath.cs
// 利用输出参数来返回多个值
static void SplitPath(string path, outstring dir, out string name)
int i = path.L
while (i & 0)
char ch = path[i-1];
if (ch == '\\' || ch == '/'|| ch == ':')
dir = path.Substring(0, i);
name = path.Substring(i);
static void Main()
string dir,
SplitPath("c:\\Windows\\System\\hello.txt",out dir, out name);
Console.WriteLine("目录名: {0}",dir);
Console.WriteLine("文件名: {0}", name);
静态方法与实例方法
static:用来修饰静态成员和静态方法;
没有使用static修饰的成员和方法为实例成员和实例方法;
区别如下:
&静态成员、方法属于类,被类的所有实例共享;实例成员、方法属于对象(类的实例),每个对象都有实例成员的不同副本。
&静态成员只标识一个存储位置,无论创建了多少个类的实例,它的静态成员在内存中都只占同一块区域;类的实例成员属于类的实例所有,每创建一个类的实例,都在内存中为实例成员开辟一块区域。
&静态成员、方法通过类名.运算符来使用;实例成员、方法通过对象名. 运算符来使用。
&静态方法只能访问类中的静态成员,而不能使用实例成员。
在前面的Console类的WriteLine、Write等方法就是静态方法,是通过类Console来引用的。
案例:使用账户Account类获取银行信息的静态方法PrintBankInfo
//Account2.cs
// 演示方法的声明和调用
classAccount
public Account(string name)
this.balance = 0;
this.name =
Print("开户", 0);
public bool Deposit(decimal amount)
if (amount &= 0)
balance +=
Print("存入", amount);
public bool Withdraw(decimal amount)
if (amount & balance || amount &=0)
balance -=
Print("取出", amount);
private void Print(string operation,decimal amount)
Console.WriteLine("---------------------------");
Console.WriteLine("姓名: {0}", name);
Console.WriteLine("{0}: {1}",operation, amount);
Console.WriteLine("余额: {0}", balance);
Console.WriteLine("---------------------------");
public static void PrintBankInfo()
Console.WriteLine("---------------------------");
Console.WriteLine(" XYZ银行, 电话: ");
Console.WriteLine("---------------------------");
Console.WriteLine(" 顾客至上 服务第一 ");
Console.WriteLine("---------------------------");
public static void Main()
Account.PrintBankInfo();
Account acc = new Account("张三");
bool succeed = acc.Deposit(100);
if (!succeed)
Console.WriteLine("存款失败!");
succeed = acc.Withdraw(37);
if (!succeed)
Console.WriteLine("取款失败!");
有时候使用静态方法非常方便。对于常用的“工具”方法一般都使用静态方法啦实现,比如Math类。
实践问题:
1. 说明以下语句是正确的还是错误的
封装意味着防止访问不需要的信息()
2.请注意以下语句
语句A :静态变量即使在执行它们所属的函数后仍然保持其原值。
语句B:静态函数可以访问静态以及非静态的变量。
以下那项是正确的?
a.A和B都正确
b.A正确,B错误
c.A 错误,B正确
d.A和B都是错误
3.判断以下语句是正确的还是错误的:
在公共访问区分符中,基类的所有公共成员都是受保护的。
抽象代表对象或类的基本特性,这些特性使得它们能够与其他对象或类区别开来。
在本章中,我们主要学习了:
u访问修饰符的分类和使用范围
u参数化方法的几种方式
u静态方法和静态变量
英语词汇:
英文 全文 中文
Public 公共的、公开的
Private 私有的
Protected 受保护的
Internal 内部的
Access 访问
Outside 外部的
Definition 定义
Operator 操作符
Model 模型
Error 错误
Specifier 修饰符
Return 返回
Method 方法
Parameterparameter list 参数
Following 下面的
Factorial 阶乘
Out 输出的
Refreference 引用
Example 例子
Count 计数
练习项目:
编写一个程序,该程序要计算用户输入的数的阶乘。请使用静态和静态变量创建此程序。提示:用户输入数的极限是1-20。
红黑联盟&版权所有
Copyright&& 2017
All rights reserved.查看: 2220|回复: 3
C#怎么让一个先前赋过值的变量,在软件重启后,这个变量的值不变
该用户从未签到
是这样的,我做一个收入和支出,现在里面的balance余额,接收来自收入的金额,和各种操作之后,然后重新开软件之后,balance余额又成0了,又重新开始接收金额了,怎么能让balance这个变量一直存储着,每次打开软件,这个变量的值都不变。
第一次开始
(198.43 KB, 下载次数: 58)
23:31 上传
第二次开启
组图打开中,请稍候......
TA的每日心情开心6&小时前签到天数: 488 天[LV.9]以坛为家II
存储到文件,或者是数据库里
该用户从未签到
存储到文件,或者是数据库里
存储到数据库里,怎么用数据库把它这个值拿出来当成变量用?
TA的每日心情开心6&小时前签到天数: 488 天[LV.9]以坛为家II
启动是读取不就行了豆丁微信公众号
君,已阅读到文档的结尾了呢~~
精品:c程序设计实验报告 c语言实验指导书 汇编程序设计实验 matlab实验指导书 机械原理实验指导书 循环程序设计实验 单片机实验指导书 单片机实验指导 数据结构实验指导书 java实验指导书
扫扫二维码,随身浏览文档
手机或平板扫扫即可继续访问
C#程序设计实验指导
举报该文档为侵权文档。
举报该文档含有违规或不良信息。
反馈该文档无法正常浏览。
举报该文档为重复文档。
推荐理由:
将文档分享至:
分享完整地址
文档地址:
粘贴到BBS或博客
flash地址:
支持嵌入FLASH地址的网站使用
html代码:
&embed src='http://www.docin.com/DocinViewer-4.swf' width='100%' height='600' type=application/x-shockwave-flash ALLOWFULLSCREEN='true' ALLOWSCRIPTACCESS='always'&&/embed&
450px*300px480px*400px650px*490px
支持嵌入HTML代码的网站使用
您的内容已经提交成功
您所提交的内容需要审核后才能发布,请您等待!
3秒自动关闭窗口博客访问: 605369
博文数量: 134
博客积分: 7079
博客等级: 少将
技术积分: 1331
注册时间:
在c#程序开发中经常需要和SQL Server数据库打交道,下面我们就了解一下c#操作SQL Server数据库的方法:
&& 首先是为我们的程序添加必要的引用以及一些数据成员。因为我们的程序涉及到数据库的访问操作,所以必须要运用到数据提供者(Data Provider)的对象。在.Net框架下,我们主要运用的数据提供者分为两类,一类是Sql类型的,另一类是OleDb类型的。它们涉及到的命名空间分别为System.Data.SqlClient和System.Data.OleDb。因为我们的程序访问的是SQL Server数据库,所以我们运用的数据提供者对象应为Sql类型的。原因很简单,该类型的对象是专门为SQL Server数据库而设计的,所以性能得到了大大的优化。所以,在我们的程序的开始处添加如下一句语句:using System.Data.SqlC
1.定义变量
&& 添加对System.Data.SqlClient命名空间的引用后,我们接下来为程序添加一些必要的数据成员,这些数据成员可以完成一些对数据库及其对象的操作。
& private string ConnectionString = "Data Source=192.168.0.10;Initial Catalog=Persist Security Info=TUser ID=Password=test";&& // 连接字符串,包含了连接参数 private SqlConnection conn = //& 数据库连接对象。实现和数据库的连接 private SqlCommand cmd =& //&&数据库连接命令对象。指定执行的SQL语句 private string sql =&& // 存放SQL语句的。
2.连接数据库
&& // 创建一个连接 conn = new SqlConnection(ConnectionString);
& ...... //其他处理代码
&if( conn.State == ConnectionState.Open)
&&&&& conn.Close() ;
3.创建数据库
&& 在创建了数据库连接对象后,我们就可以在程序中运用它了。首先,我们在程序中动态地创建一个SQL Server类型的数据库。我们将数据库创建在C:mysql目录下,所以读者要练习该实例的话得先在C:下创建一个名为mysql的文件夹,否则会出错!创建数据库的关键是函数中的sql对象,通过该对象我们指定了数据库文件的一些基本属性。之后,我们新创建了一个SqlCommand对象,通过该对象我们就实际完成了对数据库的操作。函数的实现如下;
&& private void button1_Click(object sender, System.EventArgs e) { // 打开数据库连接 if( conn.State != ConnectionState.Open)  conn.Open(); string sql = "CREATE DATABASE mydb ON PRIMARY"  +"(name=test_data, filename ='C:\mysql\mydb_data.mdf', size=3,"  +"maxsize=5, filegrowth=10%)log on"  +"(name=mydbb_log,filename='C:\mysql\mydb_log.ldf',size=3,"  +"maxsize=20,filegrowth=1)"; cmd = new SqlCommand(sql, conn); try {  cmd.ExecuteNonQuery(); } catch(SqlException ae) {  MessageBox.Show(ae.Message.ToString()); } }
4.创建表并添加记录:
  创建了数据库后,我们得为其创建表,表是数据库中的基本对象。我们通过CREATE TABLE这句SQL语句完成创建表的操作,表被创建后,我们就确定了其模式(Schema)。之后,我们还通过INSERT语句向该表中添加了四条记录以为后用。函数的实现如下:
private void button2_Click(object sender, System.EventArgs e) { // 打开数据库连接 if( conn.State == ConnectionState.Open)  conn.Close(); ConnectionString ="Integrated Security=SSPI;" +"Initial Catalog=" +  "Data Source=";    conn.ConnectionString = ConnectionS conn.Open(); sql = "CREATE TABLE myTable"+"(myId INTEGER CONSTRAINT PKeyMyId PRIMARY KEY,"+  "myName CHAR(50), myAddress CHAR(255), myBalanceFLOAT)"; cmd = new SqlCommand(sql, conn); try {  cmd.ExecuteNonQuery();     // 向表中添加记录  sql = "INSERT INTO myTable(myId, myName,myAddress, myBalance) "+"VALUES (1001, 'Puneet Nehra', 'A 449 Sect 19, DELHI', 23.98 ) " ;  cmd = new SqlCommand(sql, conn);  cmd.ExecuteNonQuery();sql = "INSERT INTO myTable(myId, myName,myAddress, myBalance) "+"VALUES (1002, 'Anoop Singh', 'Lodi Road, DELHI', 353.64) " ;  cmd = new SqlCommand(sql, conn);  cmd.ExecuteNonQuery(); sql = "INSERT INTO myTable(myId, myName, myAddress, myBalance) "+"VALUES (1003, 'Rakesh M', 'Nag Chowk, Jabalpur M.P.', 43.43) " ; cmd = new SqlCommand(sql, conn); cmd.ExecuteNonQuery(); sql = "INSERT INTO myTable(myId, myName, myAddress, myBalance) "+"VALUES (1004, 'Madan Kesh', '4th Street, Lane 3, DELHI', 23.00) " ;  cmd = new SqlCommand(sql, conn);  cmd.ExecuteNonQuery(); } catch(SqlException ae) {  MessageBox.Show(ae.Message.ToString()); } }
5.创建通用SQL语句执行函数:
  考虑到程序后面大量运用SqlCommand对象对数据库进行操作,我们在程序中设计了一个通用的SQL语句执行函数。它根据数据库连接对象以及sql对象创建一个SqlCommand对象,然后完成对数据库的相关操作。函数的实现如下:
private void ExecuteSQLStmt(string sql) { // 打开数据库连接 if( conn.State == ConnectionState.Open)  conn.Close(); ConnectionString ="Integrated Security=SSPI;" +  "Initial Catalog=" +  "Data Source=";    conn.ConnectionString = ConnectionS conn.Open(); cmd = new SqlCommand(sql, conn); try {  cmd.ExecuteNonQuery(); } catch(SqlException ae) {  MessageBox.Show(ae.Message.ToString()); } }
6.创建存储过程:
  我们通过CREATE PROCEDURE这句SQL语句创建存储过程,同时函数中还调用了上面的通用SQL语句执行函数。函数的实现如下:
private void button3_Click(object sender, System.EventArgs e) { sql = "CREATE PROCEDURE myProc AS"+  " SELECT myName, myAddress FROM myTable GO"; ExecuteSQLStmt(sql); }
  存储过程创建完毕后,我们可以在SQL Server企业管理器中找到其属性。
7.创建视图:
  创建视图的过程与上面创建存储过程的方法类似,只是运用到的SQL语句为CREATE VIEW。函数的实现如下:
private void button4_Click(object sender, System.EventArgs e) { sql = "CREATE VIEW myView AS SELECT myName FROM myTable"; ExecuteSQLStmt(sql); }
  同样,在创建完成后,我们可以在企业管理器中找到其属性。
8.查看表中的数据:
  查看表中的数据过程中,我们运用到了ADO.Net中的SqlDataAdapter以及DataSet这两个重要的对象。其中SqlDataAdapter对象是前面提到的Sql类型的数据提供者对象,它是专门用于SQL Server数据库的。而DataSet对象则是与数据提供者对象的类型无关的,它适用于任何类型的数据提供者对象,它被包含在System.Data命名空间之中,可谓是ADO.Net体系结构的核心。其数据的访问模式为非连接模式(Disconnected),即数据从数据库(或是Xml数据流)中被读到DataSet对象后,DataSet对象就断开了原来的连接。在完成一系列操作后,DataSet对象再连接到数据库并完成数据的更新操作。SqlDataAdapter对象提供了Fill和Update两个基本的方法以完成数据的读取和更新操作。
  所以下面是函数的实现方法:
private void button5_Click(object sender, System.EventArgs e) { // 打开数据库连接 if( conn.State == ConnectionState.Open)  conn.Close(); ConnectionString ="Integrated Security=SSPI;" +  "Initial Catalog=" +  "Data Source=";    conn.ConnectionString = ConnectionS conn.Open(); // 创建数据适配器SqlDataAdapter da = new SqlDataAdapter("SELECT * FROM myTable", conn);// 创建一个数据集对象并填充数据,然后将数据显示在DataGrid控件中DataSet ds = new DataSet("myTable");da.Fill(ds, "myTable");dataGrid1.DataSource = ds.Tables["myTable"].DefaultV }
该操作的结果就是在程序的DataGrid控件中显示表中的数据。
9.查看存储过程中的数据:
  该过程和上面查看表中的数据的过程类似,其中调用的存储过程就是我们前面创建的那个。函数的实现如下:
private void button6_Click(object sender, System.EventArgs e) { // 打开数据库连接 if( conn.State == ConnectionState.Open)  conn.Close(); ConnectionString ="Integrated Security=SSPI;" +  "Initial Catalog=" +  "Data Source=";    conn.ConnectionString = ConnectionS conn.Open();    // 创建数据适配器 SqlDataAdapter da = new SqlDataAdapter("myProc", conn); // 创建一个数据集对象并填充数据,然后将数据显示在DataGrid控件中 DataSet ds = new DataSet("SP"); da.Fill(ds, "SP"); dataGrid1.DataSource = ds.DefaultViewM }10.查看视图中的数据:
  该过程和上面的两个过程也是类似的,调用的视图是我们前面创建的那个视图。函数的实现如下:
private void button7_Click(object sender, System.EventArgs e) { // 打开数据库连接 if( conn.State == ConnectionState.Open)  conn.Close(); ConnectionString ="Integrated Security=SSPI;" +  "Initial Catalog=" +  "Data Source=";    conn.ConnectionString = ConnectionS conn.Open();    // 创建数据适配器SqlDataAdapter da = new SqlDataAdapter("SELECT * FROM myView", conn);// 创建一个数据集对象并填充数据,然后将数据显示在DataGrid控件中DataSet ds = new DataSet();da.Fill(ds);dataGrid1.DataSource = ds.DefaultViewM }
11.创建其他数据库对象:
  在关系型数据库中,常涉及到的数据库对象还包括了索引、约束等。它们是高效实现数据库查询操作和满足数据库完整性规则的必要条件。我们可以通过Create Index语句来创建索引,通过CREATE RULE语句来创建约束(也即规则)。函数的实现如下:
private void button8_Click(object sender, System.EventArgs e) { sql = "CREATE UNIQUE INDEX "+  "myIdx ON myTable(myName)";   ExecuteSQLStmt(sql);  sql = "CREATE RULE myRule "+  "AS @myBalance >= 32 AND @myBalance < 60"; ExecuteSQLStmt(sql); }
12.修改表:
  上面我们为数据库创建了一个表,但是实际的应用过程中可能还要为该表添加一些字段或是删除某些字段,这就要通过ALTER TABLE这句SQL语句来完成了。其中添加字段的方法是ALTER TABLE…ADD…,而删除字段的方法则是ALTER TABLE…DROP…,本程序中我们为表添加了一个字段。函数的实现如下:
private void button9_Click(object sender, System.EventArgs e) { sql = "ALTER TABLE MyTable ADD "+  "newCol TIMESTAMP";            ExecuteSQLStmt(sql); }
13.删除表:
  删除表的操作就是将某个不再有用的表从数据库中删除,通过DROP TABLE语句我们可以完成此操作。函数的实现如下:
private void button10_Click(object sender, System.EventArgs e) { string sql = "DROP TABLE myTable"; ExecuteSQLStmt(sql); }
阅读(28544) | 评论(1) | 转发(0) |
给主人留下些什么吧!~~
怎么到处都是一样的~代码
请登录后评论。}

我要回帖

更多关于 静态成员变量初始化 的文章

更多推荐

版权声明:文章内容来源于网络,版权归原作者所有,如有侵权请点击这里与我们联系,我们将及时删除。

点击添加站长微信