三层之必懂常识

前言:

最近刚刚敲了三层的代码,里面的代码有部分因为小编才疏学浅,故而未曾与之相识。今小编特意总结了一下这些简单的代码,给大家提供一个温习旧知识点的好机会。如有纰漏,敬请斧正。

正文:

using System.Data.SqlClient;//引用命名空间

Using System.Data.SqlClient 意为引用名称为System.Data.SqlClient 的命名空间。

using是C#语言中定义的一个访问,将在此范围之外释放一个或多个对象。

命名空间是用来组织和重用代码的。命名空间是唯一标识的名称,在不同的命名空间下,类名可以相同。

System.Data.SqlClient 这一命名空间下包含很多类,在三层中,我们会使用到的类有以下几种:

SqlConnection-----------表示到SQL sever数据库的连接

SqlCommand------------表示要对SQL sever数据库执行的一个Transact-SQL语句或存储过程。

SqlDataReader--------提供一种从SQL sever数据库中读取只进的形流方式(这是一种读取单向只读数据的最快方法)。

SqlParameter----------表示SqlCommand的参数,或者其与DataSet列的映射。

namespace Login.DAL
{
    public class ScoreDAO
    {
        public void UpdateScore(string userName, int value)
        {
            using (SqlConnection conn = new SqlConnection(DbUtil.ConnString))
            {
                SqlCommand cmd = conn.CreateCommand();
                cmd.CommandText = @"INSERT INTO SCORES (UserName, Score) Values(@UserName,@Score)";
                cmd.Parameters.Add(new SqlParameter("@UserName", userName));
                cmd.Parameters.Add(new SqlParameter("@Score", value));

                conn.Open();
                cmd.ExecuteNonQuery();

            }
        }
    }
}

防SQL注入方法

参数化SQL是指在设计与数据库链接并访问数据时,在需要填入数值或数据的地方,使用参数(Parameter)来给值,用@来表示参数。

在使用参数化查询的情况下,数据库服务器不会将参数内容视为SQL指令处理,而仅仅当做一个值进行处理,所以就可以防止SQL注入。

public void UpdateScore(string userName, int value)
            //写一个增加积分的方法,从B层获取数据
        {
            using (SqlConnection conn = new SqlConnection(DbUtil.ConnString))
            {
                SqlCommand cmd = conn.CreateCommand();
                cmd.CommandText = @"INSERT INTO SCORES (UserName, Score) Values(@UserName,@Score)";
                cmd.Parameters.Add(new SqlParameter("@UserName", userName));
                cmd.Parameters.Add(new SqlParameter("@Score", value));

                conn.Open();
                cmd.ExecuteNonQuery();

            }
        }

“ @ ” 的作用

① 忽略转义字符

eg:

//使用@前
string fileName = "D:\\文本文件\\text.txt";

//使用@后
string fileName = @"D:\文本文件\text.txt";

② 让字符串跨行

eg:

//使用@前
cmd.CommandText = "SELECT ID,UserName,Password,Email"
                  + "FROM USERS WHERE UserName=@UserName" 
                  + "AND Password=@Password"; 


//使用@后
cmd.CommandText = @"SELECT ID,UserName,Password,Email
                   FROM USERS WHERE UserName=@UserName
                   AND Password=@Password"; 

③ 在标识符中使用

可以在已定义的变量中,通过在关键字前加@,可以将这个关键字当做标识符(类名,变量名,方法名等)使用。

 

Throw new exception 异常处理

这可是三层中悄无声息埋伏的一个大坑,敲完三层后,账号密码输入正确------登陆成功,就没有再针对账号密码登陆错误而进行测试了,于是就导致如图所示错误。

出现这个错误的原因在于throw这个关键字,这个主要是用于抛出异常的,它是需要在UI层中使用try.......catch去接收异常的,否则就会报错。

故而代码书写如下:

        private void BTLogin_Click(object sender, EventArgs e)
        {
            
            try
            //对try块代码进行异常捕捉,
            //如无异常则进行直try块结束,
            //如有异常则跳转进入catch块。
            {
                string userName = txtUserName.Text.Trim();
                string password = txtPassword.Text;
                Login.BLL.LoginManager mgr = new Login.BLL.LoginManager();
                //将用户输入的数据传给BLL,在下面一句的使用中,就直接从BLL调用数据
                Login.Model.UserInfo user = mgr.UserLogin(userName, password);
                //在这里就可以返回model里的userinfo
                MessageBox.Show("登陆用户:" + user.UserName);
            }

            catch (Exception ex)
            //处理异常。如下进行处理
            {
                MessageBox.Show(ex.Message);
            }
        }

 

评论 18
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值