文章目录
零、友情链接
一、常用属性及说明
在使用connection
对象链接到数据库之后,就可以使用Command对象
对数据库进行增删改查了,操作实现的方式使用的是SQL语句
。Command对象可以分为四个不同的执行命令对象,分别是:SqlCommand
、OledeCommand
、OdbcCommd
、OracleCommand
,这几个对象的常用的属性以及方法几乎相同,但是最配套asp.net使用的是SqlCommand
,下面是SqlCommand
对象常用属性以及说明:
属性 | 说明 |
---|---|
CommandType | 获取或设置SqlCommand 对象要执行命令的类型 |
CommandText | 获取或设置要对数据源执行的SQL语句 、存储过程或表名 |
CommandTimeOut | 获取或设置在终止对执行命令的尝试并生成错误之前的等待时间 |
Connection | 获取或设置SqlCommand 对象所使用的Connection 对象的名称 |
Parameters | 获取SqlCommand 对象需要使用的参数集合 |
常用方法:
方法 | 说明 |
---|---|
ExecuteNonQuery | 对连接执行的SQL 语句并返回受执行的行数 |
ExecuteReader | 对连接执行SQL 语句并返回保持连接的数据读取器对象SqlDataReader |
ExecuteScalar | 执行查询,并返回查询结果集中的第1行的第1列的值 |
二、查询数据指令
通过查询语句或调用存储过程将数据库中的数据检索出来,通过指定的接收方法来得到这些数据。
查询的结果可能是一行一列,也可能是多行多列
例子:查询数据库中的数据
先来看一下效果,这个图片是从数据库中读取出来然后利用Response.write
写在页面上的:
ok,开始写代码,首先打开安装好的SQL Server 2014 Management Studio
,连接好之后,点击新建查询
,输入以下SQL语句
,创建一个表:
Create Database School
go
use School
go
create table Student
(
ID int primary key identity(1,1),
Name varchar(60),
Sex char(2),
Age int,
Class varchar(60)
)
写完这些之后,表就创建好了,接着手动输入一些数据:
然后打开VS,创建一个WEB窗体
,再新建一个Default.aspx
作为首页,打开Default.aspx,cs
开始写代码:
首先引用需要使用的命名空间:
using System.Data;
using System.Data.SqlClient;
using System.Data.Text;
页面加载Load方法
:
protected void Page_Load(object sender, EventArgs e)
{
string Result = GetSqlData();
Response.Write(Result);
}
定义GetSqlData
方法,实现SqlCommand
对象执行SQL
查询命令并返回数据:
private string GetSqlData()
{
StringBuilder res = new StringBuilder();
res.Append("<table>"); //手动创建表格列表并将字符串追加到StringBuilder类
//定义表格头部
res.Append("<tr><th>序号</th><th>姓名</th><th>性别</th><th>年龄</th><th>班级</th></tr>");
//使用using指令创建SqlConnection对象
using(SqlConnection conn = new SqlConnection("Server=DESKTOP-9FCSCD4;DataBase=School;Trusted_Connection=SSPI"))
{
conn.Open();
SqlCommand comm = new SqlCommand(); //实例化一个执行数据库操作的命令类
comm.CommandType = CommandType.Text; //指定要执行数据库操作的的命令是SQL语句
comm.CommandText = "select * from Student"; //要查询的SQL语句
comm.Connection = conn; //指定需要的数据库连接类
//执行数据库查询并返回SqlDataReader类型数据接收器
using(SqlDataReader DataReader = comm.ExecuteReader())
{
//使用数据接收器执行数据行的循环读取
while (DataReader.Read())
{
int ID = (int)DataReader["ID"];
string Name = (string)DataReader["Name"];
string Sex = (string)DataReader["Sex"];
int Age = (int)DataReader["Age"];
string Class = (string)DataReader["Class"];
//开始连接
res.Append("<tr><td>" + ID + "</td>");
res.Append("<td>" + Name + "</td>");
res.Append("<td>" + Sex + "</td>");
res.Append("<td>" + Age + "</td>");
res.Append("<td>" + Class + "</td></tr>");
}
}
conn.Dispose(); //数据库释放
}
res.Append("</table>");
return res.ToString();
}
在以上代码中,利用了StringBuilder
的Append
方法,在定义的串中,加入了HTML
元素,直接在页面中生成表格,在打开页面之后,检查一下页面元素:
可以很清楚的看到,StringBuilder已经帮我们写入表格的元素了。,最后用CSS
代码对表格进行一下美化:
<style type="text/css">
/*设置表格、表头、单元格的边框及颜色和样式*/
table,table th,table td{
border:1px;
border-style:solid;
border-color:#22bbad;
}
/*重写表头的边框颜色*/
table th{
border-color:white;
}
/*将表格中的边框合并*/
table{
border-collapse:collapse;
}
/*设置表头的大小及颜色*/
table th{
width:150px;
height:30px;
text-align:center;
background-color:#22bbad;
color:white;
}
/*设置单元格的高度与文本位置*/
table td{
height:30px;
text-align:center;
}
</style>
大功告成!!!
暂时不要删除这个代码!这个代码贯穿整个博客!!
三、添加数据指令
同样使用SqlCommand
对象进行添加,添加记录不需要考虑选择用哪种方式接收。
使用ExecuteNonQuery
方法执行插入数据时,所接收的结果也是被影响的行数。
下面是执行插入的语句:
comm.CommandText = "insert into Student([Name],[Sex],[Age],[Class]) values('" + Name + "','" + Sex + "','" + Age + "','" + Class +"')";
例子:基于上一个例子,进行添加数据操作
首先用表单设计好呈现在网页上的添加
效果:
<form id="form1" runat="server">
<div>
</div>
<div>
<br /><hr />
<table class="addtab" align="center">
<tr><td width="60">姓名:</td>
<td>
<asp:TextBox ID="Txt_Name" runat="server"></asp:TextBox></td>
</tr>
<tr><td>性别:</td>
<td>
<asp:DropDownList ID="DDL_Sex" runat="server">
<asp:ListItem Text="男" Value="男"></asp:ListItem>
<asp:ListItem Text="女" Value="女"></asp:ListItem>
</asp:DropDownList>
</td>
</tr>
<tr><td>年龄:</td>
<td><asp:TextBox ID="Txt_Age" runat="server"></asp:TextBox></td>
</tr>
<tr><td>班级</td>
<td>
<asp:TextBox ID="Txt_Class" runat="server"></asp:TextBox></td>
</tr>
<tr><td colspan="2">
<asp:Button ID="Btn_Add" runat="server" Text="添加" OnClick="Btn_Add_Click" /></td></tr>
</table>
</div>
</form>
设计出来是这样的:
紧接着,给添加Button按钮
加一个Click
事件:
protected void Btn_Add_Click(object sender, EventArgs e)
{
string Name = this.Txt_Name.Text.ToString().Trim();
string Sex = this.DDL_Sex.SelectedValue;
string Age = this.Txt_Age.Text.ToString().Trim();
string Class = this.Txt_Class.Text.ToString().Trim();
//这里为什么使用using,因为使用using可以自动释放新建的对象
using(SqlConnection conn = new SqlConnection("Server=DESKTOP-9FCSCD4;DataBase=School;Trusted_Connection=SSPI"))
{
conn.Open();
SqlCommand comm = new SqlCommand(); //实例化执行数据库操作的命令类
comm.CommandType = CommandType.Text; //指定发送到数据库的执行命令为Sql语句
//定义插入数据库的SQL语句
comm.CommandText = "insert into Student([Name],[Sex],[Age],[Class]) values ('" + Name + "','" + Sex + "','" + Age + "','" + Class + "')";
comm.Connection = conn; //指定SqlCommand类所需要的数据库连接类
int AddRows = comm.ExecuteNonQuery();
conn.Dispose();
if (AddRows > 0)
{
Response.Redirect("Default.aspx");
}
}
}
注意:sql语句中后面的 values 每项需要加
单引号 '
看一下效果:
这时候添加数据已经能成功,但是在实际运行的时候会产生多余的数据读取过程,并且在单击添加
按钮时发生了页面回发,所以需要添加IsPostBack
来验证回发:
if (!IsPostBack)
{
string Result = GetSqlData();
Response.Write(Result);
}
四、修改数据指令
修改数据指令的实现方式与插入数据相同,但编写的SQL语句
不同,同样,修改成功后SqlCommand
将会得到所影响的行数。
例子:实现数据的修改
先简单说一下这个例子的思路:
在原来的表单后面新增一个编辑列
,点击这个编辑
就会重定向到一个新建的EditData.aspx
页面,并且传送一个ID
参数。新建的EditData
页面只包含修改的内容,为了让之前表单里面的内容显示到新页的控件上,在EditData.aspx.cs
中定义一个GetData
方法绑定值,紧接着修改完控件上的值了再添加到数据库中,重定向到最开始的页面。
Default.aspx.cs
页面增加编辑单
列:
res.Append("<tr><th>序号</th><th>姓名</th><th>性别</th><th>年龄</th><th>班级</th><th>操作</th></tr>");
……省略,大部分和上面的相似
res.Append("<td><a href=\"EditData.aspx?ID=" + ID + "\">编辑</a></td></tr>");
EditData.aspx
页面新建一个像添加选项一样的表单,只是多了一个HiddenField
隐藏域存储传过来的ID
/*这句话在EditData.aspx 的 < / table>之下*/
<asp:HiddenField ID="EditID" runat="server" />
EditData.aspx.cs
中GetData
方法:
private void GetData(string ID)
{
using(SqlConnection conn = new SqlConnection("Server=DESKTOP-9FCSCD4;DataBase=School;Trusted_Connection=SSPI"))
{
conn.Open();
SqlCommand comm = new SqlCommand();
comm.CommandType = CommandType.Text;
//定义查询语句
comm.CommandText = "select Name,Sex,Age,Class from Student where ID=" + ID;
comm.Connection = conn;
using(SqlDataReader datareader = comm.ExecuteReader())
{
datareader.Read();
string Name = (string)datareader["Name"];
int Age = (int)datareader["Age"];
string Class = (string)datareader["Class"];
string Sex = (string)datareader["Sex"];
//绑定到控件上
this.Txt_Name.Text = Name;
this.Txt_Age.Text = Age.ToString();
this.Txt_Class.Text = Class;
foreach(ListItem item in this.DDL_Sex.Items)
{
if (item.Value == Sex)
{
item.Selected = true;
break;
}
}
}
comm.Dispose();
}
}
EditData.aspx.cs
中按钮的点击方法:
protected void Btn_Edit_Click(object sender, EventArgs e)
{
string ID = this.EditID.Value;
string Name = this.Txt_Name.Text.Trim();
string Age = this.Txt_Age.Text.Trim();
string Sex = this.DDL_Sex.SelectedValue;
string Class = this.Txt_Class.Text.Trim();
using(SqlConnection conn = new SqlConnection("Server=DESKTOP-9FCSCD4;DataBase=School;Trusted_Connection=SSPI"))
{
conn.Open();
SqlCommand comm = new SqlCommand();
comm.CommandType = CommandType.Text;
comm.CommandText = "update Student set Name='" + Name + "',Sex='" + Sex + "',Age='" + Age + "',Class='" + Class + "' where ID=" + ID;
comm.Connection = conn;
int AddRows = comm.ExecuteNonQuery();
if (AddRows > 0)
{
Response.Redirect("Default.aspx");
}
}
}
另外,在EditData.aspx.cs
的Page_Load
方法中,判断一下是否回发,并且把传过来的ID赋值给隐藏域,最后执行GetData
方法。
protected void Page_Load(object sender, EventArgs e)
{
if (!IsPostBack)
{
string ID = Request.QueryString["ID"];
//将值绑定到隐藏域控件上
this.EditID.Value = ID;
GetData(ID);
}
}
大功告成,效果如下:
五、删除数据指令
删除数据与前面的实现过程相同,编写一条删除SQL
语句即可通过SqlCommand
对象进行删除操作,当数据删除成功后同样会接收到所影响的行数。
例子:删除操作
同样的,在原有表单后面增加一个列名字是删除操作,只要点击这个删除就转向一个新页,删除完之后再重定向到起始页。
新页DeleteData.aspx.cs
中 Page_Load
代码:
string ID = Request.QueryString["ID"];
DelData(ID);
DeletData.aspx.cs
中的DelData
方法:
private void DelData(string ID)
{
using(SqlConnection conn = new SqlConnection("Server=DESKTOP-9FCSCD4;DataBase=School;Trusted_Connection=SSPI"))
{
conn.Open();
SqlCommand comm = new SqlCommand();
comm.CommandType = CommandType.Text;
comm.CommandText = "delete Student where ID=" + ID;
comm.Connection = conn;
int DelCount = comm.ExecuteNonQuery();
if (DelCount > 0)
{
Response.Redirect("Default.aspx");
}
comm.Dispose();
}
}
完成!