.NET三层架构例子超链接可以点击显示内容页面
在研究了一个星期的三层架构写出的一个小功能,使用三层架构并实现点击新闻标题可以跳转到自己写的新闻页面。
首先是一个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三层架构例子超链接可以点击显示内容页面的更多相关文章
- 浅谈EasyUI---C#三层架构---
每次写博客,第一句话都是这样的:程序员很苦逼,除了会写程序,还得会写博客!当然,希望将来的一天,某位老板看到此博客,给你的程序员职工加点薪资吧!因为程序员的世界除了苦逼就是沉默.我眼中的程序员大多都不 ...
- 转:从三层架构到MVC-MVP
当然这种架构模式本身的一些问题也会在接下来的内容就加以介绍,另外就是如果大家有什么不同观点的话,欢迎拍砖(只要不打脸就行,呵呵). 一. MVC是谁提出的 模型-视图-控制器(MVC)是Xerox P ...
- [转]从三层架构到MVC,MVP
本来是不想跳出来充大头蒜的,但最近发现园子里关于MVC的文章和讨论之风越刮越烈,其中有些朋友的观点并不是我所欣赏和推荐的,同时最近也在忙着给公司里的同事做MVC方面的“扫盲工作”.所以就搜集了一些大家 ...
- HTML5--》点击显示隐藏内容
<details>浏览器支持比较差,可以用JavaScript实现这种功能. <!doctype html> <html> <head> <met ...
- delphi 三层架构简单例子(经测试成功)
delphi 三层架构简单例子(经测试成功) 转载 2013年12月19日 09:48:57 1100 所谓三层: (1) 客户端 (2) 服务器端 (3) 数据库 在数据访问时,使得客户端必须通过服 ...
- 浅析MVC模式与三层架构的区别01
三层架构和MVC是有明显区别的,MVC应该是展现模式(三个加起来以后才是三层架构中的UI层)三层架构(3-tier application) 通常意义上的三层架构就是将整个业务应用划分为:表现层(UI ...
- MVC模式与三层架构的区别
之前总是混淆MVC表现模式和三层架构模式,为此记录下. 三层架构和MVC是有明显区别的,MVC应该是展现模式(三个加起来以后才是三层架构中的UI层) 三层架构(3-tier application) ...
- 三层架构与MVC的区别
我们平时总是将混为一谈,殊不知它俩并不是一个概念.下面我来为大家揭晓我所知道的一些真相. 首先,它俩根本不是一个概念. 三层架构是一个分层式的软件体系架构设计,它可适用于任何一个项目. MVC是一个设 ...
- 新闻公布系统 (Asp.net 三层架构 )
2012年度课程设计---新闻公布系统(小结) ...
随机推荐
- C#设计模式——适配器模式(Adapter Pattern)
一.概述在软件开发中,常常会想要复用一个已经存在的组件,但该组件的接口却与我们的需要不相符,这时我们可以创建一个适配器,在需复用的组件的接口和我们需要的接口间进行转换,从而能够正常的使用需复用的组件. ...
- 【原创】记一次Sql2008R2的数据库订阅发布遇到的问题!
1.首先新建一个空的数据库 CreditTest,里面没有任何表结构,视图,数据等. 2.在已连接的服务器的下方找到“复制”选项,然后兴建发布: ...(新建发布成功) ...(新建订阅成功) 3.问 ...
- php配合jquery实现增删操作
后台使用php,前台引用jquery,实现增删操作,代码如下: <script type="text/javascript" src="http://keleyi. ...
- 重新想象 Windows 8 Store Apps (43) - 多线程之任务: Task 基础, 多任务并行执行, 并行运算(Parallel)
[源码下载] 重新想象 Windows 8 Store Apps (43) - 多线程之任务: Task 基础, 多任务并行执行, 并行运算(Parallel) 作者:webabcd 介绍重新想象 W ...
- spring aop advice
1.前置通知(BeforeAdvice): import java.lang.reflect.Method; import org.springframework.aop.MethodBeforeAd ...
- ahjesus C# Flags 位域略说
class Program { [Flags] public enum Week { [Description("星期一")] Monday = << , [Descr ...
- 【原创】.NET Core应用类型(Portable apps & Self-contained apps)
介绍 有许多种方式可以用来考虑构建应用的类型,通常类型用来描述一个特定的执行模型或者基于此的应用.举例说:控制台应用(Console Application).Web应用(Web Applicatio ...
- The main concepts
The MVC application model A Play application follows the MVC architectural pattern applied to the we ...
- Echarts图表控件使用总结2(Line,Bar)—问题篇
Echarts图表控件使用总结1(Line,Bar):http://www.cnblogs.com/hanyinglong/p/Echarts.html 1.前言 a.前两天简单写了一篇在MVC中如何 ...
- JavaScript的一些小技巧(转)
本文是一篇翻译文章,原文信息如下: 原文:45 Useful JavaScript Tips, Tricks and Best Practices 作者:Saad Mousliki JavaScrip ...