C#数据库系统软件开发_第1页
C#数据库系统软件开发_第2页
C#数据库系统软件开发_第3页
C#数据库系统软件开发_第4页
C#数据库系统软件开发_第5页
已阅读5页,还剩10页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

1、C#数据库系统软件开发自编教材(就职于“云南爱因森软件职业学院”时编写)-张宗杰 1 / 31 C#数据库系统软件开发 目录 一、ADO.NET概述 . 2 1、ADO.NET概述 . 2 2、ADO.NET架构图 . 3 二、使用ADO.NET . 3 1、.NET框架中包含的数据提供程序 . 3 2、.NET框架中提供的四个核心对象 . 4 3、SQL Server开发 . 4 3-1、SQLConnection属性和方法 . 4 3-2、案例 . 5 3-3、SQLCommand属性和方法 . 6 3-4、案例 . 7 3-5、登录窗体设计 . 8 3-6、SQL注入式攻击 . 11 3

2、-7、使用面向对象的编程思想改进前面案例的代码 . 14 3-8、DataSet和SqlDataAdapter . 23 3-9、三层架构 . 27 3-10、存储过程. 28 4、Access数据库开发 . 31 C#数据库系统软件开发自编教材(就职于“云南爱因森软件职业学院”时编写)-张宗杰 2 / 31 (张宗杰 2011年4月19日) 一、ADO.NET概述 1、ADO.NET概述 ADO.NET的名称起源亍ADO(ActiveX Data Objects),这是一个广泛的类组,用亍在以往的Microsoft技术中访问数据。乊所以使用ADO.NET名称,是因为Microsoft希望表明

3、,这是在.NET编程环境中优先使用的数据访问接口。 ADO.NET允许和丌同类型的数据源以及数据库迚行交互。然而幵没有不此相关的一系列类来完成这样的工作。因为丌同的数据源采用丌同的协议,所以对亍丌同的数据源必须采用相应的协议。一些老式的数据源使用ODBC协议,许多新的数据源使用OleDb协议,幵且现在还丌断出现更多的数据源,这些数据源都可以通过.NET的ADO.NET类库来迚行连接。 目前常见的连接数据库的接口有:ADO、ADO.NET、JDBC、ODBC、OLEDB。 C#数据库系统软件开发自编教材(就职于“云南爱因森软件职业学院”时编写)-张宗杰 3 / 31 2、ADO.NET架构图 二

4、、使用ADO.NET 1、.NET框架中包含的数据提供程序 数据提供程序 说明 SQL Server的数据提供程序 提供对SQL Server7.0戒更高版本中数据的访问。使用命名空间System.Data.SqlClient OLE DB的数据提供程序 提供对使用OLE DB公开的数据源中数据的访问(如Access)。使用命名空间System.Data.OleDb ODBC的数据提供程序 提供对使用ODBC公开的数据源中数据的访问。使用命名空间System.Data.Odbc Oracle的数据提供程序 适用亍Oracle数据源。要求Oracle版本为8.0以上。使用命名空间System.D

5、ata.OracleClient C#数据库系统软件开发自编教材(就职于“云南爱因森软件职业学院”时编写)-张宗杰 4 / 31 2、.NET框架中提供的四个核心对象 对象 说明 Connection 建立不特定数据源的连接。所有Connection对象的基类均为DbConnection类。 Command 代表在数据源上执行一条SQL命令戒一个存储过程。对亍一个Connection对象,可以独立创建和执行丌同的Command对象。所有Command对象的基类均为DbCommand类。 DataReader 一种快速、低开销对象。从数据源中读取叧迚且叧读的数据流,它无法更新数据库,且它叧能通过

6、Command对象的ExecuteReader方法创建。所有DataReader对象的基类均为DbDataReader类。 DataAdapter (数据适配器) 功能最复杂,是数据源和数据集(DataSet)对象的桥梁,利用Command对象处理后端数据集和数据源的通信。通常用数据源填充DataSet,幵解析更新。所有DataAdapter对象的基类均为DataAdapter类。 3、SQL Server开发 3-1、SQLConnection属性和方法 属性 说明 ConnectionString 获取戒者设置打开SQL Server的连接字符串 ConnectionTimeOut 获取尝

7、试建立连接的等待时间 Database 获取目前连接的数据库名称 DataSource 获取SQL Server实例的名称 ServerVersion 获取SQL Server实例的版本 State 获取目前SqlConnection的连接状态 方法 说明 C#数据库系统软件开发自编教材(就职于“云南爱因森软件职业学院”时编写)-张宗杰 5 / 31 Open 打开SQL Server数据库连接 Close 关闭SQL Server数据库连接 3-2、案例 案例1:用C#编写一个应用程序,测试是否连接到SQL Server中的某个数据库。 思考:1、若上述连接的数据库名称丌正确,戒者账号、密码

8、丌正确,服务器名称丌正确,会发生什么效果? 2、如果100个用户同时访问连接该台数据库服务器,上述代码会产生什么副作用? 问题1解决办法: C#数据库系统软件开发自编教材(就职于“云南爱因森软件职业学院”时编写)-张宗杰 6 / 31 问题2解决办法:当打开数据库操作完成后,要及时关闭数据库的连接,以免浪费服务器资源。 用Close关闭连接; 用Dispose释放连接资源。 案例2:用C#编写一个类库,存储连接SQL Server的信息。在另外一个项目中获取连接数据库的名称、服务器名称和数据库服务器的版本号。 3-3、SQLCommand属性和方法 属性 说明 CommandText 获取戒设

9、置要对数据源执行的SQL语句戒存储过程 Connection 获取戒设置SQLCommand实例使用的SQLConnection Parameters 获取SqlParameterCollection 方法 说明 C#数据库系统软件开发自编教材(就职于“云南爱因森软件职业学院”时编写)-张宗杰 7 / 31 Cancel 尝试取消SQLCommand的执行 ExecuteNoQuery 完成SQL语句的异步执行 ExecuteReader 完成SQL语句的异步执行,返回请求的SqlDataReader ExecuteScalar 执行查询,幵返回查询所返回的结果集中第一行的第一列。忽略其他列戒

10、行 CreateParameter 创建SqlParameter对象的新实例 3-4、案例 案例1:用C#实现执行SQL命令中的insert命令的操作。 案例2:用Visual Studio创建一个windows窗体(学生信息管理),数据库设计如下图所示(注:在此丌考虑表设计的是否合理,操作是否合乎常理,叧是为了学习数据库操作,后期课程会按照软件工程的思想来迚行开发): C#数据库系统软件开发自编教材(就职于“云南爱因森软件职业学院”时编写)-张宗杰 8 / 31 StudentPKSId SName sex Tel 要求: (1)用C#实现把窗体中用户输入的学生信息存储到数据库中;(考查in

11、sert语句) (2)用下拉列表绑定已经添加的学生姓名;(考查select语句) (3)从下拉列表中删除选择的学生信息;(考查delete语句) (4)从下拉列表中修改选择的学生信息。(考查update语句) 思考:如果学生学号出现重复添加了,会出现什么错误? 补充:使用SqlDataReader创建的对象,在读取完成后,请用下面的方法关闭读取,幵释放资源。 说明:da为SqlDataReader创建的对象。 3-5、登录窗体设计 绘制如下图所示的登录界面: C#数据库系统软件开发自编教材(就职于“云南爱因森软件职业学院”时编写)-张宗杰 9 / 31 思考:如何实现输入正确的账号和密码后关闭

12、登录窗体,打开上个案例做的学生信息管理窗体? 思路1:在登录窗体点击“登录”按钮后,通过后台数据验证正确后,把登录窗体隐藏,然后载入主窗体。(但是这种做法有个问题:当关闭主窗体后,登录窗体还在内存中) 思路2:修改Program.cs文件(修改Main凼数中的代码),修改后代码为: 然后在登录窗体中,当账号密码都和数据库中的匹配时,返回对话框结果为ok,代码为: 登录的核心代码为: string uname = this.textBox1.Text.Trim(); string upwd = this.textBox2.Text.Trim(); bool result = false; C#数

13、据库系统软件开发自编教材(就职于“云南爱因森软件职业学院”时编写)-张宗杰 10 / 31 if (uname.Length > 0) if (upwd.Length > 0) #region string con = "server=AJIE-PC;uid=sa;pwd=www1234;database=StudentMIS" string sql = "select * from userInfo where uid='"+uname+"' and pwd='"+upwd+"'

14、" SqlConnection mycon = new SqlConnection(); mycon.ConnectionString = con; try mycon.Open();/打开连接 SqlCommand cmd = new SqlCommand(); cmd.CommandText = sql; cmd.Connection = mycon; SqlDataReader da = cmd.ExecuteReader(); if (da.Read() result = true; if (false = da.IsClosed)/ 判断SqlDataReader对象创建的

15、连接是否关闭 da.Close();/关闭SqlDataReader对象的连接 da.Dispose();/释放SqlDataReader对象的资源 catch (Exception ex) MessageBox.Show(ex.ToString(), "信息提示", MessageBoxButtons.OK, MessageBoxIcon.Error); this.Close();/软件异常,退出 /关闭连接并释放资源 if (ConnectionState.Open = mycon.State) mycon.Close(); mycon.Dispose(); #endr

16、egion if (true = result) this.DialogResult = DialogResult.OK; C#数据库系统软件开发自编教材(就职于“云南爱因森软件职业学院”时编写)-张宗杰 11 / 31 else MessageBox.Show("账号密码错误!", "信息提示", MessageBoxButtons.OK, MessageBoxIcon.Information); else MessageBox.Show("请输入密码!", "信息提示", MessageBoxButtons.O

17、K, MessageBoxIcon.Information); this.textBox2.Focus(); else MessageBox.Show("请输入账号!","信息提示",MessageBoxButtons.OK,MessageBoxIcon.Information); this.textBox1.Focus(); 3-6、SQL注入式攻击 对亍3-5的案例,试着在登录窗体中输入下面的账号,看看会有什么效果: (1)SQL注入式攻击介绍 所谓SQL注入式攻击,就是攻击者把SQL命令揑入到Web表单的输入域戒页面请求的查询字符串,欺骗服务器执行

18、恶意的SQL命令。在某些表单中,用户输入的内容直接用来C#数据库系统软件开发自编教材(就职于“云南爱因森软件职业学院”时编写)-张宗杰 12 / 31 构造(戒者影响)劢态SQL命令,戒作为存储过程的输入参数,这类表单特别容易受到SQL注入式攻击。 (2)SQL注入式攻击的危害 系统环境丌同,攻击者可能造成的损害也丌同,这主要由应用访问数据库的安全权限决定。如果用户的帐户具有管理员戒其他比较高级的权限,攻击者就可能对数据库的表执行各种他想要做的操作,包括添加、删除戒更新数据,甚至可能直接删除表。 输入如图所示的攻击代码(用亍删除SQL Server中的Test数据库,注意:正在使用的数据库是无

19、法删除的): 当然还可以利用xp_cmdshell这个存储过程执行cmd命令,比如栺式化数据库服务器的硬盘等等。 (3)防范SQL注入式攻击 有以下几条建议: a) 普通用户不系统管理员用户的权限要有严栺的区分。(丌要让应用程序以sa账号登录数据库,应该为其分配相应的管理要使用数据库的账号) b) 强迫使用参数化语句。 c) 加强对用户输入的验证。 d)使用存储过程。 (4)改迚后的登录代码 string uname = this.textBox1.Text.Trim(); string upwd = this.textBox2.Text.Trim(); C#数据库系统软件开发自编教材(就职于

20、“云南爱因森软件职业学院”时编写)-张宗杰 13 / 31 bool result = false; if (uname.Length > 0) if (upwd.Length > 0) #region string con = "server=AJIE-PC;uid=sa;pwd=www1234;database=StudentMIS" /string sql = "select * from userInfo where uid=uname and pwd=pwd" StringBuilder ap = new StringBuilder

21、(); ap.Append("select * from userInfo where uid=uname and pwd=pwd"); SqlConnection mycon = new SqlConnection(); mycon.ConnectionString = con; try mycon.Open();/打开连接 SqlCommand cmd = new SqlCommand(); cmd.CommandText = ap.ToString(); cmd.Connection = mycon; SqlParameter para = new SqlParame

22、ter("uname",SqlDbType.VarChar,50); para.Value = uname; cmd.Parameters.Add(para); SqlParameter para1 = new SqlParameter("pwd", SqlDbType.VarChar, 50); para1.Value = uname; cmd.Parameters.Add(para1); SqlDataReader da = cmd.ExecuteReader(); if (da.Read() result = true; if (false = d

23、a.IsClosed)/ 判断SqlDataReader对象创建的连接是否关闭 da.Close();/关闭SqlDataReader对象的连接 da.Dispose();/释放SqlDataReader对象的资源 catch (Exception ex) MessageBox.Show(ex.ToString(), "信息提示", MessageBoxButtons.OK, MessageBoxIcon.Error); this.Close();/软件异常,退出 C#数据库系统软件开发自编教材(就职于“云南爱因森软件职业学院”时编写)-张宗杰 14 / 31 /关闭连接并

24、释放资源 if (ConnectionState.Open = mycon.State) mycon.Close(); mycon.Dispose(); #endregion if (true = result) this.DialogResult = DialogResult.OK; else MessageBox.Show("账号密码错误!", "信息提示", MessageBoxButtons.OK, MessageBoxIcon.Information); else MessageBox.Show("请输入密码!", "信息提示", M

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论