近期开始看牛腩视频了,很喜欢老师的说课的声音,可能是因为同时南方人,所以有着莫名的亲切感。
从视频的讲解来看,老师是想向我们演示一个软件真正的从无到有的过程。在刚开始看的时候我竟然觉得这个视频就应该在机房收费系统之前看,因为老师讲到了很多在软件开发过程我们应该注意的问题。可是后来,我想如果这个视频是在我们实践之前看,估计也就达不到现在的效果了。至少共鸣就没有这么多。举个很简单的例子吧。
从视频的讲解来看,老师是想向我们演示一个软件真正的从无到有的过程。在刚开始看的时候我竟然觉得这个视频就应该在机房收费系统之前看,因为老师讲到了很多在软件开发过程我们应该注意的问题。可是后来,我想如果这个视频是在我们实践之前看,估计也就达不到现在的效果了。至少共鸣就没有这么多。举个很简单的例子吧。
例如在机房重构中我们用到了SQLHelp、配置文件等,但是说实话,当时用的时候只是看培养文档、师哥师姐的博客里面说这些东西都要用上,自己在落实的过程中并没有真正的明白他到底是如何演变过来的,当时只是知道他具体是用来干什么的,至于为什么那样写以及它是由谁演变过来的我是真正的不明白。这次的再次见SQLHelper心里头还是有些小雀跃的,因为刚好这一块我自己迷糊着呢。可以说他来的很是时候。在讲解的过程中老师先是给我们讲了一个传统的做法,就是写在D层方法的时候凡是用到数据库操作的方法,都要定义一个数据库连接,然后用一个bool、table返回结果。然后给我们讲解了如何从简单的入手一步步抽象重构SQLHelper。在重构的过程中,老师特别注意将公共的部分抽象出来,减少代码。此外为了降低程序与数据库的耦合度,弄了一个配置文件。
/*
*创建人:***
*创建时间:2015-05-23
*说明:数据库的助手类
*版权所有:牛腩&www.TGB.com
*/
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using System.Data;
using System.Data.SqlClient;
using System.Configuration;
namespace DAL
{
public class SQLHelper
{
private SqlConnection conn = null;
private SqlCommand cmd = null;
private SqlDataReader sdr = null;
public SQLHelper()
//重构SQLHelper
{
//添加引用configuration,用来获取WEB里面的配置文件
string connStr = ConfigurationManager.ConnectionStrings["connStr"].ConnectionString;
//实例化一个新的链接,传入配置文件的连接字符串用于数据库连接。
conn = new SqlConnection(connStr);
}
private SqlConnection GetConn()
{
if (conn.State == ConnectionState.Closed)
{
conn.Open();
}
return conn;
}
/// <summary>
/// 该方法执行传入的增删改SQL语句
/// </summary>方法的概要
/// <param name="sql">要执行的SQL语句</param>
/// <returns>返回更新的记录数</returns>
public int ExecuteNonQuery(string sql)
{
int res;
try
{
SqlCommand cmd = new SqlCommand(sql, GetConn());
res = cmd.ExecuteNonQuery();
}
catch (Exception ex)
{
throw ex;
}
finally
{
if (conn.State == ConnectionState.Open)
{
conn.Close();
}
}
return res;
}
/// <summary>
/// 该方法执行SQL查询语句
/// </summary>
/// <param name="sql"></param>
/// <returns></returns>
public DataTable ExecuteQuery(string sql)
{
DataTable dt = new DataTable();
cmd = new SqlCommand(sql, GetConn());
//随着sdr的关闭,数据库连接也关闭。
using (sdr = cmd.ExecuteReader(CommandBehavior.CloseConnection))
{
//把sdr读到的东西传到dt中
dt.Load(sdr);
}
return dt;
}
}
}
乍一看的去,觉得很多,可是你仔细分析就觉得很简单的。其实就分为三个部分,一个用于获取配置文件的数据库连接字符串。一个用户打开数据库的链接。一个则是对数据库的有无返回的查询。我在看的时候觉得很熟悉,但是视频中也给我们引入了新的东西。例如“///”来如何具体注释方法。还有Tty catch还有Using的一些用法,很实用。个人喜欢用Using来关闭数据库。
其实最让我学习的是配置文件。虽然里面的东西不多,但是因为他的原因,我今天下午可就是耗在这上面了。由于自己对配置文件接触的少,有时候即便是出了问题,我也不知道该从何下手。在网上查了很多,也问了问小伙伴们,可还是理解的不太深刻。
-->
<system.web>
<compilation debug="true" targetFramework="4.5.1"/>
<httpRuntime/>
<pages controlRenderingCompatibilityVersion="3.5" clientIDMode="AutoID"/>
</system.web>
<appSettings/>
<connectionStrings>
<add name="connStr" connectionString="server=.;database=newssystem;uid=sa;pwd=123"/>
</connectionStrings>
</configuration>
在看视频的时候发现视频里的配置文件和我的界面上的不一致,所以不知道该在什么位置加上节点,以便添上连接数据库的凭借。后来才知道“/”是用来关闭节点的。至于新加的“connectionStrings”节点它只要有组织的添加在在“configuration“中,就可以了。配置文件的添加方法就暂时说到这里,在这里的配置文件的主要作用就是降低D层与数据库的耦合度。
牛腩,新的起点,前行的路上肯定会有自己曾经闻所未闻的棘手问题,但恰恰是这些问题能够最有效的督促我成长。