您的位置:首页 > 编程语言 > VB

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

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

             在看视频的过程中,用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 UserName=@UserName AND Password=@Password";
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 UserName=@UserName"

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.Close(),关闭数据库连接。这里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!

             

             
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签:  c# VB.NET 三层结构