关于如何连接数据库 上一篇博客有讲点击跳转
在说增删改查之前,我们先了解下他们的区别
- 从原理操作上来讲,
select
操作需要回传查询到的数据,而另外三个操作只需要回传是否成功就行了 - 但是从实际业务逻辑来讲,我们
insert
插入数据时,很多时候为了保证关键数据的唯一性,我们需要借助select
先查询,再插入。而update
delete
一般用来管理数据,而很多时候需要先将数据查出来显示给用户,然后才执行管理操作,所以也需要select
配合。 - 所以,
select
操作是使用相对较频繁的操作。而不同场景下,也有不同的用法,如登陆是,我们只需要在后台查询匹配成功即可,但是若教学管理系统查询成绩的时候,我们则需要把查询的数据显示出来,所以,如何显示数据也是查
的重要部分
查 select (登陆&查询新闻)
登陆的业务逻辑: 将输入的登陆信息与数据库信息查找匹配,返回结果,成功则跳转登陆,否则弹窗报错。
protected void Button1_Click(object sender, EventArgs e)
{
string username= ;//赋值为前端输入的用户名
string password= ;//赋值为前端输入的密码
//存下sql语句
string sql="select *from tbuser where username='"+username+"' and password='"+password+"'";
//打开并连接数据库
SqlCommand cmd=new SqlCommand();
//传入sql语句 这个DB是刚才创建的连接数据库的类名 comd是他里面的准备执行的方法名
cmd=DB.comd(sql);
//从数据库中读取数据
SqlDataReader sdr=cmd.ExecuteReader();
//判断是否读到数据
if(sdr.Read())
{
//输出查询到的数据 sdr[""]里面写的是数据库中表里的字段名称
Response.Write(sdr["username"].ToString());
//Response.Redirect("index.aspx");//页面重定向 (跳转页面)
}
else
{
Response.Write("<script>alert('用户名或密码错误')</script>");
}
}
查询数据业务逻辑 :我们在页面上做一个入口(按钮或者超连接),当用户点击后,我们后台执行查询,并将查询到的结果在此页面(或跳转页面)展示给用户
例如:查询新闻我们做一个main页面,此页面会给用户显示tbnews表中的数据
protected void Page_Load(object sender, EventArgs e)
{
string sql="select *from tbnews";
SqlCommand cmd=new SqlCommand();
cmd=DB.comd(sql);
SqlDataReader sdr=cmd.ExecuteReader();
Response.Write("<table>");
//读取数据 直到结束 以表格形式输出
while(sdr.Read())
{
Response.Write("<tr><td>");
Response.Write(sdr["title"]);//[]内为数据库字段名称
Response.Write("</td><td>");
Response.Write(sdr["content"]);//[]内为数据库字段名称
Response.Write("</td></tr>");
}
Response.Write("</table>");
}
增 insert (注册)
注册业务逻辑填写注册信息,验证信息合法(前端验证),用户名唯一(后端验证),将信息插入数据库
protected void Button1_Click(object sender, EventArgs e)
{
string username= usernameTextBox.Text ;
string password= passwordTextBox.Text ;
string tel = telTextBox.Text;
SqlCommand cmd = new SqlCommand();//打开数据库
if (check(username, cmd))
{
string sql = "insert into tbuser(username,password,phone) values('" + username + "','" + password + "','" + tel + "')";
cmd = DB.comd(sql);
int i=cmd.ExecuteNonQuery();//读取数据库受影响行数
if(i>0) Response.Write("<script>alert('注册成功')</script>");
else Response.Write("<script>alert('注册失败')</script>");
}
else
{
Response.Write("<script>alert('用户名已存在')</script>");
}
}
//查询用户名是否已经存在
protected bool check(string u,SqlCommand cmd)
{
string sql="select *from tbuser where username='"+u+"'";
cmd = DB.comd(sql);
SqlDataReader sdr = cmd.ExecuteReader();
if (sdr.Read())
{
return false;
}
else
{
return true;
}
}
删除和更新
删除和更新之前我们都需要先将数据展示给用户,并且给用户提供操作按钮(或超链接)
main页面
protected void Page_Load(object sender, EventArgs e)
{
string sql="select *from tbnews";
SqlCommand cmd=new SqlCommand();
cmd=DB.comd(sql);
SqlDataReader sdr=cmd.ExecuteReader();
Response.Write("<table>");
Response.Write("<th>标题</th><th>内容</th><th>操作</th>");
while(sdr.Read())
{
Response.Write("<tr><td>");
Response.Write(sdr["title"]);
Response.Write("</td><td>");
Response.Write(sdr["content"]);
Response.Write("</td><td>");
Response.Write("<a href='delete.aspx?id="+sdr["id"]+"'>删除</a>");//数据库中id字段是int型 故不需要加单引号
Response.Write("</td><td>");
Response.Write("<a href='update.aspx?id="+sdr["id"]+"'>更新</a>");//数据库中id字段是int型 故不需要加单引号
Response.Write("</td></tr>");
}
Response.Write("</table>");
}
delete.aspx
当用户点击后删除
链接后,我们跳转到delete页面,并且传入要删除数据的关键字段值,在delete页面执行删除操作,成功后跳转回去。
protected void Page_Load(object sender, EventArgs e)
{
string id = Request.QueryString["id"];//从url中获取id字段值 此处的'id'是删除超链接中设定的名字
string sql = "delete from tbnews where id="+id;//id是我们定义的字符串 直接拼接就好了
SqlCommand cmd = DB.comd(sql);
int i = cmd.ExecuteNonQuery();
if (i > 0)
{
Response.Redirect("main.aspx");//删除成功 跳转回去
}
else
{
Response.Write("<script>alert('删除失败')</script>");
}
}
update.aspx
业务逻辑当用户点击更新
链接后,我们跳转到update页面,并且传入要更新数据的关键字段值,在update页面,我们通过传入的关键字段值,在数据库中查询出所要更新的信息,放入TextBox
控件内,让用户修改,并且在下方提供更新按钮,修改完成后,点击按钮,我们获取当前页面更新后的数据值,通过关键字段的值,在数据库执行update
操作,更新成功,跳转回去,显示更新后数据。
update页面我们大概设计如下图 (ps:内容可以用TextBox,然后设置TextMode为MultiLine 多行)
注意: 我们用的是更新新闻的例子,业务场景不同,操作也不同,若执行更新用户名操作,我们还需检验更新的用户名是否唯一。
update动态代码架构
动态代码
public partial class update : System.Web.UI.Page
{
string id;//string定义在外边 Page_Load和Button1_Click都可以用
protected void Page_Load(object sender, EventArgs e)
{
id = Request.QueryString["id"];//从url中获取id字段值 此处的'id'是删除超链接中设定的名字
if (!IsPostBack) //页面首次加载
{
string sql = "select *from tbnews where id=" + id;
SqlCommand cmd = new SqlCommand();
SqlCommand cmd = DB.comd(sql);
SqlDataReader sdr = cmd.ExecuteReader();
if (sdr.Read())
{
TextBox1.Text = sdr["title"].ToString();//显示新闻标题
TextBox2.Text = sdr["content"].ToString();//显示新闻内容
}
}
//若非首次加载 说明点击了更新按钮 此时不能重置TextBox
}
protected void Button1_Click(object sender, EventArgs e)
{
string title = TextBox1.Text.Trim();//去除空格
string content = TextBox2.Text.Trim();
string sql="update tbnews set title='"+title+"',content='"+content+"' where id="+id;
SqlCommand cmd = DB.comd(sql);
int i = cmd.ExecuteNonQuery();
if (i > 0)
{
Response.Redirect("main.aspx");//更新成功 跳转回去
}
else
{
Response.Write("<script>alert('更新失败')</script>");
}
}
}