裸眼3D效果 太震撼了!
这效果忒震撼了,不分享不行了……
这效果忒震撼了,不分享不行了……
哈 刚才在CSDN找到了一组分页的存储过程,正好最近也在学习这个,故转载过来留作存档哈~
sql server 2005的分页存储过程分3个版本,一个是没有优化过的,一个是优化过的,最后一个支持join的,sql server 2000的分页存储过程,也可以运行在sql server 2005上,但是性能没有sql server 2005的版本好。
在最后 我还附带了一个二分法的分页存储过程,也很好用的说哈~~
1.SqlServer 2005:
SET ANSI_NULLS ON
GO
SET QUOTED_IDENTIFIER ON
GO
CREATE proc [dbo].[up_Page2005]
@TableName varchar(50), --表名
@FIELDS varchar(5000) = '*', --字段名(全部字段为*)
@OrderField varchar(5000), --排序字段(必须!支持多字段)
@sqlWhere varchar(5000) = NULL,--条件语句(不用加where)
@pageSize int, --每页多少条记录
@pageIndex int = 1 , --指定当前为第几页
@TotalPage int output --返回总页数
AS
begin
Begin Tran --开始事务
Declare @sql nvarchar(4000);
Declare @totalRecord int;
--计算总记录数
IF (@SqlWhere='' OR @sqlWhere=NULL)
SET @sql = 'select @totalRecord = count(*) from ' + @TableName
else
SET @sql = 'select @totalRecord = count(*) from ' + @TableName + ' with(nolock) where ' + @sqlWhere
EXEC sp_executesql @sql,N'@totalRecord int OUTPUT',@totalRecord OUTPUT--计算总记录数
--计算总页数
SELECT @TotalPage=CEILING((@totalRecord+0.0)/@PageSize)
IF (@SqlWhere='' OR @sqlWhere=NULL)
SET @sql = 'Select * FROM (select ROW_NUMBER() Over(order by ' + @OrderField + ') as rowId,' + @FIELDS + ' from ' + @TableName
else
SET @sql = 'Select * FROM (select ROW_NUMBER() Over(order by ' + @OrderField + ') as rowId,' + @FIELDS + ' from ' + @TableName + ' with(nolock) where ' + @SqlWhere
--处理页数超出范围情况
IF @PageIndex<=0
SET @pageIndex = 1
IF @pageIndex>@TotalPage
SET @pageIndex = @TotalPage
--处理开始点和结束点
Declare @StartRecord int
Declare @EndRecord int
SET @StartRecord = (@pageIndex-1)*@PageSize + 1
SET @EndRecord = @StartRecord + @pageSize - 1
--继续合成sql语句
SET @Sql = @Sql + ') as t where rowId between ' + Convert(varchar(50),@StartRecord) + ' and ' + Convert(varchar(50),@EndRecord)
print @sql
Exec(@Sql)
---------------------------------------------------
IF @@Error <> 0
Begin
RollBack Tran
RETURN -1
End
Else
Begin
Commit Tran
RETURN @totalRecord ---返回记录总数
End
endsqlconnection数据库连接对象:只有联接才能进行其它操作
sqldataadapter数据适配器对象,就是用某个sqlconnection,执行某个查询语句(SELECT语句),放到某个DataSet里
sqlcommand 数据命令对象(SELECT,INSERT,DELETE,UPDATE等,还可以是存储过程) SqlCommand.Parameter属性传sql参数
ExecuteScalar :执行查询,返回单个字段,比如求和的结果,平均值,最大最小值等等
ExecuteReader执行快速只读向前查询,一般对单条记录的多个字段逐个查询,多条记录亦可,
通俗点说吧,通常来说是这样的:
DataSet和SqlDataAdapter在一起用,就没SqlCommand什么事了,通常作用是把某张表的信息显示出来,比如显示在GridView上之类的
ExecuteNonQuery和SqlCommand一起用,也就没DataSet和SqlDataAdapter什么事了,通常用在对数据的增加、修改、删除,注意查询不能用它
要说查询SqlDataReader和SqlCommand一起使用,是用来查询的,我想你是这个意思,按照我的理解,查询少量数据的时候使用SqlDataReader比较方便和灵活,效率也高,比如查询某一行数据之类的
另外还有个ExecuteScalar也和SqlCommand一起用作用,返回单个值,如求和、总行数等SQL语句的聚合函数,比如SELECT COUNT(*) FROM 表名1
SqlConnection
表示 SQL Server 数据库的一个打开的连接。
System.Data.SqlClient.SqlConnection
SqlConnection 对象表示与 SQL Server 数据源的一个唯一的会话。对于客户端/服务器数据库系统,它相当于到服务器的网络连接。SqlConnection 与 SqlDataAdapter 和 SqlCommand 一起使用,以便在连接 Microsoft SQL Server 数据库时提高性能。对于所有第三方 SQL 服务器产品以及其他支持 OLE DB 的数据源,请使用 OleDbConnection。
SqlDataAdapter
表示用于填充 DataSet 和更新 SQL Server 数据库的一组数据命令和一个数据库连接。
System.Data.SqlClient.SqlDataAdapter
SqlDataAdapter 是 DataSet 和 SQL Server 之间的桥接器,用于检索和保存数据。SqlDataAdapter 通过对数据源使用适当的 Transact-SQL 语句映射 Fill(它可更改 DataSet 中的数据以匹配数据源中的数据)和 Update(它可更改数据源中的数据以匹配 DataSet 中的数据)来提供这一桥接。
SqlDataAdapter 与 SqlConnection 和 SqlCommand 一起使用,以便在连接到 Microsoft SQL Server 数据库时提高性能。若要访问其他数据源,可使用 OleDbDataAdapter 以及与之关联的 OleDbCommand 和 OleDbConnection。
SqlDataAdapter 还包括 SelectCommand、InsertCommand、DeleteCommand、UpdateCommand 和 TableMappings 属性,使数据的加载和更新更加方便。
SqlCommand
表示要对 SQL Server 数据库执行的一个 Transact-SQL 语句或存储过程。
System.Data.SqlClient.SqlCommand
SqlCommand 特别提供了以下对 SQL Server 数据库执行命令的方法:
ExecuteReader 执行返回行的命令。为了提高性能,ExecuteReader 使用 Transact-SQL sp_executesql 系统存储过程调用命令。因此,如果用于执行像 Transact-SQL SET 语句这样的命令,ExecuteReader 可能无法获得预期效果。
ExecuteNonQuery 执行如 Transact-SQL INSERT、DELELE、UPDATE 和 SET 语句等命令。
ExecuteScalar 从数据库中检索单个值(例如一个聚合值)。
ExecuteXmlReader 将 CommandText 发送到 Connection 并生成一个 XmlReader 对象。
上次写了使用TreeView控件进行无限分类绑定的方法,这回再写个通用性更好的~~嘿嘿 绑定DropDownList~~思想跟上篇日志很接近,也是使用递归,当然,网络上还有很多人给数据库增加了一个“Depth(深度)”的字段,这样进行绑定的时候还可以更简单些哈~~当然,没有必要的就不加了,还是递归使用起来简单些哈~~不多说了,上代码哈:
protected void bind_droplist(string ChildNode, string tmp)
{
DataTable dt = bil.GetByClassPre(ChildNode).Tables[0];
foreach (DataRow dr in dt.Rows)
{
if (dr["ClassPre"].ToString()=="0")
{
//如果是根节点
tmp = "";
DropDownList1.Items.Add(dr["ClassName"].ToString());
bind_droplist(dr["ClassId"].ToString(), tmp + " ");
}
else
{
//不是根节点
DropDownList1.Items.Add( tmp+"|-" + dr["ClassName"].ToString());
bind_droplist(dr["ClassId"].ToString(), tmp + " ");
}
}
}
以前总想着搞这个无限分类,今天终于得空好好的看了下,发现实现的原理还是很简单的,数据结构上,用两列(分类编号,上级编号)就可以实现,可是为了联合查询的方便,一般都再增加一列(深度),在这个实例里,我只用了两列,剩下的无非就是递归着对TreeView进行数据绑定而已~~。
public partial class _Default : System.Web.UI.Page
{
BIL bil = new BIL();
protected void Page_Load(object sender, EventArgs e)
{
if (!IsPostBack)
{
bind_tree("0",null);
}
}
protected void bind_tree(string ChildNode,TreeNode tn)
{
DataTable dt = bil.GetByClassPre(ChildNode).Tables[0];
foreach (DataRow dr in dt.Rows)
{
TreeNode Node = new TreeNode();
if (tn==null)
{
//根
Node.Text = dr["ClassName"].ToString();
this.TreeView1.Nodes.Add(Node);
bind_tree(dr["ClassId"].ToString(), Node);
}
else
{
//当前节点的子节点
Node.Text = dr["ClassName"].ToString();
tn.ChildNodes.Add(Node);
bind_tree(dr["ClassId"].ToString(),Node);
}
}
}
}完整实例:点击下载(Vs2008+Access)
马上就要到中秋假期了,虽然说好不容易得到一个可以放松睡懒觉的假期,可是真的不想让自己过于松懈,所以制定个简单的学习计划吧。
1)重视数据结构,重新调试顺序表,链表(包括循环链表)涉及的几个经典算法:今天看了一篇名为ASP.NET面试经历分享的日志,还是颇有感触的~~而其中提到的几道笔试/面试题,竟然数据结构占了很大的比例,可能自己以前做的数据结构的应用性不高,不够重视,现在有些醒悟了~决定开始重视这门学科。
2)实现无限极分类及分页算法。这两个算法都是我一直想要安下心搞的东西,无奈总是浮躁,趁着这个假期,一定要拿下这两个算法,且尽可能的利用MSSQL本身的存储过程来增加程序效率
3)了解缓存机制,对memcached要有一个初步的了解。
.Net 在他的2.0版本中增加了Theme功能,一直都没应用过这个功能,偶然在一网站看到了App_Themes夹子,很好奇,百度了下才知道有这个功能~~这个东西的作用就是可以另网站可以有多套皮肤,可以随意的进行切换~
这东西的应用那也是非常的简单,简单到我只需要在项目上单击鼠标右键,选择“添加Asp.Net文件夹”–”主题” 然后自己起个名字,这样主题就建好了,同样的道理,可以多建几个主题文件夹。之后要做的只是在主题文件夹放入css文件,或者skin文件,只要调用”this.theme=主题文件夹的名字”就可以应用主题哈~~~附上测试项目吧
测试项目(Base VS2008):点此下载
因为之前Kaisir都是使用的WordPress的版本自动升级功能,来来回回也升级了三四级了,期间中文英文也不停的切换,直到现在升级到了WP3.0.1,突然感觉WP的稳定性开始直线下降,很多插件都不能正常工作了,于是,Kaisir做出了一个决定—-重新部署下WordPress.
Kaisir的想法很简单,无非是备份数据库跟配置文件,之后将完整的WP的文件上传,然后用原来的配置文件跟数据库就Ok,没想到,这样的结果竟然是WP什么都不显示,只给出了一个空白页(囧……)无奈之下,Kaisir只好备份了全部的数据库,然后重新安装WP,然后还原数据库,然后开始一点点的部署插件~~
幸好这个过程还是比较顺利的,以前感觉很混乱的插件现在也得到了规整。顺便,Kaisir换了一个代码高亮的提示插件,不知道好不好用,一会可以做下测试哈:
代码高亮测试:
import java.util.*; public class Sample { public static void main(String[] args) { // Создание объекта по шаблону. List<String> strings = new LinkedList<String>(); strings.add("Hello"); strings.add("world"); strings.add("!"); for (String s : strings) { System.out.print(s); System.out.print(" "); } } }
Kaisir最近在做的小项目中一直有在使用大名鼎鼎的Hibernate的.Net版本–NHibernate,百度了下下,发现可以参考的例子非常少,就把自己在应用过程中的例子拿出来,供大家参考。也方便自己下次配置时不用再到处找资料了。这篇文章不深究Nhibernate的实现,想要了解如何实现的童鞋,可以继续Google下~~不过也不排除等空闲的时候自己阅读下源代码,来篇NHibernate源码分析 哇哈哈~
一般的框架集都是通过配置文件来进行配置的,NHibernate也不例外,且NHibernate的配置分为两部分,基础配置及数据实体配置。
(一)基础配置
对于Nhibernate来说,基础配置主要体现在对web.config的配置。在其中,我们定义了他要连接数据库的基本信息,以及以什么形式连接数据库,此外,还可以在这里增加调试(log4net)信息的输出。当然,首先要做的,还有在<configSections>段增加NHibernate程序集本身的信息。
<section name="nhibernate" type="System.Configuration.NameValueSectionHandler, System, Version=1.2.0.3001,Culture=neutral, PublicKeyToken=b77a5c561934e089"/><nhibernate>
<add key="hibernate.connection.provider" value="NHibernate.Connection.DriverConnectionProvider"/>
<add key="hibernate.dialect" value="NHibernate.Dialect.GenericDialect"/>
<add key="hibernate.connection.driver_class" value="NHibernate.Driver.OleDbDriver"/>
<add key="hibernate.connection.connection_string" value="Provider=Microsoft.Jet.OLEDB.4.0;Data Source=|DataDirectory|djshfk34234.mdb"/>
</nhibernate>我实在找不到别的题目来形容我最近的状态了。忙,这是对我最近生活最好的写照。
自8月29我来到青岛理工大报到之后,感觉生活完全是回到了类似于高中生活的一种状态,每天早上6点钟就会在宿舍其他同学的感染下起床来,30分钟洗漱完毕,去吃早饭,之后去上课,大约也就7点左右,甚至不到7点,然后花10几分钟走到教室,这时候差不多教室的前几排已经被占满了,还有更夸张的,我上铺的童鞋更是每天6点左右就出去给他媳妇买饭占座去了……这种一派繁荣的景象,我是从来没有体会过的……
还好还有一同奋斗的朋友们,跟我一起升入青理工的山青院的童鞋~~哈哈 现在我们三个一起上课,一起自习,甚至我们把手机号都办成了连号,哇哈哈,那天X童鞋发短信问我,你跟L办的是情侣号嘛~~我给他回短信说 还有M,我们三个都是连号的说……X直接无语……
昨天带着L,M在家家园跟飞小约着见面,哈,飞小也带去了一堆童鞋,大家一起看了场电影,电影很不错《盗梦空间》里面阐述的那种梦中梦的场景,以及“植入”的概念,让我真的觉得很多事情都可以得到合理的解释了,比如:为什么在显示世界中遇到的一个人感觉似曾相识~~或许就是有人在你的梦中 给你的大脑植入了这个人哇~哈哈
我现在很无奈的担任着班长,其实自己是很抗拒的,毕竟是做技术的出身,跟人打交道的能力相对弱了一些,这正是这个原因,我想锻炼下自己,毕竟,大学是最后一个可以让自己不用付出很大代价就能完善自己的机会了~~我要珍惜这个机会~~但是,真的不排除如果这个职务跟自己Coding发生冲突的话,会选择辞去这个职务~~不过还好 大家都还比较容易相处哈~~
下面是不是该说说学校了,这黄岛的老校区说起来那可是真的有够烂~~真的很破,甚至连路灯都生锈了,等我闲下来,拍几张照片,传上来跟大家分享下下吧 说真的,现在最盼望的事情,就是能快点搬小区了,让我快点搬到嘉陵江路上的新校区吧 呼呼呼~~!
哎 我这也是抽中午午休的这一点空隙时间写的东西~~又成流水账了,忍了忍了……希望过几周以后能慢慢的适应这种类似高中的生活吧~~
我要加油!!