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

首先是一个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. MVC中在一个视图中,怎么加载另外一个视图?

    在RazorView.cshtml视图: <!--在视图中调用无返回值的方法,视图中调用无返回值的方法,要加上大括号--> <!--在一个视图中,直接加载另外一个视图--> @ ...

  2. 2015百度之星 IP聚合

    IP聚合 Time Limit: 2000/1000 MS (Java/Others) Memory Limit: 65536/65536 K (Java/Others) Problem Descri ...

  3. ASP.NET MVC使用input标签上传文件

    有些时间学习了,温习一下ASP.NET MVC了.上传文档是在开发过程中,必须撑握的一个功能.以前上传均是使用第三方控件uploadify来实现,今天使使用VS标准标签input 的type=&quo ...

  4. Winform开发框架之权限管理系统改进的经验总结(1)-TreeListLookupEdit控件的使用

    最近一直在做一些技术性的研究和框架改进工作,博客也落下好几天没有更新了,也该是时候静下心来,总结这段时间的一些技术改进的经验了.和上一阶段的CRM系统开发和技术研究一样,我都喜欢在一个项目或者模块完成 ...

  5. 使用栈Stack对整数数值的运算表达式字符串进行运算C#

    这里如果对于形如字符串“((6+((7+8)-9)*9+8/2)-3)/2”的运算表达式进行运算.接触过此类的同学知道这种存在着运算符优先级的表达式,不能直接从左到右进行运算,我们使用OperandS ...

  6. 重新想象 Windows 8.1 Store Apps (92) - 其他新特性: CoreDispatcher, 日历, 自定义锁屏系列图片

    [源码下载] 重新想象 Windows 8.1 Store Apps (92) - 其他新特性: CoreDispatcher, 日历, 自定义锁屏系列图片 作者:webabcd 介绍重新想象 Win ...

  7. csharp: Sound recording

    using System; using System.Collections.Generic; using System.Linq; using System.Text; using Microsof ...

  8. jQuery获取Select选择的Text和 Value(转)用时比较方便寻找

    ---恢复内容开始--- jQuery获取Select选择的Text和Value:语法解释:1. $("#select_id").change(function(){//code. ...

  9. 泛函编程(16)-泛函状态-Functional State

    初接触泛函状态觉着很不习惯.主要是在使用State数据类型时很难理解其中的原理,特别是泛函状态变迁机制(state transition mechanism):怎么状态就起了变化,实在难以跟踪.我想这 ...

  10. java LinkedBlockingQueue和ConcurrentLinkedQueue的区别

    实现上看,两者都继承于AbstractQueue,但是ConcurrentLinkedQueue实现了Queue,而LinkedBlockingQueue实现了BlockingQueue,Blocki ...