《实验四 数据库编程.doc》由会员分享,可在线阅读,更多相关《实验四 数据库编程.doc(7页珍藏版)》请在taowenge.com淘文阁网|工程机械CAD图纸|机械工程制图|CAD装配图下载|SolidWorks_CaTia_CAD_UG_PROE_设计图分享下载上搜索。
1、实验四 数据库编程一、 实验目的和要求1. 掌握存储过程的创建和使用2. 掌握触发器的创建和使用3. 掌握使用VB.NET访问数据库的方法二、 实验内容1、 创建和执行存储过程a) 创建一个cust_select存储过程,执行该存储过程将从表中根据客户的cid检索客户的姓名、所在城市和折扣率。USE CAPGOCREATE PROCEDURE cust_select(customer_id char(4),customer_name varchar(13) OUTPUT, customer_city varchar(20) OUTPUT,customer_discnt real OUTPUT)
2、ASIF EXISTS(SELECT * FROM customers where cid=customer_id)SELECT customer_name=cname,customer_city=city,customer_discnt=discnt from customers where cid=customer_idELSE SELECT Person not found!b) 执行以上定义的cust_select存储过程DECLARE cust_name varchar(13)DECLARE cust_city varchar(20) DECLARE discnt realEXECU
3、TE cust_select c001, cust_name output,cust_city output,discnt outputSELECT customer_name,cust_name,city,cust_city ,discount,discnt 问题:若要检索其他客户的信息,使用存储过程如何实现?c) 编写一个存储过程,向customers表中插入一条记录,并显示提示信息。d) 编写一个存储过程,根据用户输入的代理商的aid统计该代理商的总销售额。2、 创建和使用触发器a) 在CAP数据库中的agents表上建立一个DELETE触发器agent_tri1(使用CREATE TR
4、IGGER语句创建),使得在删除表agents中的记录的同时,自动检查orders表中是否有与该代理商相关的记录,如果存在相关记录,则取消删除。USE CAPGOCREATE TRIGGER agent_tri1ON agentsFOR DELETEASdeclare AgentID char(3)select AgentID= (select aid from deleted)IF (SELECT COUNT(*) FROM orders where orders.aid=AgentID)0BEGINDECLARE ErrorMessage varchar(100)set ErrorMess
5、age=You can not delete the agent information with the order record.+char(13)+The transaction will be cancelledRAISERROR(ErrorMessage,10,1)ROLLBACK TRANSACTIONENDb) 在查询窗口中输入以下语句验证触发器DELETE FROM agents WHERE aid=a01c) 在agents表中添加一条新纪录(a08,Rose,New York,8),再在查询窗口中输入以下语句验证DELETE FROM agents WHERE aid=a0
6、8d) 使用系统存储过程sp_helptext查看触发器agent_tril定义的信息USE CAPEXEC sp_helptext agent_tri1GO3、 使用VB.NET访问数据库a) 编程实现与customers表的连接操作步骤: 新建VB.Net项目,设计好界面。 编写代码。双击窗体空白处,进入代码编辑窗口。编写代码时,可按以下思路进行编写。导入命名空间定义所需变量(数据连接、数据适配器、数据集、连接字符串、SQL语句字符串)给变量赋值数据填充将组合框和数据集联系起来。代码如下:Imports System.Data.SqlClient 导入命名空间Public Class Fo
7、rm1 Inherits System.Windows.Forms.Form Dim SqlConnection1 As New SqlConnection 定义连接变量 Dim DataSet1 As DataSet = New DataSet 定义数据集变量 Dim SqlAdapater1 As SqlDataAdapter 定义数据适配器变量 Dim StrSql As String 定义SQL语句字符串变量 Dim StrCon As String 定义连接字符串变量密码改为本机sa密码 Private Sub Form1_Load(ByVal sender As System.Ob
8、ject, ByVal e As System.EventArgs) Handles MyBase.Load 给连接字符串变量赋值 StrCon = Server=(local);database=CAP;User ID=sa;PWD=123 Me.SqlConnection1.ConnectionString = StrCon 给SQL语句字符串变量赋值 StrSql = select * from customers 给数据适配器变量赋值 SqlAdapater1 = New SqlDataAdapter(StrSql, Me.SqlConnection1) 数据填充 SqlAdapate
9、r1.Fill(Me.DataSet1, customers) 建立数据集数据与组合框的联系 Me.ComboBox1.DataSource = Me.DataSet1.Tables(customers) Me.ComboBox1.DisplayMember = cname End SubEnd Class 执行程序。效果如图所示b) 编程实现操作步骤:TextBox1 新建VB.Net项目,设计好界面。ComboBox1ComboBox2Button1TextBox3TextBox2 编写代码。imports system.data.SqlClientPublic Class Form1 I
10、nherits System.Windows.Forms.Form Dim SqlConnection1 As New SqlConnection 定义连接变量 Dim DataSet1 As DataSet = New DataSet 定义数据集变量 Dim SqlAdapater1 As SqlDataAdapter 定义数据适配器变量 Dim StrSql As String 定义SQL语句字符串变量 Dim StrCon As String Dim SqlCmd As New SqlCommand Private Sub Form1_Load(ByVal sender As Syste
11、m.Object, ByVal e As System.EventArgs) Handles MyBase.Load 给连接字符串变量赋值 StrCon = Server=(local);database=CAP;User ID=sa;PWD=123 Me.SqlConnection1.ConnectionString = StrCon 给SQL语句字符串变量赋值 StrSql = select * from customers 给数据适配器变量赋值 SqlAdapater1 = New SqlDataAdapter(StrSql, Me.SqlConnection1) 数据填充 SqlAda
12、pater1.Fill(Me.DataSet1, customers) 建立数据集数据与组合框2的联系 Me.ComboBox2.DataSource = Me.DataSet1.Tables(customers) Me.ComboBox2.DisplayMember = cid StrSql = select * from agents 给数据适配器变量赋值 SqlAdapater1 = New SqlDataAdapter(StrSql, Me.SqlConnection1) 数据填充 SqlAdapater1.Fill(Me.DataSet1, agents) 建立数据集数据与组合框3的
13、联系 Me.ComboBox3.DataSource = Me.DataSet1.Tables(agents) Me.ComboBox3.DisplayMember = aid StrSql = select * from products 给数据适配器变量赋值 SqlAdapater1 = New SqlDataAdapter(StrSql, Me.SqlConnection1) 数据填充 SqlAdapater1.Fill(Me.DataSet1, products) 建立数据集数据与组合框4的联系 Me.ComboBox4.DataSource = Me.DataSet1.Tables(
14、products) Me.ComboBox4.DisplayMember = pid End Sub Private Sub Button1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button1.Click SqlCmd.Connection = Me.SqlConnection1 SqlCmd.CommandText = insert into orders(ordno,month,cid,aid,pid,qty,dollars) values ( SqlCmd.CommandTex
15、t = SqlCmd.CommandText & Me.TextBox1.Text & , SqlCmd.CommandText = SqlCmd.CommandText & Me.ComboBox1.Text & , SqlCmd.CommandText = SqlCmd.CommandText & Me.ComboBox2.Text & , SqlCmd.CommandText = SqlCmd.CommandText & Me.ComboBox3.Text & , SqlCmd.CommandText = SqlCmd.CommandText & Me.ComboBox4.Text &
16、, SqlCmd.CommandText = SqlCmd.CommandText & Me.TextBox2.Text & , SqlCmd.CommandText = SqlCmd.CommandText & Me.TextBox3.Text & ) Me.SqlConnection1.Open() Try SqlCmd.ExecuteNonQuery() MsgBox(Insert Success.) Catch ex As Exception MsgBox(ex.ToString) End Try Me.SqlConnection1.Close() End Sub Private Su
17、b Button2_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button2.Click SqlCmd.Connection = Me.SqlConnection1 SqlCmd.CommandText = update orders set month= SqlCmd.CommandText = SqlCmd.CommandText & Me.ComboBox1.Text & ,cid= SqlCmd.CommandText = SqlCmd.CommandText & Me.Combo
18、Box2.Text & ,aid= SqlCmd.CommandText = SqlCmd.CommandText & Me.ComboBox3.Text & ,pid= SqlCmd.CommandText = SqlCmd.CommandText & Me.ComboBox4.Text & ,qty= SqlCmd.CommandText = SqlCmd.CommandText & Val(Me.TextBox2.Text) & ,dollars= SqlCmd.CommandText = SqlCmd.CommandText & Val(Me.TextBox3.Text) SqlCmd
19、.CommandText = SqlCmd.CommandText & where ordno= & Trim(Me.TextBox1.Text) & Dim intRec As Integer Me.SqlConnection1.Open() Try intRec = SqlCmd.ExecuteNonQuery() MsgBox(intRec.ToString & Record is updated.) Catch ex As Exception MsgBox(ex.ToString) End Try Me.SqlConnection1.Close() End Sub Private Su
20、b Button3_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button3.Click 此处代码请同学们自己补充 End SubEnd Class三、 思考题四、 出现问题及解决方案五、 附录使用.NET进行数据库连接,必然要使用ADO.Net。ADO.Net是重要的应用程序级接口,提供数据访问服务,它包含一系列对象,通过这些对象,可以实现对数据库的复杂操作。起对象模型如下图所示。下面分别介绍每个对象。1. 连接(SqlConnection)对象,用一个字符串(ConnectString
21、)来描述连接一个数据源所需的信息。用Open和Close方法打开和关闭连接及BeginTranscation方法开始事务处理。2. 命令(SqlCommand)对象,通过SqlConnection执行SQL命令或存储过程。可以使用该对象的Execute?方法来执行这些操作。如使用ExecuteNonQuery方法向数据库发送操作查询,使用ExecuteReader执行会返回结果集的SELECT查询。3. 数据读取器(SqlDataReader)对象是Command对象的ExecuteReader方法返回的对象,它表示从数据库获得的只向前、只读数据集。4. 数据集(DataSet)对象,数据库数
22、据的缓冲区。是ADO.NET非连接架构下的主要对象。它在使用时就像一个驻留在客户端计算机上的一个小型关系数据库,它包含一个DataTable对象的集合。5. 数据适配器(SqlDataAdapter)对象,DataSet与数据库的桥梁,所需的数据在DataSet与数据库之间进行传输。其Fill方法将数据从数据库移到客户端的DataSet对象,而Update方法则按相反的方向移动,将应用程序在DataSet中添加、更改或删除的行对数据库进行更新。从上图可以看出,从.NET应用程序到数据库有两条途径。先看看右边的路径:数据库SqlConnectionSqlCommandSqlDataReader.NET应用程序,这条路径获得的数据是只读的、顺序的。只读表示数据不能被修改,顺序表示只能单方向从头到尾按顺序逐一读取数据,一般用于单次且短时间的数据读取操作。另一条是左边的路径。数据库SqlConnectionSqlCommandSqlDataAdapterDataSet.NET应用程序,通过这条路径获得的数据,用户可以对其修改、插入、删除,并写回数据库,当然其顺序也是可以改变的,也就是说,对数据的访问时双向的、任意的,不必按顺序逐一进行。