.net链接数据库SQL实现网站注册功能(详解+代码)

版权声明:本文为博主原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。
本文链接: https://blog.csdn.net/qq_43735840/article/details/102633289

.net链接数据库SQL实现网站注册功能

(接下来是博主观点和自我理解,不喜勿喷)
先图和代码,图下文字是对上面代码的讲解

1.软件要求,Visual Server 2017与SQL server(Oracle)
注意操作细节,可能部分软件链接或是插件软件版本可能报错,自行百度

2.首先打开SQL建立表
在这里,我们选择windows身份登录,在左侧点击数据库->系统数据库->master(系统自带的表)此时右键新建表,创建username与password作为表列名,username应该添加unique作为唯一用户名注册与登录,密码password设置not null不为空,选中全部运行,此时会看见建立表成功

create table letter
(
	Username char (20) unique,
	Password char (20) not null
)

3此时打开vs进行网站建立
文件->新建项目->web->.net core->选择web应用程序建立,在这里我名字命名为WebApplication1,之后选择web应用程序(模型视图控制器)并取消HTTPS配置的勾选,此时系统自带的空白网站建立完毕了
4建立基础登录注册页面
此时在右边解决方案资源管理器下的wwwroot中右键->添加->新建项目->HTML页,命名为Login为登录网页,后缀名html不变,首先我们在两个title之间加入登录,这是网站标题,此时我们开始写登录窗口,最基本的两个登录框,及登录名和密码以及我们所需要的登录和注册按钮

<!DOCTYPE html>
<html>
<head>
    <meta charset="utf-8" />
    <title>登录</title>
</head>
<body>
    <form action="/Home/Login">
        登录名:<input type="text" name="username"><br />
        密码:<input type="password" name="password"><br />
        <input type="submit" value="登录" >
        <input type="button" value="注册" onclick="javascrtpt:window.location.href='resume.html'"/>
    </form>
</body>
</html>

这里的两个input就如C语言的scanf输入,然后type='text’如同定义char ,然后后面的name =“username”如同char username[]一样,所以这句话就是输入一个text及字符串文本,赋值给usernname字符串,下面的password也是一样,之后的submit就如同提交按钮,点击之后把这个网页的数据提交到前面的from action=“网站/地址”去进一步执行(这里的action=所加的地址就是Controllers文件下HomeController的主控制里所对应的pubic函数) ,在一个action的方块里面只能拥有一个submit按钮,如果存在多个则全部会跳转到action的网址去,无法做到不同按钮前面不同地址,此时就需要button按钮来实现,value则是此按钮在网页上显示的文字,onclick则是点击之后跳转的页面(这里的resume.html则是wwwroot下新建的注册页面)
此时我们的登录界面建立完毕了,由于登录界面里面需要跳转到/Home/Login和resume.html的网址,于是我们接下来先构造resume的注册网址,原理的上面的登录一样

<!DOCTYPE html>
<html>
<head>
    <meta charset="utf-8" />
    <title>注册</title>
</head>
<body>
    <form action="/Home/resume">
        用户名:<input type="text" name="username"><br />
        密码:<input type="password" name="password"><br />
        确认密码:<input type="password" name="password1"><br />
        <input type="submit" value="注册" />
        <input type="button" value="登录" onclick="javascrtpt:window.location.href='Login.html'" />
    </form>
</body>
</html>

在这里注册页面也完成了,在注册界面我设置了个登录按钮以便放回登录页面,此时的注册页面也OK了,接下来我们开始写Home控制器下的Login与resume函数
4链接数据库SQL
此时,我们因为网站的注册系统需要链接到数据库,此时要先保证你前面的数据库为开启状态并保持链接登录,此时选择工具->Nuget->管理解决方案选择安装如图插件,并运用到你当前的运行窗口代码下
在这里插入图片描述
此时选择工具->链接到数据库,服务器名为127.0.0.1,使用windows验证,选择数据库名称master,这就是刚刚SQL建立表的路径,点击链接,此时左边的服务器资源管理器就会显示链接成功,
在这里插入图片描述

5,Home控制器编辑
此时我们进入Home控制器之下,开始写Login与resume

using System.Diagnostics;
using Microsoft.AspNetCore.Mvc;
using WebApplication1.Models;
using System.Data.SqlClient;
using System.Data.Sql;
using System.Data.SqlTypes;
using System;

首先,因为我们使用插件链接SQL,随意我们头文件要添加相关的函数

string username = Request.Query["username"].ToString();
string password = Request.Query["password"].ToString();`

这两个代码就是接收刚刚从Login页面submit提交的两个字符串`

SqlConnection con = null;`

这一串代码就是我们建立的数据库链接,我们把它命名为con数据库

string conStr = "Data Source =.; Initial Catalog = master; Integrated Security = True";
con = new SqlConnection(conStr);

这里我们定义一个字符串,这个字符串就是我们利用windows身份用vs运行SQL,这里的Date Source=.这个小.就是默认此电脑,Initial Catalog = master这个就是我们刚刚系统自带的数据库表名称,Integrated Security = True这个就是默认系统用户名正确,然后con建立打开SQL之后的新连接

string sql = "select *from letter where Username='"+username+"' and Password='"+password+"'";
SqlCommand cmd = new SqlCommand(sql, con);

很明显,这里的sql就是我们的select查询操作,我们首先要寻找数据库里是否存在我们的用户名和密码,如果有就登录,没有就返回登录页面

int flag = 0;
SqlDataReader reader = cmd.ExecuteReader();            
while (reader.Read())
{
      flag= 1;
}

这里我们开一个flag标记去标记是否存在我们的这个信息,如果有就标记=1

if (flag==1)
{
    Response.Redirect("http://localhost:5000/sy.htm");
}else
{
    Response.Redirect("http://localhost:5000/Login.html");
}
con.Close();

这里如果flag找到了,我们就直接登录sy.htm简历页面(word建立转htm,这就不说了吧),如果没有就跳回登录页面,最后con.Close数据库链接关闭,这里的Response.Redirect("")里就是你要跳转的页面;

接下来我们建立resume的函数和上面的操作基本一样

string username = Request.Query["username"].ToString();
string password1 = Request.Query["password"].ToString();
string password2 = Request.Query["password1"].ToString();
if (password1 == password2)
{
}else
{
	Response.Redirect("http://localhost:5000/resumefail.html");
}

这里我们判断一下两次输入的密码是否一样,如果不同则跳转失败的页面

SqlConnection con = null;
string conStr = "Data Source =.; Initial Catalog = master; Integrated Security = True";
con = new SqlConnection(conStr);
con.Open();
string Sql = "select *from letter where Username='" + username + "'";
SqlCommand cmd = new SqlCommand(Sql, con);
int flag = 0;
SqlDataReader reader = cmd.ExecuteReader();
while (reader.Read())
{
    flag = 1;
}
con.Close();

接下来和上面一样,我们去寻找注册的用户名是否已经存在,记住,使用reader函数的时候,使用完之后记得及时con.Colse,不然很容易报错

conStr = "Data Source =.; Initial Catalog = master; Integrated Security = True";
con = new SqlConnection(conStr);
con.Open();
if (flag==1)
{
      Response.Redirect("http://localhost:5000/resumefail.html");
}else
{
}

此时我们再次操作数据库,如果已经存在,我们就返回失败页面,如果成功,我们接下里进入注册的操作

string sql = "insert into letter values('" + username + "','" + password1 + "')";
cmd = new SqlCommand(sql, con);
int result = cmd.ExecuteNonQuery();
if (result == 1)
{
      Response.Redirect("http://localhost:5000/Loginsuccess.html");
}else
{
      Response.Redirect("http://localhost:5000/resumefail.html");
}

这里我们进行插入操作,如果插入成功,result会等于插入成功的行数,插入成功后进入成功界面,否则是失败,就这样,Home控制器的主要登录和注册函数就写完了

最后是Home控制器的整体代码如下

using System.Diagnostics;
using Microsoft.AspNetCore.Mvc;
using WebApplication1.Models;
using System.Data.SqlClient;
using System.Data.Sql;
using System.Data.SqlTypes;
using System;

namespace WebApplication1.Controllers
{
    public class HomeController : Controller
    {

        public void Login()
        {
            string username = Request.Query["username"].ToString();
            string password = Request.Query["password"].ToString();
            SqlConnection con = null;
            string conStr = "Data Source =.; Initial Catalog = master; Integrated Security = True";
            con = new SqlConnection(conStr);
            con.Open();
            string sql = "select *from letter where Username='"+username+"' and Password='"+password+"'";
            SqlCommand cmd = new SqlCommand(sql, con);
            int flag = 0;
            SqlDataReader reader = cmd.ExecuteReader();
            while (reader.Read())
            {
                flag= 1;
            }
            if (flag==1)
            {
                Response.Redirect("http://localhost:5000/sy.htm");
            }
            else
            {
                Response.Redirect("http://localhost:5000/Login.html");
            }
            con.Close();


        }
        public void resume()
        {
            string username = Request.Query["username"].ToString();
            string password1 = Request.Query["password"].ToString();
            string password2 = Request.Query["password1"].ToString();
            if (password1 == password2)
            {
                SqlConnection con = null;
                string conStr = "Data Source =.; Initial Catalog = master; Integrated Security = True";
                con = new SqlConnection(conStr);
                con.Open();
                string Sql = "select *from letter where Username='" + username + "'";
                SqlCommand cmd = new SqlCommand(Sql, con);
                int flag = 0;
                SqlDataReader reader = cmd.ExecuteReader();
                while (reader.Read())
                {
                    flag = 1;
                }
                con.Close();
                conStr = "Data Source =.; Initial Catalog = master; Integrated Security = True";
                con = new SqlConnection(conStr);
                con.Open();
                if (flag==1)
                {
                    Response.Redirect("http://localhost:5000/resumefail.html");
                }else
                {
                    string sql = "insert into letter values('" + username + "','" + password1 + "')";
                    cmd = new SqlCommand(sql, con);
                    int result = cmd.ExecuteNonQuery();
                    if (result == 1)
                    {
                        Response.Redirect("http://localhost:5000/Loginsuccess.html");
                    }
                    else
                    {
                        Response.Redirect("http://localhost:5000/resumefail.html");
                    }
                }
                
                con.Close();
            }else
            {
                Response.Redirect("http://localhost:5000/resumefail.html");
            }
               
        }
            public IActionResult Index()
           {
                   return View();
            }

        public IActionResult About()
        {
            ViewData["Message"] = "Your application description page.";

            return View();
        }

        public IActionResult Contact()
        {
            ViewData["Message"] = "Your contact page.";

            return View();
        }

        public IActionResult Privacy()
        {
            return View();
        }

        [ResponseCache(Duration = 0, Location = ResponseCacheLocation.None, NoStore = true)]
        public IActionResult Error()
        {
            return View(new ErrorViewModel { RequestId = Activity.Current?.Id ?? HttpContext.TraceIdentifier });
        }
    }
}

6成功和失败页面
道理和前面的页面一样,就不一一讲解了,自己理解下咯
这是resumefail

<!DOCTYPE html>
<html>
<head>
    <meta charset="utf-8" />
    <title>失败</title>
</head>
<body>
    密码不同或用户名已存在
    <form action="/Home/resume">
        <input type="submit" value="注册" />
        <input type="button" value="登录" onclick="javascrtpt:window.location.href='Login.html'" />
    </form>
</body>
</html>

这是Loginsuccess

<!DOCTYPE html>
<html>
<head>
    <meta charset="utf-8" />
    <title>注册成功</title>
</head>
<body>
    注册成功;
    <form action="/Home/Login">
        <input type="submit" value="登录">
    </form>

</body>
</html>

7初始页面设置
右边栏寻找startup,最下面更改sction=默认页面

routes.MapRoute(
name: "default",
template: "{controller=Home}/{action=Login}/{id?}");

就这样我们大功告成了,我们来看一下运行结果

一个简约的登陆页面,一开始数据库为空,我们点击注册
在这里插入图片描述
在这里插入图片描述
这里提示注册成功,我们快去数据库看看吧
在这里插入图片描述
终于进来了,好感动,快去登录试试
在这里插入图片描述
此时我们的超简约简历出来啦

8总结,百度是个好东西,但是建议手搓代码,老是复制粘贴没有什么好处,自己百度知识点,如何页面显示文字,如何设置按钮,如何跳转等等,虽然很零散,但是学的到很多东西

猜你喜欢

转载自blog.csdn.net/qq_43735840/article/details/102633289