登录实例对比-C#和VB.NET实现三层

大家在阅读这篇文章之前可以先阅读另外一篇博文《三层结构》(请点击这里)。对其有最基本的认识。

在看视频的过程中,用C#实现了登录的实例,之后对其又转换为了VB.NET。实现功能是一样的,只是换汤不换药,换了一种表达方式而已。对比着来学习效果更佳。

对比一:实体层

     C#实现:

<span style="font-size:18px;">public class UserInfo
    {
        public int ID { get; set; }
        public string UserName { get; set; }
        public string Password { get; set; }
        public string Email { get; set; }
    }</span>

   VB.NET实现:

<span style="font-size:18px;">Public Class UserInfo
    Private _ID As Integer
    Public Property ID As Integer
        Get
            Return _ID
        End Get
        Set(value As Integer)
            _ID = value
        End Set
    End Property

    Private _UserName As String
    Public Property UserName As String
        Get
            Return _UserName
        End Get
        Set(value As String)
            _UserName = value
        End Set
    End Property

    Private _Password As String
    Public Property Password As String
        Get
            Return _Password
        End Get
        Set(value As String)
            _Password = value
        End Set
    End Property

    Private _Email As String
    Public Property Email As String
        Get
            Return _Email
        End Get
        Set(value As String)
            _Email = value
        End Set
    End Property
End Class</span>

    对比分析:都是为了封装数据,便于数据在三层中流转,很明显,C#比VB.NET的代码简单很多,但实现的功能却是相同的。有一个最大的区别非常显眼,C#每句结尾都有分号,而VB.NET没有。

对比二:DAL层

C#实现:

<span style="font-size:18px;">class DbUtil
    {
        public static string ConnString = @"Server=qiwei;Database=Login; User ID=sa; Password=130427";
    }</span>
<span style="font-size:18px;">public class UserDAO
    {
        public Login .Model .UserInfo  SelectUser(string userName, string password)
        {
            using(SqlConnection conn=new SqlConnection (DbUtil.ConnString ))
            {
                SqlCommand cmd = conn.CreateCommand();
                cmd.CommandText = @"SELECT ID,UserName, Password, Email
                                    FROM USERS WHERE [email protected] AND [email protected]";
                cmd.CommandType = CommandType.Text;
                cmd.Parameters.Add (new SqlParameter ("@UserName",userName ));
                cmd.Parameters .Add (new SqlParameter ("@Password",password ));

                conn.Open();
                SqlDataReader reader = cmd.ExecuteReader();

                Login.Model.UserInfo user = null;
                while (reader.Read())
                {
                    if (user == null)
                    {
                        user = new Login.Model.UserInfo();
                    }
                    user.ID =reader.GetInt32(0);
                    user.UserName = reader.GetString(1);
                    user.Password = reader.GetString(2); //not suggestion
                    if (!reader.IsDBNull(3))
                    {
                        user.Email = reader.GetString(3);
                    }
                }

                return user;
            }
        }
    }</span>

VB.NET实现:

<span style="font-size:18px;">Public Class UserDAO
    Public conn As New SqlConnection("server =localhost;database=Login;user=sa;password=130427")
    Dim sql As String = "select ID,UserName,Password,Email from Users where [email protected]"

    Public Function SelectUser(ByVal userName As String, ByVal password As String)
        Dim cmd As New SqlCommand(sql, conn)
        Dim reader As SqlDataReader
        Dim user1 As New LoginEntity.UserInfo()

        cmd.CommandText = sql
        cmd.CommandType = CommandType.Text

        cmd.Parameters.Add(New SqlParameter("@UserName", userName))
        cmd.Parameters.Add(New SqlParameter("@Password", password))

        conn.Open()
        reader = cmd.ExecuteReader

        While reader.Read()
            If user1 Is Nothing Then
                user1 = New LoginEntity.UserInfo()
            End If

            user1.ID = reader.GetInt32(0)
            user1.UserName = reader.GetString(1)
            user1.Password = reader.GetString(2)
            If Not reader.IsDBNull(3) Then
                user1.Email =reader .GetString (3)
            End If

        End While
        Return user1
    End Function
End Class</span>

对比分析:都是提供基本的数据访问,连接数据库,从数据库中查找数据,然后读数据,将数据传递到实体层。

C#中,先单独将连接数据类DbUtil放在一个类库,方便之后各类连接数据库调用,对今后若更换数据库提供方便。当然VB.NET同样可以实现。这里直接与数据库进行相连。

DAL层都需要引用实体层。用到数据库都需要添加引用,C#实现:

<span style="font-size:18px;">using System.Data;
using System.Data.SqlClient;</span>

VB.NET实现:

<span style="font-size:18px;">Imports System.Data
Imports System.Data.SqlClient</span>

如果仔细观察,C#中只有conn.Open(),打开数据库连接,而没有conn.Open(),关闭数据库连接。这里Using(){}函数体的使用是自动关闭的。

  对比三:BLL层

  C#实现:

<span style="font-size:18px;">public class LoginManager
    {
        public Login.Model.UserInfo UserLogin(string userName, string password)
        {

            Login.DAL.UserDAO uDao = new Login.DAL.UserDAO();
            Login.Model.UserInfo user = uDao.SelectUser(userName, password);

            if (user != null)  //login successfully
            {
                Login.DAL.ScoreDAO sDao = new Login.DAL.ScoreDAO();
                sDao.UpdateScore(userName, 10);
                return user;
            }
            else
            {
                throw new Exception("登录失败!");
            }
        }
    }</span>

VB.NET实现:

<span style="font-size:18px;">Public Class LoginMagnager
    Public Function UserLogin(ByVal userName As String, ByVal password As String)
        Dim uDAO As New LoginDAL.UserDAO
        Dim user1 As New LoginEntity.UserInfo

        user1 = uDAO.SelectUser(userName, password)
        If IsNothing(user1.UserName) Then
            Throw New Exception("登录失败")
        Else
            Return user1
        End If
    End Function
End Class</span>

对比分析:这里用VB.NET实现的时候没有加入积分的功能。两种代码的实现都是为了将DAL层的数据传递给实体层,然后进行逻辑判断。但代码的表现形式还是不一样的。

对比四:UI层

c#实现:

<span style="font-size:18px;">private void btnLogin_Click(object sender, EventArgs e)
        {
            string userName = txtUserName.Text.Trim();
            string password = txtPassword.Text;
            Login.BLL.LoginManager mgr = new Login.BLL.LoginManager();
            Login.Model .UserInfo user=mgr.UserLogin(userName, password);        

            MessageBox.Show("登录用户:" + user.UserName);
        }</span>

 VB.NET实现:

<span style="font-size:18px;">Private Sub btnLogin_Click(sender As Object, e As EventArgs) Handles btnLogin.Click
        Dim userName As String
        Dim password As String
        Dim mgr As New loginBLL.LoginMagnager
        Dim user As LoginEntity.UserInfo

        userName = txtUserName.Text
        password = txtPassword.Text
        user = mgr.UserLogin(userName, password)

        MessageBox.Show("登录成功!用户名:" + userName)
    End Sub</span>

对比分析:都是采集用户的输入信息,然后将BLL层的数据传递给实体层。从这里可以看出最大的不同就是,C#边定义边使用,而VB.NET每个出现的数据都必须先定义,然后才能使用。

 总结:

通过学习这个简单的登录实例,用C#和VB.NET去实现三层。首先,明确掌握了三层结构的应用。其次,又一次感受到了计算机语言的相同性。只有扎实地掌握了一门语言,再学习其它语言那就是照葫芦画瓢的事儿了,so easy!

时间: 2024-08-10 21:27:37

登录实例对比-C#和VB.NET实现三层的相关文章

三层登录实例VB.NET版具体解释---理论加实战篇

层,百度百科这样解释,首先-重叠起来的东西:重叠起来的东西中的一部分:层次|表层|大气层.其次-重叠.反复:层峦叠嶂|层出不穷.最后-量词,用于能够分出层次的事物.女孩儿强烈的第六感,三层中的层一定是第三个意思,三层架构(3-tier architecture) 通常意义上的三层架构就是将整个业务应用划分为:表现层(UI).业务逻辑层(BLL).数据訪问层(DAL).区分层次的目的即为了"高内聚,低耦合"的思想. 接下来,以登录为例.结合分层,总结一下在这个小样例中的所思所想.首先,来

Struts2自定义拦截器Interceptor以及拦截器登录实例

1.在Struts2自定义拦截器有三种方式: -->实现Interceptor接口 public class QLInterceptorAction implements Interceptor{ private static final long serialVersionUID = 1L; public void destroy() { } public void init() {} public String intercept(ActionInvocation arg0) throws

SSO 基于CAS实现单点登录 实例解析(二)

本文目录: 概述 演示环境 部署CAS-Server相关的Tomcat 部署CAS-Client相关的Tomcat 测试验证SSO 第一: 本demo在一个机器上实现(三个虚拟主机),来看SSO单点登录实例(我们可以布到多个机器上使用都是同一个道理的),一个服务器主机,和两个客户端虚拟主机 <span style="font-size:18px;"># 127.0.0.1 localhost # ::1 localhost 127.0.0.1 localhost 127.0

JSP+servlet简单登录实例

一个简单的jsp+servlet实例,实现简单的登录 转载▼ http://blog.sina.com.cn/s/blog_5c5bc9070100z7wb.html     开发环境myeclipse+tomcat6 1.先创建web project,项目名为RegisterSystem, 2.在WebRoot 目录下创建login.jsp文件,只需修改body中的内容,如下所示: <body>     <form action="login">     us

Jsp应用EL和JSTL实例对比。

普通方式: register.jsp 1 <%@ page language="java" import="java.util.*" pageEncoding="UTF-8" contentType="text/html; charset=utf-8"%> 2 <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">

SSO之CAS单点登录实例演示

一.概述 此文的目的就是为了帮助初步接触SSO和CAS 的人员提供一个入门指南,一步一步演示如何实现基于CAS的单点登录. CAS的官网:http://www.jasig.org/cas 二.演示环境 本文演示过程在同一个机器上的(也可以在三台实体机器或者三个的虚拟机上),环境如下: windows7 64位,主机名称:michael-pc JDK 1.6.0_18 Tomcat 6.0.29 CAS-server-3.4.11.CAS-client-3.2.1 根据演示需求, 用修改hosts

以登录实例简介Servlet使用

1.简介 Java Servlet 是运行在 Web 服务器或应用服务器上的程序,使用 Servlet,您可以收集来自网页表单的用户输入,呈现来自数据库或者其他源的记录,还可以动态创建网页. 作用:Web 浏览器的请求和 HTTP 服务器上的数据库或应用程序之间的中间层. 简单说就是接受客户端传递的输入然后进行处理(链接数据库等)然后在将相应的结果(html等)在返回给客户端显示相当于MWC中的Ccontroller层. Servlet程序的基本运行过程时序图:下面通过一个登陆实例来简单说明下.

java之登录实例(面向对象,静态,scanner等)

分析:抽取用户类,提取出用户的属性,方法 用户类测试:判断登陆,注册等 User : 用户类    package cn.my.login; import java.util.Scanner; /** *  分析:用户的基本信息 *  用户名,密码,邮箱,电话,地址 *  登录,注册方法 * */public class User { private String username; private String password; private String email; private S

Struts1中实现登录实例

最近发现MDT推出去的系统的有不同问题,其问题就不说了,主要是策略权限被域继承了.比如我们手动安装的很多东东都是未配置壮态,推的就默认为安全壮态了,今天细找了一下,原来把这个关了就可以了. Struts1中实现登录实例