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

首先是一个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. Fisrt Node-Webkit App

    1.什么是Node-Webkit 基于node.js和chromium的应用程序实时运行环境,可运行通过HTML(5).CSS(3).Javascript来编写的本地应用程序.node.js和webk ...

  2. 【C#】线程之Parallel

    在一些常见的编程情形中,使用任务也许能提升性能.为了简化变成,静态类System.Threading.Tasks.Parallel封装了这些常见的情形,它内部使用Task对象. Parallel.Fo ...

  3. 实用笔记-EF中直接运行SQL命令

    在EF4.1,API的名字 有了些许改变,DbContext.Database就是对应于数据库端信息的封装.执行SQL命令也自然从Database类型开始.对应于ExecuteStoreCommand ...

  4. 刚刚开通博客,分享Asp.Net的GridView的基本用法

    包含有 数据的编辑,删除, 标题的添加,自定义分页,高亮显示鼠标所在,以及数据不足时添加空行 aspx页面代码 <asp:GridView ID="GridView1" ru ...

  5. csharp: get Web.Services WebMethod

    using System; using System.Collections.Generic; using System.Linq; using System.Web; using System.We ...

  6. PHP Warning: Module 'modulename' already loaded in Unknown on line 0

    问题 当在命令行运行PHP的CLI版本时,您可能会收到类似以下错误: [root@myserver /root]$ php -v PHP Warning: Module 'pcre' already ...

  7. Python基础(二),Day2

    常用的数据类型 int 整型 float 浮点 bool 布尔 string 字符串 列表的语法和用法 # 创建一个列表 list = [] #一个空列表 list = ['2323123','asd ...

  8. mybatis 下划线转驼峰配置

    一直以来,在sqlmap文件中,对于数据库中的下划线字段转驼峰,我们都是通过resultmap来做的,如下: <resultMap id="ISTableStatistics" ...

  9. RadioButton 自定义控件

    在res/drawable新建radiobutton.xml(本案例为video——evaluate.xml)如下 <?xml version="1.0" encoding= ...

  10. Linux_Centos中搭建nexus私服

    1.在Linux下搭建Nexus私服 1).下载并且解压      下载  nexus-2.11.2-03-bundle.zip      unzip nexus-2.11.2-03-bundle.z ...