为完成管理信息系统课程设计,特意和小伙伴一起学了ADO.NET,参考了中国大学MOOC东华大学的信息系统与数据库技术,开发环境是visual studio 和 sql server 2014,写下总结目的是将知识梳理一遍以免学了就忘,其次就是能够给学习ADO的朋友一点点帮助。 我也是几天学了点皮毛,写的不好多多包涵。
一,功能界面
1.总体界面
2."插入"
点击插入后结果,会出现确定和删除键,点击其他键不会出现确定删除键,如下:
3."修改"
点击车次停留信息表中选择,内容会自动填充到文本框,可对其更改,再点击“修改”键,文本框会清空且下方会显示“修改成功提示语”,如下:
4. "删除"
选择表中要删除的记录,文本框自动填充内容,再点击'删除:键,文本框清空且出现提示语
二,后台代码
修改,删除,增加代码都是相似的,注意存储过程,经常会有明明在数据库中建立了存储过程可是运行时出现"存储过程不存在"的情况,主要都是参数没写全,最好把字段全部写上,代码中有说明。
using System;
using System.Collections;
using System.Linq;
using System.Web;
using System.Web.UI;
using System.Web.UI.WebControls;
using System.Data.SqlClient;
using System.Data;
using System.Configuration;
using System.Web.UI.WebControls.WebParts;
using System.Web.UI.HtmlControls;
using System.Web.Security;
public partial class test : System.Web.UI.Page
{
//先定义连接,操纵,数据集等
static SqlConnection cn;
static SqlDataAdapter da = new SqlDataAdapter();
static SqlCommandBuilder SqlBulider = new SqlCommandBuilder(da);
static DataSet ds = new DataSet();
// 显示数据表 “车次停留”表
protected void Page_Load(object sender, EventArgs e)
{
if (!IsPostBack)
{
ConnectionStringSettings settings;
settings = ConfigurationManager.ConnectionStrings["trainConnectionString"];//从配置文件中提取连接字符串
if (settings != null)
{
cn = new SqlConnection(settings.ConnectionString);
SqlCommand cmd = new SqlCommand();
cmd.CommandText = "select trainnumber as 车次,number as 站次,station as 站名,arrivaltime as 到达时间," +
"departuretime as 发车时间,stationtime as 停留时间 from seek_train";
cmd.Connection = cn; //cmd的属性,connection和commandtext以上 也可这样表示 Sqlcommand cmd=new sqlCommand("select trainnumber as 车次,number as 站次,station as 站名,arrivaltime as 到达时间," +
"departuretime as 发车时间,stationtime as 停留时间 from seek_train", cn)
da.SelectCommand = cmd;
cn.Open();
da.Fill(ds, "trainschedules");
cn.Close();
//绑定
GridView1.DataSource = ds.Tables["trainschedules"].DefaultView;
GridView1.DataBind();
}
}
//一开始确定和取消按键是不存在的
ButtonOK.Visible = false;
ButtonCancel.Visible = false;
}
//点击“修改”按钮,修改选中记录,更新数据集
protected void Button4_Click(object sender, EventArgs e)
{
SqlCommand cmd = new SqlCommand();
cmd.CommandType = CommandType.StoredProcedure;
cmd.CommandText = "proc_Updatetrainschedules"; //存储过程,涉及SQL SERVER数据库建立存储过程,名字为pro_Updatetrainschedules,下一节有具体建立代码
cmd.Connection = cn;
SqlParameter param1 = new SqlParameter("@trainnumber", SqlDbType.Char,10);
param1.Value = TextBox1.Text;
cmd.Parameters.Add(param1);
SqlParameter param2 = new SqlParameter("@number", SqlDbType.Int);
param2.Value = TextBox2.Text;
cmd.Parameters.Add(param2);
SqlParameter param3= new SqlParameter("@station", SqlDbType.Char,10);
param3.Value = TextBox3.Text;
cmd.Parameters.Add(param3);
SqlParameter param4 = new SqlParameter("@arrivaltime", SqlDbType.NChar);
param4.Value = TextBox4.Text;
cmd.Parameters.Add(param4);
SqlParameter param5 = new SqlParameter("@departuretime", SqlDbType.NChar);
param5.Value = TextBox5.Text;
cmd.Parameters.Add(param5);
SqlParameter param6 = new SqlParameter("@stationtime", SqlDbType.NChar);
param6.Value = TextBox6.Text;
cmd.Parameters.Add(param6);
cn.Open();
try
{
int i = cmd.ExecuteNonQuery();//执行存储过程插入记录,/变量i存放命令执行影响的记录行数
if (i > 0)
{
Label6.Text = "提示:" + i + "条记录修改成功";
}
}
catch (SqlException ex)//捕获Try后的程序段执行异常
{
Label6.Text = ex.Message;//报告出错的异常原因
}
cn.Close(); //关闭数据库连接
//调用自定义过程UpdateDataBaseAndRefreshGridView(),将更新回写数据库
//并且刷新GridView1和清空文本框
UpdateDataBaseAndRefreshGridView();
}
//点击“删除”按钮,删除选中记录,更新数据集
protected void Button5_Click(object sender, EventArgs e)
{
//建SqlCommand对象cmd并给相关属性赋值,指定命令类型和存储过程名
SqlCommand cmd = new SqlCommand();
cmd.CommandText = "proc_Deletetrainschedules";
cmd.CommandType = CommandType.StoredProcedure;
cmd.Connection = cn;
//定义和创建SqlParameter对象param,并为cmd的操作命令的参数赋值,一定要注意6个参数要写全,写对,否则会出现"存储过程"不存在的问题。
SqlParameter param1 = new SqlParameter("@trainnumber", SqlDbType.Char, 10);
param1.Value = TextBox1.Text;
cmd.Parameters.Add(param1);
SqlParameter param2 = new SqlParameter("@number", SqlDbType.Int, 10);
param2.Value = TextBox2.Text;
cmd.Parameters.Add(param2);
SqlParameter param3 = new SqlParameter("@station", SqlDbType.Char, 10);
param3.Value = TextBox3.Text;
cmd.Parameters.Add(param3);
SqlParameter param4 = new SqlParameter("@arrivaltime", SqlDbType.NChar);
param4.Value = TextBox4.Text;
cmd.Parameters.Add(param4);
SqlParameter param5 = new SqlParameter("@departuretime", SqlDbType.NChar);
param5.Value = TextBox5.Text;
cmd.Parameters.Add(param5);
SqlParameter param6 = new SqlParameter("@stationtime", SqlDbType.NChar);
param6.Value = TextBox6.Text;
cmd.Parameters.Add(param6);
cn.Open();
try
{
int i = cmd.ExecuteNonQuery();//变量i存放命令执行影响的记录行数
if (i > 0)
{
Label6.Text = "提示:" + i + "条记录删除成功";
}
}
catch (SqlException ex) //捕获Try后的程序段执行异常
{
Label6.Text = ex.Message;//报告出错的异常原因
}
cn.Close();//关闭数据库连接
//调用自定义过程UpdateDataBaseAndRefreshGridView(),将更新回写数据库
//并且刷新GridView1和清空文本框
UpdateDataBaseAndRefreshGridView();
}
//在GridView1选择一条记录,文本框显示该记录各项
protected void GridView1_SelectedIndexChanged(object sender, EventArgs e)
{
//获得GridView1的选中行,并把各项赋给各TextBox显示
GridViewRow row = GridView1.SelectedRow;
TextBox1.Text = row.Cells[1].Text;
TextBox2.Text = row.Cells[2].Text;
TextBox3.Text = row.Cells[3].Text;
TextBox4.Text = row.Cells[4].Text;
TextBox5.Text = row.Cells[5].Text;
TextBox6.Text = row.Cells[6].Text;
}
//在GridView1翻页时,刷新GridView1
protected void GridView1_PageIndexChanging(object sender, GridViewPageEventArgs e)
{
GridView1.PageIndex = e.NewPageIndex;
GridView1.DataSource = ds.Tables["trainschedules"].DefaultView;
GridView1.DataBind();
}
//点击“插入”按钮,清空文本框,显示“确定”和“取消”按钮
protected void Button6_Click1(object sender, EventArgs e)
{
ButtonOK.Visible = true;
ButtonCancel.Visible = true;
TextBox1.Text = "";
TextBox2.Text = "";
TextBox3.Text = "";
TextBox4.Text = "";
TextBox5.Text = "";
TextBox6.Text = "";
}
//点击“确定”按钮,添加一条新记录,并将文本框的内容赋值给该新记录,更新数据集
protected void Button7_Click(object sender, EventArgs e)
{
//创建SqlCommand对象cmd并给相关属性赋值,指定命令类型和存储过程名
SqlCommand cmd = new SqlCommand();
cmd.CommandText = "proc_AddtrainRecord";
cmd.CommandType = CommandType.StoredProcedure;
cmd.Connection = cn;
//定义和创建SqlParameter对象param,并为cmd的操作命令的参数赋值
SqlParameter param1 = new SqlParameter("@trainnumber", SqlDbType.Char, 10);
param1.Value = TextBox1.Text;
cmd.Parameters.Add(param1);
SqlParameter param2 = new SqlParameter("@number", SqlDbType.Int,10);
param2.Value = TextBox2.Text;
cmd.Parameters.Add(param2);
SqlParameter param3 = new SqlParameter("@station", SqlDbType.Char,10);
param3.Value = TextBox3.Text;
cmd.Parameters.Add(param3);
SqlParameter param4 = new SqlParameter("@arrivaltime", SqlDbType.NChar);
param4.Value = TextBox4.Text;
cmd.Parameters.Add(param4);
SqlParameter param5 = new SqlParameter("@departuretime", SqlDbType.NChar);
param5.Value = TextBox5.Text;
cmd.Parameters.Add(param5);
SqlParameter param6 = new SqlParameter("@stationtime", SqlDbType.NChar);
param6.Value = TextBox6.Text;
cmd.Parameters.Add(param6);
cn.Open();
try
{
int i = cmd.ExecuteNonQuery(); //变量i存放命令执行影响的记录行数
if (i > 0)
{
Label6.Text = "提示:" + i + "条记录插入成功";
}
}
catch (SqlException ex) //捕获Try后的程序段执行异常
{
Label6.Text = ex.Message; //报告出错的异常原因
}
cn.Close(); //关闭数据库连接
//调用自定义过程UpdateDataBaseAndRefreshGridView(),将更新回写数据库
//并且刷新GridView1和清空文本框
UpdateDataBaseAndRefreshGridView();
}
//点击“取消”按钮,清空文本框
protected void Button8_Click(object sender, EventArgs e)
{
TextBox1.Text = "";
TextBox2.Text = "";
TextBox3.Text = "";
TextBox4.Text = "";
TextBox5.Text = "";
TextBox6.Text = "";
}
//更新回写数据库,并且刷新GridView1和清空文本框
protected void UpdateDataBaseAndRefreshGridView()
{
//将更新后的ds数据集ds
da.Update(ds, "trainschedules");
//重新获取数据源,以便通过绑定刷新GridView1,以反映修改结果
ds.Clear();
cn.Open();
da.Fill(ds, "trainschedules");
cn.Close();
//为控件GridView1指定显示的数据源,将数据源绑定到GridView控件
GridView1.DataSource = ds.Tables["trainschedules"].DefaultView;
GridView1.DataBind();
TextBox1.Text = "";
TextBox2.Text = "";
TextBox3.Text = "";
TextBox4.Text = "";
TextBox5.Text = "";
TextBox6.Text = "";
}
三,数据库存储过程建立
在数据库的”可编程性“中的”存储过程“鼠标右击新建。
1.增加
USE [train] //数据库名为train
GO
/****** Object: StoredProcedure [dbo].[proc_AddtrainRecord] Script Date: 2019/1/20 17:05:15 ******/
SET ANSI_NULLS ON
GO
SET QUOTED_IDENTIFIER ON
GO
ALTER PROCEDURE [dbo].[proc_AddtrainRecord] //ALTER改成CREATE 执行后会变成ALTER
@trainnumber char(10),
@number int,
@station char(10),
@arrivaltime nchar(10),
@departuretime nchar(10),
@stationtime nchar(10)
AS
BEGIN
insert into seek_train //表名为seek_train values(@trainnumber,@number,@station,@arrivaltime,@departuretime,@stationtime)
END
2.删除
USE [train]
GO
/****** Object: StoredProcedure [dbo].[proc_Deletetrainschedules] Script Date: 2019/1/20 17:10:37 ******/
SET ANSI_NULLS ON
GO
SET QUOTED_IDENTIFIER ON
GO
ALTER PROCEDURE [dbo].[proc_Deletetrainschedules]
@trainnumber char(10) ,
@number int,
@station char(10),
@arrivaltime nchar(10),
@departuretime nchar(10),
@stationtime nchar(10)
AS
BEGIN
delete from seek_train where trainnumber=@trainnumber and number=@number
END
3.更新
USE [train]
GO
/****** Object: StoredProcedure [dbo].[proc_Updatetrainschedules] Script Date: 2019/1/20 17:11:46 ******/
SET ANSI_NULLS ON
GO
SET QUOTED_IDENTIFIER ON
GO
ALTER PROCEDURE [dbo].[proc_Updatetrainschedules]
@trainnumber char(10),
@number int,
@station char(10),
@arrivaltime nchar(10),
@departuretime nchar(10),
@stationtime nchar(10)
AS
UPDATE seek_train
set trainnumber=@trainnumber,number=@number,station=@station,arrivaltime=@arrivaltime,departuretime=@departuretime,stationtime=@stationtime
where trainnumber=@trainnumber and number=@number