9 1 SNO SNAME SEX AGE SDEPT 08041401

  • Slides: 54
Download presentation

表 9 -1 学生表 SNO SNAME SEX AGE SDEPT 08041401 小楠 0 18 电子系

表 9 -1 学生表 SNO SNAME SEX AGE SDEPT 08041401 小楠 0 18 电子系 08041501 琼琼 0 17 信息 程 系 08042101 小伟 1 18 通信 程 系 08041402 爽爽 0 17 电子系 08041403 亮亮 1 19 电子系

表 9 -3 选课表 学 号 08041501 08041406 课 程 号 001 001 08042103

表 9 -3 选课表 学 号 08041501 08041406 课 程 号 001 001 08042103 08041501 08041401 08041406 08041505 001 002 003 002 001 成 绩 90 97 97 60 78 86 78 88 98

表 9 -4 SQL的核心动词 功 能 动 词 数据库查询 SELECT 数据定义 CREATE,DROP, ALTER 数据操作

表 9 -4 SQL的核心动词 功 能 动 词 数据库查询 SELECT 数据定义 CREATE,DROP, ALTER 数据操作 INSERT,UPDATE, DELECT 数据控制 GRANT,REVOKE

 创建选课表,学号和课程号设为主键,成绩在 0~ 100之间, 同时建立选课表与学生表、课程表之间的主外键联系: CREATE TABLE 选课(学号 CHAR(5), 课程号 CHAR(5), 成绩 SMALLINT CONSTRAINT

创建选课表,学号和课程号设为主键,成绩在 0~ 100之间, 同时建立选课表与学生表、课程表之间的主外键联系: CREATE TABLE 选课(学号 CHAR(5), 课程号 CHAR(5), 成绩 SMALLINT CONSTRAINT C 3 CHECK(成绩 BETWEEN 0 AND 100), CONSTRAINT C 4 PRIMARY KEY(学号, 课程号), CONSTRAINT C 5 FOREIGN KEY(学号) REFERENCES 学生(学号), CONSTRAINT C 6 FOREIGN KEY(课程号) REFERENCES 课程(课程号));

 【例9 -4】 建立通讯录表:通讯录(学号,姓名, 录入时间)。再修改某约束,最后删除某一约束: CREATE TABLE 通讯录 (学号 INT NOT NULL, 姓名 varchar(6)

【例9 -4】 建立通讯录表:通讯录(学号,姓名, 录入时间)。再修改某约束,最后删除某一约束: CREATE TABLE 通讯录 (学号 INT NOT NULL, 姓名 varchar(6) NULL, 录入时间 datetime CONSTRAINT ys 1 DEFAULT getdate()) GO ALTER TABLE 通讯录 ALTER COLUMN 姓名 char(6) NOT NULL GO ALTER TABLE 通讯录 DROP CONSTRAINT ys 1

 在. NET Framework中常用的有以下4组数据提供 程序: (1) SQL Server. NET Data Provider 支持Microsoft SQL Server

在. NET Framework中常用的有以下4组数据提供 程序: (1) SQL Server. NET Data Provider 支持Microsoft SQL Server 7. 0及以上版本,为 SQL Server数据库提供服务。 (2) OLEDB. NET Data Provider 支持通过OLEDB接口来访问如d. Base、Fox. Pro、 Excel、Access、Oracle及SQL Server等各类型 数据源。 (3) ODBC. NET Data Provider支持通过ODBC接 口来访问如d. Base、Fox. Pro、Excel、Access、 Oracle及SQL Server等各类型数据源。 (4) Oracle. NET Data Provider支持通过Oracle接 口访问Oracle数据源。

表 9 -5 数据库的数据提供程序 SQL Server. NET Framework 数据提供程 序类名 对象名 OLEDB. NET Framework

表 9 -5 数据库的数据提供程序 SQL Server. NET Framework 数据提供程 序类名 对象名 OLEDB. NET Framework 数据提供程 序的类名 Connection Ole. Db. Connectio Sql. Connection n Odbc. Connection Oracle. Connectio n Command Ole. Db. Command Sql. Command Odbc. Command Oracle. Command Data. Reader Ole. Db. Data. Read Sql. Data. Reader er Odbc. Data. Reader Oracle. Data. Read er Odbc. Data. Adapt er Oracle. Data. Adap ter Data. Adapte Ole. Db. Data. Adap Sql. Data. Adapter r ter ODBC. NET Framework 数据提供程 序 Oracle. NET Framework 数据提供程 序

 1.Ole. Db. Connection类 Ole. Db. Connection类表示到OLE DB数据源 的连接,它位于命名空间 System. Data. Ole. Db中, Ole.

1.Ole. Db. Connection类 Ole. Db. Connection类表示到OLE DB数据源 的连接,它位于命名空间 System. Data. Ole. Db中, Ole. Db. Connection 属性和方法如表 9 -6所示。

 【例9 -17】 通过Ole. Db. Connection类创建Ole. Db. Connection对象 实例,并通过Connection. String属性来连接数据库。 string str = @"Provider=Microsoft.

【例9 -17】 通过Ole. Db. Connection类创建Ole. Db. Connection对象 实例,并通过Connection. String属性来连接数据库。 string str = @"Provider=Microsoft. Jet. OLEDB. 4. 0; Data Source=Student. mdb"; Ole. Db. Connection conn=new Ole. Db. Connection(str); //创建带参数的Ole. Db. Connection对象实例 try { conn. Open(); //打开连接 if (conn. State == Connection. State. Open) //如果连接处于打开状态 rich. Text. Box 1. Text = "数据库连接已经成功建立!"; } catch (Exception ex) { rich. Text. Box 1. Text = ex. Message. To. String(); } finally { conn. Close(); }

或可将Ole. Db. Connection conn = new Ole. Db. Connection(str); 替换为: Ole. Db. Connection conn

或可将Ole. Db. Connection conn = new Ole. Db. Connection(str); 替换为: Ole. Db. Connection conn = new Ole. Db. Connection(); //创建无参的Ole. Db. Connection对象实例 conn. Connection. String = str; //设置连接字符串

2.Sql. Connection类表示一个到SQL Server数据库 的连接,它位于命名空间System. Data. Sql. Client 中。因此使用该类前,要引用命名空间 System. Data. Sql. Client。使用Sql. Connection类首 先要创建该类的对象实例,然后通过

2.Sql. Connection类表示一个到SQL Server数据库 的连接,它位于命名空间System. Data. Sql. Client 中。因此使用该类前,要引用命名空间 System. Data. Sql. Client。使用Sql. Connection类首 先要创建该类的对象实例,然后通过 Sql. Connection对象的连接字符串 (Connection. String)属性选择连接的字符串;或者 直接在创建实例时把连接字符串作为参数传过去。 如代码: string aa = "Data Source=5914 AFAF 0 AAC 4 D 0; Initial Catalog=xsxx; Integrated Security=True";

 或: string aa = "data source=(local); user id=sa; ; database=xsxx; "; Sql. Connection

或: string aa = "data source=(local); user id=sa; ; database=xsxx; "; Sql. Connection con = new Sql. Connection(); con. Connection. String = aa; //设置连接字符串 其中: data source=(local)表示连接本地服务器上的SQL Server 数据库; Initial Catalog表示数据库名称为xsxx。 Integrated Security=True表示连接登录身份验证,使用 Windows身份验证。默认是Integrated Security=False, 表示SQL Server身份验证登录。 user id、Password表示SQL Server用户和密码。

 如连接字符串data source=. ; Initial Catalog = xsxx ; user id=sa; Password=pass; 表示为本地服 务器SQL

如连接字符串data source=. ; Initial Catalog = xsxx ; user id=sa; Password=pass; 表示为本地服 务器SQL Server上的xsxx数据库,使用SQL Server身份验证登录,SQL Server用户和密码分 别为sa和pass。

表 9 -8 Command对象的属性或方法 描 述 Command. Text 设置或获取对数据源执行的SQL语句或存储过程 Command. Timeout 超时等待时间 Command. Type

表 9 -8 Command对象的属性或方法 描 述 Command. Text 设置或获取对数据源执行的SQL语句或存储过程 Command. Timeout 超时等待时间 Command. Type 设置或获取Command. Text属性中的语句是SQL语句、 数据表名,还是存储过程 Text或不设置:Command. Text表示为SQL语句 Table. Direct:Command. Text表示数据表名 Stored. Procedure:Command. Text值为存储过程 Connection 设置或获取Sql. Command的实例用Sql. Connection 设置或获取Ole. Db. Command的实例用 Ole. Db. Connection Parameters 用来设置SQL查询语句或存储过程等的参数

 【例9 -18】 使用Ole. Db. Command对象建立与Access数据库 student. mdb的连接。且使用Ole. Db Command对象的 Excute. Scalar( )方法统计stin表中的总人数。引用 System.

【例9 -18】 使用Ole. Db. Command对象建立与Access数据库 student. mdb的连接。且使用Ole. Db Command对象的 Excute. Scalar( )方法统计stin表中的总人数。引用 System. Data. Ole. Db命名空间。程序代码如下: private void button 1_Click(object sender, Event. Args e) { string str=@"Provider=Microsoft. Jet. OLEDB. 4. 0; Data Source=E: zmc#example student. mdb"; Ole. Db. Connection conn = new Ole. Db. Connection(str); try { conn. Open(); //打开数据库连接 if (conn. State==Connection. State. Open) { Ole. Db. Command cmd = new Ole. Db. Command(); cmd. Command. Text = "select count(*) from stin"; //SQL语句 cmd. Connection = conn; //Ole. Db. Command cmd = new Ole. Db. Command("select count(*) from stin", conn);

 int mycount = (int)cmd. Execute. Scalar(); //语句中有聚合函数, 用Execute. Scalar() label 1. Text =

int mycount = (int)cmd. Execute. Scalar(); //语句中有聚合函数, 用Execute. Scalar() label 1. Text = "学生总人数=" + mycount. To. String(); //显示查询结果 } } catch (Exception ex) //如果发生异常 { label 1. Text = ex. Message. To. String(); }//则显示异常 信息 finally { conn. Close(); } //关闭连接 }

 【例9 -19】 使用Sql. Commad对象的Execute. No. Query方 法执行存储过程,存储过程的名称是pr_insert_sno,该存 储过程完成向SQL Server数据库的stin表中添加记录的功 能(注意引用System. Data. Sql. Client命名空间)。同时向输

【例9 -19】 使用Sql. Commad对象的Execute. No. Query方 法执行存储过程,存储过程的名称是pr_insert_sno,该存 储过程完成向SQL Server数据库的stin表中添加记录的功 能(注意引用System. Data. Sql. Client命名空间)。同时向输 出参数@result中传递最大的学号。运行界面如图 9. 3所示。 存储过程如下: create procedure pr_insert_sno @sno varchar(10), @sname varchar(10), @age int, @result int output as select @result=max(sno) from stin--向输出参数@result 传递最大学号 if @result is null set @result=1 insert into stin (sno, sname, age)values(@sno, @sname, @age)

 该存储过程使用 3个参数(@sno、@sname、@age)作为 3个字段(sno、 sname、age)传递值,将查询的最大的学号作为输出参数(@resul)返 回。 使用C#的Sql. Commad对象的Execute. No. Query方法执行存储过程的 代码如下: private void button

该存储过程使用 3个参数(@sno、@sname、@age)作为 3个字段(sno、 sname、age)传递值,将查询的最大的学号作为输出参数(@resul)返 回。 使用C#的Sql. Commad对象的Execute. No. Query方法执行存储过程的 代码如下: private void button 1_Click(object sender, Event. Args e) { string str = @"Data Source=127. 0. 0. 1; Initial Catalog=学生 ; Integrated Security=True"; Sql. Connection conn = new Sql. Connection(str); conn. Open(); Sql. Command cmd = new Sql. Command("pr_insert_sno", conn); //数据命令对象的参数名是存储过程名 cmd. Command. Type = Command. Type. Stored. Procedure; //数据命 令类型为存储过程 cmd. Parameters. Add("@sno", Sql. Db. Type. Var. Char, 10, "sno"); //定义 存储过程的输入参数 cmd. Parameters. Add("@sname", Sql. Db. Type. Var. Char, 10, "sname"); cmd. Parameters. Add("@age", Sql. Db. Type. Int, 4 , "age");

 //定义存储过程的输出参数,具体含义查看帮助 cmd. Parameters. Add(new Sql. Parameter("@result", Sql. Db. Type. Int, 4, Parameter Direction.

//定义存储过程的输出参数,具体含义查看帮助 cmd. Parameters. Add(new Sql. Parameter("@result", Sql. Db. Type. Int, 4, Parameter Direction. Output, false, 0, 0, "sno", Data. Row. Version. Default, null)); cmd. Updated. Row. Source = Update. Row. Source. Output. Parameters; //命令的任何输出参数都映射到Data. Row对应的列上 //设定输入参数的值 cmd. Parameters["@sno"]. Value = "08041519"; cmd. Parameters["@sname"]. Value = "张大"; cmd. Parameters["@age"]. Value = 18; cmd. Execute. Non. Query(); //执行数据命令 label 1. Text="最大的学号为: "+cmd. Parameters["@result"]. Value. To. String(); //显示输出参数值 }