在研究了一个星期的三层架构写出的一个小功能,使用三层架构并实现点击新闻标题可以跳转到自己写的新闻页面。

首先是一个DBHelper,这个不是我自己写的,是朋友给我的

using System;
using System.Data;
using System.Xml;
using System.Data.SqlClient;
using System.Collections;
using System.Configuration;//引入命名空间
using System.Collections.Generic; namespace DAL
{
/// <summary>
/// SqlServer数据访问帮助类
/// </summary>
public sealed class DBHelper
{
//获取数据库连接字符串
public static string connString = ConfigurationManager.ConnectionStrings["SQLConnectionString"].ConnectionString; /// <summary>
/// 专门用来执行增、删、改的方法(非存储过程)
/// </summary>
/// <param name="sql">SQL语句</param>
/// <param name="para">参数数组</param>
/// <returns>执行结果</returns>
public static int ExecuteNonQuery(string sql, params SqlParameter[] parameters)
{
using (SqlConnection con = new SqlConnection(connString))
{
con.Open();
using (SqlCommand cmd = con.CreateCommand())
{
cmd.CommandText = sql;
cmd.Parameters.AddRange(parameters);
string str = sql;
return cmd.ExecuteNonQuery(); }
}
//return ExecuteNonQuery(sql, false, para);
} /// <summary>
/// 专门用来执行增、删、改的方法
/// </summary>
/// <param name="sql">SQL语句</param>
/// <param name="isStoredProcedure">是否存储过程</param>
/// <param name="para">参数</param>
/// <returns>执行结果</returns>
public static bool ExecuteNonQuery(string sql, bool isStoredProcedure, params SqlParameter[] para)
{
try
{
using (SqlConnection conn = new SqlConnection(connString))
{
SqlCommand cmd = new SqlCommand(sql, conn);
if (isStoredProcedure)
{
//如果是存储过程
cmd.CommandType = CommandType.StoredProcedure;
}
if (para != null)
{
cmd.Parameters.AddRange(para);
}
//打开连接
if (conn.State == ConnectionState.Closed)
{
conn.Open();
}
int i = cmd.ExecuteNonQuery();
return i > ? true : false;
}
}
catch (Exception ex)
{
throw ex;
}
} /// <summary>
/// 此方法专门用来执行sql语句,并且返回一个DataTable对象(非存储过程)
/// </summary>
/// <param name="sql">参数化的sql语句(一般为含有select关键字的sql语句)</param>
/// <param name="para">SqlParameter数组型的参数:如果此sql语句没有参数则para为null;否则在调用方传一个SqlParameter[]数组</param>
/// <returns>DataTable格式的结果数据</returns>
public static DataTable ExecuteSelect(string sql, params SqlParameter[] para)
{
return ExecuteSelect(sql, false, para);
} /// <summary>
/// 此方法专门用来执行sql语句,并且返回一个DataTable对象
/// </summary>
/// <param name="sql">参数化的sql语句(一般为含有select关键字的sql语句)</param>
/// <param name="isStoredProcedure">标志要调用的是否是存储过程</param>
/// <param name="para">SqlParameter数组型的参数:如果此sql语句没有参数则para为null;否则在调用方传一个SqlParameter[]数组</param>
/// <returns>DataTable</returns>
public static DataTable ExecuteSelect(string sql, bool isStoredProcedure, params SqlParameter[] para)
{
try
{
SqlDataAdapter da = new SqlDataAdapter(sql, connString);
if (isStoredProcedure)
{
//如果是存储过程
da.SelectCommand.CommandType = CommandType.StoredProcedure;
}
if (para != null)
{
da.SelectCommand.Parameters.AddRange(para);
}
DataTable dt = new DataTable();
da.Fill(dt);
return dt;
}
catch (Exception)
{ throw;
}
}
/// <summary>
/// 用于查询的ExecuteReader方法(不带存储过程的)
/// </summary>
/// <param name="strSql">查询的SQL语句</param>
/// <param name="para">字符串格式化</param>
/// <returns>返回SqlDataReader</returns>
public static SqlDataReader ExecuteReader(string sql, params SqlParameter[] para)
{
return ExecuteReader(sql, false, para);
} /// <summary>
/// 用于查询的ExecuteReader方法(带存储过程的)
/// </summary>
/// <param name="strSql">查询的SQL语句</param>
/// <param name="para">字符串格式化</param>
/// <returns>返回SqlDataReader</returns>
public static SqlDataReader ExecuteReader(string sql, bool isStoredProcedure, params SqlParameter[] para)
{
SqlDataReader reader = null;
SqlConnection sqlConn = new SqlConnection(connString);
try
{
SqlCommand sqlComm = new SqlCommand(sql, sqlConn);
if (isStoredProcedure)
{
//如果是存储过程
sqlComm.CommandType = CommandType.StoredProcedure;
}
if (para != null)
{
sqlComm.Parameters.AddRange(para);
}
//打开连接
if (sqlConn.State == ConnectionState.Closed)
{
sqlConn.Open();
}
reader = sqlComm.ExecuteReader();
return reader;
}
catch (Exception)
{
throw;
}
} /// <summary>
/// 用于统计数据
/// </summary>
/// <param name="strSql">查询语句</param>
/// <param name="para">参数</param>
/// <returns></returns>
public static object ExecuteScalar(string sql, params SqlParameter[] para)
{ try
{
SqlConnection sqlconn = new SqlConnection(connString);
SqlCommand sqlcomm = new SqlCommand(sql, sqlconn);
if (para != null)
{
sqlcomm.Parameters.AddRange(para);
}
//打开连接
if (sqlconn.State == ConnectionState.Closed)
{
sqlconn.Open();
}
return sqlcomm.ExecuteScalar();
}
catch (Exception)
{ throw;
}
} /// <summary>
/// 返回DataTable对象(非存储过程)
/// </summary>
/// <param name="strSql">以Select语句开头的查询语句</param>
/// <param name="para">参数</param>
/// <returns>返回一个DataTable对象</returns>
public static DataTable GetTable(string sql, params SqlParameter[] para)
{
return GetTable(sql, false, para);
} /// <summary>
/// 返回DataTable对象
/// </summary>
/// <param name="strSql">以Select语句开头的查询语句</param>
/// <param name="para">参数</param>
/// <returns>返回一个DataTable对象</returns>
public static DataTable GetTable(string sql, bool isStoredProcedure, params SqlParameter[] para)
{
try
{
SqlDataAdapter sqlDA = new SqlDataAdapter(sql, connString);
DataTable dt = new DataTable();
//如果是存储过程
if (isStoredProcedure)
{
sqlDA.SelectCommand.CommandType = CommandType.StoredProcedure;
}
//如果参数化不为空
if (para != null)
{
sqlDA.SelectCommand.Parameters.AddRange(para);
}
sqlDA.Fill(dt);//如果这里出错一般就是SQL语句的错误
return dt;
}
catch
{
throw;
}
} /// <summary>
/// 主要执行查询操作
/// </summary>
/// <param name="sql">执行的sql语句</param>
/// <param name="parameters">参数数组</param>
/// <returns></returns>
public static DataTable ExecuteDataTable(string sql, params SqlParameter[] parameters)
{
using (SqlConnection con = new SqlConnection(connString))
{
con.Open();
using (SqlCommand cmd = con.CreateCommand())
{
cmd.CommandText = sql;
cmd.Parameters.AddRange(parameters); SqlDataAdapter adapter = new SqlDataAdapter(cmd);
DataTable dt = new DataTable();
adapter.Fill(dt);
return dt;
}
}
} public static bool TranSql(List<string> sqlList)
{
//实例化数据库连接对象
SqlConnection sqlconn = new SqlConnection(connString);
sqlconn.Open();
SqlTransaction sqltran = sqlconn.BeginTransaction();
try
{
foreach (string sql in sqlList)
{
SqlCommand sqlcomm = new SqlCommand(sql, sqlconn, sqltran);
sqlcomm.ExecuteNonQuery();
}
sqltran.Commit();
sqlconn.Close();
return true;
}
catch
{
sqltran.Rollback();
sqlconn.Close();
return false;
} }
public static bool isConnectionOpen(SqlConnection connection)
{
if (connection.State == System.Data.ConnectionState.Open)
return true;
else
return false;
} /// <summary>
/// 利用sql语句查询数据集
/// </summary>
/// <returns></returns>
public static DataTable GetDataTable(string sql)
{
SqlConnection conn = new SqlConnection(connString);
bool lastState = isConnectionOpen(conn);
if (lastState == false) conn.Open(); DataSet ds = new DataSet();
SqlDataAdapter da = new SqlDataAdapter(sql, conn);
da.Fill(ds, "table"); if (lastState == false)
conn.Close();
return ds.Tables["table"];
} }
}

1、model层,封装字段

 public   class NewsModel
{
private int id; public int Id
{
get { return id; }
set { id = value; }
}
private string title; public string Title
{
get { return title; }
set { title = value; }
}
private string content; public string Content
{
get { return content; }
set { content = value; }
}
//private string categories; //public string Categories
//{
// get { return categories; }
// set { categories = value; }
//}
private string type; public string Type
{
get { return type; }
set { type = value; }
}
private string author; public string Author
{
get { return author; }
set { author = value; }
}
private DateTime issueDate; public DateTime IssueDate
{
get { return issueDate; }
set { issueDate = value; }
}
}

2、DAL层,数据库语句

public static DataRowCollection GetNews()    //首页前10条新闻
{
string selectSql = "select top 10* from News order by issueDate desc ";
DataTable lb = DBHelper.GetDataTable(selectSql);
return lb.Rows;
}

3、BLL层,调用DAL的数据库语句

 public static DataRowCollection GetNews()  //查询首页前10条新闻
{
return NewsDAL.GetNews();
}

4、在隐藏代码文件中调用BLL层

  public NewsModel[] model;

        public DataRowCollection drow;  //前10条新闻

protected void Page_Load(object sender, EventArgs e)
{
drow = NewsBLL.GetNews(); }

5、在aspx页面中,在<a>标签中添加代码

  <%--右上新闻框--%>
<div id="newRight"> <div class="contentRight" style="padding-left: 20px; padding-top: 20px;"> <% if (drow != null)
{
foreach (var line in drow)
{
System.Data.DataRow dr = (System.Data.DataRow)line;
%>
<a href="newsContent.aspx?id=<%=dr["id"].ToString() %>"><%=dr["title"].ToString() %></a><span class="datetime"><%=dr["issuedate"].ToString() %></span><br><br>
<%}
} %> </div> </div>

在web.config文件中添加连接数据库代码

<connectionStrings>

<add name="SQLConnectionString" connectionString="Data Source=服务器名;Initial Catalog=数据库名;Integrated Security=True"

providerName="System.Data.SqlClient" />

</connectionStrings>

.NET三层架构例子超链接可以点击显示内容页面的更多相关文章

  1. 浅谈EasyUI---C#三层架构---

    每次写博客,第一句话都是这样的:程序员很苦逼,除了会写程序,还得会写博客!当然,希望将来的一天,某位老板看到此博客,给你的程序员职工加点薪资吧!因为程序员的世界除了苦逼就是沉默.我眼中的程序员大多都不 ...

  2. 转:从三层架构到MVC-MVP

    当然这种架构模式本身的一些问题也会在接下来的内容就加以介绍,另外就是如果大家有什么不同观点的话,欢迎拍砖(只要不打脸就行,呵呵). 一. MVC是谁提出的 模型-视图-控制器(MVC)是Xerox P ...

  3. [转]从三层架构到MVC,MVP

    本来是不想跳出来充大头蒜的,但最近发现园子里关于MVC的文章和讨论之风越刮越烈,其中有些朋友的观点并不是我所欣赏和推荐的,同时最近也在忙着给公司里的同事做MVC方面的“扫盲工作”.所以就搜集了一些大家 ...

  4. HTML5--》点击显示隐藏内容

    <details>浏览器支持比较差,可以用JavaScript实现这种功能. <!doctype html> <html> <head> <met ...

  5. delphi 三层架构简单例子(经测试成功)

    delphi 三层架构简单例子(经测试成功) 转载 2013年12月19日 09:48:57 1100 所谓三层: (1) 客户端 (2) 服务器端 (3) 数据库 在数据访问时,使得客户端必须通过服 ...

  6. 浅析MVC模式与三层架构的区别01

    三层架构和MVC是有明显区别的,MVC应该是展现模式(三个加起来以后才是三层架构中的UI层)三层架构(3-tier application) 通常意义上的三层架构就是将整个业务应用划分为:表现层(UI ...

  7. MVC模式与三层架构的区别

    之前总是混淆MVC表现模式和三层架构模式,为此记录下. 三层架构和MVC是有明显区别的,MVC应该是展现模式(三个加起来以后才是三层架构中的UI层) 三层架构(3-tier application) ...

  8. 三层架构与MVC的区别

    我们平时总是将混为一谈,殊不知它俩并不是一个概念.下面我来为大家揭晓我所知道的一些真相. 首先,它俩根本不是一个概念. 三层架构是一个分层式的软件体系架构设计,它可适用于任何一个项目. MVC是一个设 ...

  9. 新闻公布系统 (Asp.net 三层架构 )

    2012年度课程设计---新闻公布系统(小结)                                                                             ...

随机推荐

  1. C#中方法的调用

    C#中方法的调用 1.同一个类中方法的调用: 静态方法可以直接调用静态方法 静态方法不能直接调用非静态方法,静态方法先生成. 非静态方法可以直接调用静态方法 如果静态方法要调用非静态的方法,必须使用实 ...

  2. 将C1Chart数据导出到Excel

    大多数情况下,当我们说将图表导出到Excel时,意思是将Chart当成图片导出到Excel中.如果是这样,你可以参考帮助文档中保存和导出C1Chart章节. 不过,也有另一种情况,当你想把图表中的数据 ...

  3. Windows nexus 启动失败

    现象: nexus Windows系统服务安装成功,但启动失败 D:\nexus-2.10.0-02-bundle\nexus-2.10.0-02\bin>nexus.bat Usage: ne ...

  4. Uxf框架引入Rest控制器特性

    引入Rest风格接口的特性,主要是为了适应平台化和移动化开发的需要. 移植自ThinkPHP项目的RestAction. REST(Representational State Transfer表述性 ...

  5. 如何高效部署前端代码,如css,js...

    看了网上一些文章,做了点总结,顺便再加点自己的东西,简单的说下. 1.利用浏览器的304缓存,但是304叫协商缓存,还是需要与服务器通信一次 2.强制使用浏览器使用本地缓存(cache-control ...

  6. Scala Collection简介

    Traversable vs Iterable Traversable, Iterable 都是trait. Iterable 继承 Traversable. Traversable: 支持forea ...

  7. 安装性能测试工具:sysbench和使用apache的ab

    一.软件的用途,它主要包括以下几种方式的测试:1.cpu性能2.磁盘io性能3.调度程序性能4.内存分配及传输速度5.POSIX线程性能6.数据库性能(OLTP基准测试) 这个软件为什么找不到官网呢? ...

  8. Glide

    1.简介 在泰国举行的谷歌开发者论坛上,谷歌为我们介绍了一个名叫 Glide 的图片加载库,作者是bumptech.这个库被广泛的运用在google的开源项目中,包括2014年google I/O大会 ...

  9. SDK Build Tools revision (19.0.3) is too low for project Min

    SDK Build Tools revision (19.0.3) is too low for project Min(转)       如果你正在使用Android Studio工具进行开发,且将 ...

  10. Cookies简介和使用

    Cookie public class javax.servlet.http.Cookie  1作用(1)Cookie能使站点跟踪特定访问者的访问次数.最后访问时间和访问者进入站点的路径(2)Cook ...