Showing posts with label Dot Net. Show all posts
Showing posts with label Dot Net. Show all posts

Friday, October 21, 2011

[使用] [新手日记].NET2.0 编译+安装

这个技术含量没什么,不过还是T出来帮助大家少走弯路吧.
其实很简单的,新手也可以这样开始ASP.NET.
一.编译DNT的DLL组件
1.首先用VS2005打开discuz.sln解决方案(就是很多工程结合在一起的工程 )
Release方式编译Discuz.Common,Discuz.Controls,Discuz.Forum,Discuz.Setup这4个项目
生 成Discuz.Common.DLL,Discuz.Controls.DLL,Discuz.Forum.DLL,Discuz.Setup.DLL 几个DLL组件(分别在Common,Controls,Forum,Discuz.Setup文件夹下的bin/Release找到他们)
然后拷贝到某处待用
(编译命令在菜单栏,选中哪个项目就可以编译相应的项目--也可以一起编译生成的,大家试试)

二.转换为Web应用程序
我是用WEB应用程序的,感觉这个比website方便,所以决定转化为web应用程序项目,以下为转化过程:
VS2005 SP1-->新建-->项目--->左栏选"Visual C#",右栏选择"ASP.NET Web应用程序"(下面的名称大家随意了哈,我用的DNT )-->然后删除VS2005自动创建的Default.aspx和Web.config(不准他们和DNT抢 )


2.拷贝除了Common,Controls,Forum,Discuz.Setup以外的文件夹和文件到项目文件夹下面.

--->VS2005 "项目"--->"显示所有文件"--->对添加进入的文件夹选中,右键--->"包括在项目中"
3.把第一步骤里面生成的4个DLL文件连同微软的那个Interop.SQLDMO.dll添加到项目引用里面.
方法:
解决方案资源管理器里面对"DNT"项目名右键-->"添加引用"-->找到文件添加就是了.

4.转化为WEB应用程序.
解决方案资源管理器里面对"DNT"项目名右键-->"转换为Web应用程序".

转化完毕后,呵呵基本就可以用了哦.

到此 转化完毕.

三.生成DNT的Discuz.ForumPage.dll组件
然后大家可能会问,还差一个Discuz.ForumPage.dll是哪儿来啊?-->就是这些页面文件的后台代码生成撒
生成Discuz.ForumPage.dll:
1.解决方案资源管理器里面对"DNT"项目名右键-->"属性"-->应用程序选项卡下面 "程序集名称"修改为Discuz.ForumPage.(主要是为了生成DLL名为Discuz.ForumPage.DLL )
2.VS2005 "生成"-->"生成DNT"(项目名不同名字就不同哈 )

到此,编译生成工作完全告一段落.
===
安装篇:
可以在VS2005 或者IIS下面进行
这里讲IIS环境安装吧.
按照官方文档,建立数据库,建立IIS站点.执行http://localhost:15000/setup/index.aspx(15000是自定义的IIS站点端口号,依据个人配置更改),然后都和官方的一样了...
就不废话了,建议大家去看官方文档.

安装完毕后可能页面有乱码,进入后台重新生成模版 更新缓存就可以了.
后台管理文件还是乱码的,
请见13楼 pyfhua 提供的工具,很好用http://nt.discuz.net/showtopic-17420-1.html#160159
[在乱码ASPX页添加
复制代码
也可以]
这里有个已经转化好了的WEB APP项目,(后台还是乱码 大家自己修改下吧.我没有更好的办法现在)
  1. http://pickup.mofile.com/2142132347214524
复制代码


source: http://nt.discuz.net/showtopic-17420.html

Friday, July 8, 2011

正确理解.NET和SQL Server中“空值”

初学数据库编程的人,经常会对“空值”产生疑问,例如通过编程新建的一个表中所有数据皆显示为,手动添加并删除文字后又变成了空白;一个字符串类型的字段,明明没有填值,却不等于"";用ADO.NET从数据库中取值,每遇到有的就出错……这需要我们正确认识.NET和SQL Server中几种不同的“空值”。
1:真正的空值
等同“没有输入的值”,可以出现在大多数类型的字段中(如果没有别的约束条件),SQL server中表示为null,显示为,手工在SQL Server企 业管理器中输入的方法是按Ctrl+0。它在.NET中对应System.DBNull.Value。在T-SQL命令中,判断一个值是不是空值,要用 “is null”而不是“= null”;处理空值有个ISNULL函数,它使用指定的值替换null。用ADO.NET从数据库得到的空值无法自动转化为空字符串或Nothing, 须手动检测:如果得到System.DBNull.Value,则赋给数据对象Nothing或其它自定义的有意义的值。
2:空字符串(零长度字符串),只出现在字符串类型(如nvarchar)的字段中,SQL server中表示为’’,显示为空白,手工在SQL Server企业管理器中输入时清空一个单元格即可。它在.NET中对应System.String.Empty,也就是我们常用的""。在T-SQL命令中处理空字符串和处理一般的字符串没什么区别。用ADO.NET从数据库得到的空字符串也和一般的字符串没什么区别。
相关的概念还有VB.NET中的Nothing和对应于C#.NET中的null(注意这个null是C#.NET中的null而非SQL Server中null),它们在.NET中是表示不引用任何对象的空引用的值,在传入SQL server时,根据不同的上下文环境,可能存为真正的空值(比如在更新一个字符串类型的字段值时),也可能调用在SQL server中自定义的默认值(比如传给一个有默认值的存储过程参数),也可能因为无法进行类型转换而引发.NET异常。因此在用ADO.NET向SQL Server中存储数据时,大家一定要小心使用Nothing。

Monday, June 6, 2011

什么是Ispostback?怎么理解?

1.就是判断是否从服务器第一次传来页面,当页面第一次打开时为false,因为不是postback,从第二次开始就是true了.如想在页面上的dropdowmlist中在页面第一次就添加数据,而不是每次都添加,那就再page_load()里用if(!ispostback)

2.控件的值改变以后,如果控件的autopostback=true,就会有一个刷新页面的动作,那个动作就叫ispostback

3.另外可以这么理解,在需要每次页面Load的时候,根据需要把每次都要加载的代码放在IsPostBack中,把只需要加载一次的代码放在if(!IsPostBack)中.每次用户回传服务器任何信息的时候,都会引发isPostBack属性.用来判断此用户是否曾经做过登陆或者其他事件

Thursday, May 26, 2011

[.Net]More than one exclusive group is not allowed

I have a ASP.Net web application deploy on 2 load balaced web servers with its source code stored on shared folder of file server.
I keep getting [more than one exclusive group is not allowed] while trying to browse my web site.
After digging into event log, I also found Event ID:1310 with Event Code:3008 were logged on Event log
This exception is thrown due to mCAS (code access security) exclusive policy were set again SAME code group twice, so that .Net could not decide which policy should be applied.

We can fix that in a simple way:

run

[%WINDOWS%\Microsoft.Net\Framework\v2.0.50727\caspol - rg [%group_name_or_lable%]
to remove duplicated policy.

source: http://nettecharticles.blogspot.com/2008/05/netmore-than-one-exclusive-group-is-not.html

將 ASP.NET 網站部署在 UNC 路徑上最重要的步驟

如果要將 ASP.NET 網站安裝在遠端的 UNC 路徑上,在設定 IIS 時除了一般檔案的存取權限外,最重要的就是 ASP.NET 的執行權限是否有正確設定,由於所有置於 UNC 路徑上的 .NET 應用程式都會預設套用 LocalIntranet 群組,所以你無法將 ASP.NET 佈署在 UNC 路徑上,除非自行新增 .NET 安全性原則。
在沒設定 .NET 安全性群組之前,不管你怎麼設定都會出現以下安全性例外狀況的錯誤訊息:
安全性例外狀況 :: 例外詳細資訊: System.Security.SecurityException: 型別 'System.Web.AspNetHostingPermission, System, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089' 的使用權限要求失敗。
SecurityException: Request for the permission of type ‘System.Web.AspNetHostingPermission, System, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089′ failed

解決此問題的步驟如下:
1. [開始] / [執行] / 輸入 cmd 並按下 Enter
2. 進入 .Net Framework 的安裝目錄(注意:x86 架構與 x64 架構的目錄並不相同)
    如果是 x64 架構請進入 C:\Windows\Microsoft.NET\Framework64\v2.0.50727
    如果是 x86 架構請進入 C:\Windows\Microsoft.NET\Framework\v2.0.50727
    注意: 如果進入錯誤的路徑,怎麼設定還是無法使用,這取決於你的 .NET 應用程式是跑什麼架構!
3. 執行 CASPOL.exe 工具授權特定 UNC 路徑為「完全信任」,請參考以下指令
caspol -m -ag 1. -url "file://\\server\share\*" FullTrust -exclusive on
  接著畫面會問你是否確認要執行這個動作,它會要你輸入 yes 或 no,但你只能輸入 yn 喔!( 按 y )
  
  我們可以透過 caspol -listgroups 指令驗證此安全性原則是否設定成功:
 
4. 最後去設定 IIS ( IIS6 或 IIS 7 ),如果先前已經設定好請務必記得「回收應用程式集區」才能讓生效!

其他補充說明:
1. 如果你不小心新增了兩個重複的 UNC 路徑到 .NET 安全性原則中會造成 ASP.NET 無法執行
   錯誤訊息是: 不允許一個以上的獨佔群組。More than one exclusive group is not allowed.
   System.Security.Policy.PolicyException: 不允許一個以上的獨佔群組。
2. 如果 CASPOL.exe 本身在執行的時候會引發例外(Exception),那可能要重新開機才能解決此問題!
3. 若要移除先前設定的安全性原則,可以參考以下指令:
caspol -rg 1.6
注意:所有 .NET 安全性原則都有個編號,記得先用 caspol -listgroups 列出所有群組,並找出你之前新增的安全性原則編號,然後才能帶入指令中。


source: http://blog.miniasp.com/post/2010/02/28/Setup-aspnet-website-on-remote-UNC-Path.aspx

Thursday, May 19, 2011

DataTable,DataView和DataGrid中一些容易混淆的概念

一、DataTable 
   
   DataTable表示内存中数据的一个表,它完全是在内存中的一个独立存在,包含了这张表的全部信息。DataTable可以是从通过连接从数据库中读取出来形成的一个表,一旦将内容读到DataTable中,此DataTable就可以跟数据源断开而独立存在;也可以是完全由程序自己通过代码来建立的一个表。 
   
  ◆ DataColumn 
   
  一个表是由行和列组成的一个两维的结构。表的结构是由DataColumn 对象的集合组成,DataColumn 对象集合可由DataTable.Columns 属性中能获取到,通过定义每一列的数据类型来确定表的架构,类似数据库中定义表。定义完表的结构就可以根据结构来生成DataRow,用DataTable.NewRow()方法来生成此DataTable结构的新行。 
  一个DataTable是由DataRow的集合组成的, DataRow的集合这个可以由DataTable.Rows 属性来访问。 
   
  DataTable还可以通过现有的列用Expression 属性的表达式创建一些列。 
   
  1、创建计算出的列 
  比如:已经有了一个表结构,表中有一个DataColumn的集合,其中有一个叫UnitPrice的列,你可以新建一个DataColumn,设置好ColumnName,再设置此列的表达式,DataColumn.Expression = "UnitPrice * 0.086",这个列的值就是名字为UnitPrice的列计算出来的,在创建表达式时,使用 ColumnName 属性来引用列。 
   
  2、第二个用途是创建聚合列 
  聚合列聚合通常沿着关系执行(有关关系的描述见下面DataRelation部分),如果order表有名为 detail 的子表,两个表之间通过order.orderid和detail.orderid两个列建立一个关系 DataRelation 对象名为“order2detail”,在主表order中就可以建立一个聚合列,将计算每个order在detail表中含有的所有item的价格的和:DataColumn.Expression = “sum(child(order2detail).price)",child(order2detail)表示通过关系order2detail联系到的子表,child(order2detail).price就表示子表的price列。 
   
  ◆ DataRow 
   
  DataRow对象没有直接在代码中使用的构造函数,一般是从具有一定结构的DataTable用NewRow()方法来新建一个DataRow对象。一个DataRow根据其是独立的,还是属于某个DataTable,是否修改过,是否被DataTable删除等等不同的情况有不同的状态,由DataRow.RowState属性公开,如下表: 
   
   
  成员名称 说明 
  Added 该行已添加到 DataRowCollection 中,AcceptChanges 尚未调用。Deleted 该行已通过 DataRow 的 Delete 方法被删除。 
  Deleted 该行已通过 DataRow 的 Delete 方法被删除。 
  Detached 该行已被创建,但不属于任何 DataRowCollection。DataRow 在以下情况下立即处于此状态:创建之后添加到集合中之前;或从集合中移除之后。 
  Modified 该行已被修改,AcceptChanges 尚未调用。 
  Unchanged 该行自上次调用 AcceptChanges 以来尚未更改。 
   
  一个DataRow对象刚被创建之后其状态是Detached,是孤立的一个存在,所以建立了DataRow之后在DataRow中的单元填充了数据后还要通过DataTable.Rows.Add(DataRow)方法将此DataRow添加到DataTable,DataRow添加到DataTable后, 这个DataRow的状态就转变为Added。当修改了这个DataRow后,这个DataRow状态转为Modified,当用DataRow.Delete()方法删除DataRow后,DataRow状态将转为Deleted,不过此行还存在在DataTable中的,只是状态改变了,这时用DataTable.Rows.Count查看行数,跟删除前是一样的。只有在调用了DataTable.Remove(DataRow)方法后,此DataRow才被从DataTable移除,状态也回复到Detached孤立状态。 
   
  一旦调用了DataTable.AcceptChanges()方法后,所有的行将根据不同的状态做不同的处理,Added、Modified、Unchanged将保留当前值,Deleted的行将从DataTable中移除,最后所有的行的状态都置为Unchanged。当DataTable是从DataAdapter.Fill(DataSet,DataTable)方法填充而形成的,Fill()方法将自动调用AcceptChanges()方法,将DataTable的行状态都置为Unchanged。并且,如果Fill方法中指定的那个DataTable在要填充的那个DataSet不存在时,会生成一个跟数据源表同样的结构的DataTable并填充数据。 
   
  ◆ DataRelation 
   
  表示两个 DataTable 对象之间的父/子关系。可以类比于数据库中的表之间的关系,父表相当于关系列为主键的表,子表相当于关系列为外键的表。DataRelation 构造函数一般为:DataRelation(String, DataColumn, DataColumn) ,string为关系名,第一个DataColumn为建立关系的父表列,第二个DataColumn为建立关系的子表列,建立关系的两个列的 DataType 值必须相同。 
   
  建立好了关系,必须把这个关系加入到DataTable的ParentRelations属性或ChildRelations 属性,这两个属性包含这个表的所有的跟父表的关系和跟子表的关系。若关系中此表是父表则将此关系加入到ChildRelations集合中,否则加入到ParentRelations集合中。 
   
  二、DataView 
   
  DataView表示用于排序、筛选、搜索、编辑和导航的 DataTable 的可绑定数据的自定义视图。可以将DataView同数据库的视图类比,不过有点不同,数据库的视图可以跨表建立视图,DataView则只能对某一个DataTable建立视图。DataView一般通过DataTable.DefaultView 属性来建立,再通过通过RowFilter 属性和RowStateFilter 属性建立这个DataTable的一个子集。 
   
  RowFilter属性用来筛选要查看DataTable中哪些行的表达式,这个表达式同上面所说的建立计算列的表达式相同。例如:"LastName = Smith ",这就是只查看列LastName的值为 Smith 的那些数据行。 
   
  RowStateFilter 属性用来设置 DataView 中的行状态筛选器,上面介绍DataRow时介绍了DataRow的状态,一个DataRow可能有五种状态,RowStateFilter就是可以通过这些状态来筛选要查看的行集。其实DataRow不仅有五种状态,DataRow还有版本的问题,比如当DataRow的状态为Modified,即这行已经被修改了,这时这个DataRow就会有两个版本,Current版本和Original版本(修改前的)。实际上RowStateFilter属性是综合了DataRow的状态和版本来筛选的(RowStateFilter确省值是CurrentRows)见下表: 
   
  成员名称 说明 
  Added 一个新行。 
  CurrentRows 包括未更改行、新行和已修改行的当前行。 
  Deleted 已删除的行。 
  ModifiedCurrent 当前版本,原始数据(请参阅 ModifiedOriginal)的修改版本。 
  ModifiedOriginal 原始版本(尽管它后来已被修改并以 ModifiedCurrent 形式存在)。 
  None 无。 
  OriginalRows 包括未更改行和已删除行的原始行。 
  Unchanged 未更改的行。 
   
  DataView.Count属性得到的计数是在应用了 RowFilter 和 RowStateFilter 之后,获取 DataView 中记录的数量。 
   
  DataView是建立在DataTable基础上的,DataView.Table 属性可以得到此DataView对应的那个DataTable。DataView的行叫DataRowView,可以从DataRowView直接通过DataRowView.Row 属性得到此DataRowView对应的DataRow。 
   
  三、DataGrid 
   
  这里说的DataGrid是winform中的DataGrid,一般都是跟DataView绑定来显示DataTable中的数据,和修改DataTable中的数据。 
  DotNet的DataGrid的功能强大,可是在使用上与以前的习惯不太一样,有时还比较麻烦,所以很多人都对这个DataGrid感到有些摸不着头脑,有一种无从下手的感觉,其实把一些概念搞清楚了许多问题就会迎刃而解了。 
   
  DataGrid通过DataSource 和 DataMember 属性来绑定其要显示的数据源。数据源一般是DataTable、DataView、DataSet等,不过将这些数据源绑定到DataGrid时实际上是绑定的DataView。若数据源是DataTable时,实际上是绑定了此DataTable的DefaultView,若数据源是DataSet时,则可以向 DataMember 属性设置一个字符串,该字符串指定要绑定到的表,然后再将DataMember指定的那个DataTable的DefaultView绑定到DataGrid。 
   
  所以DataGrid实际显示的是DataTable经过筛选的DataView。


source: http://www.cnblogs.com/zhengxiqiang/archive/2009/07/26/1531301.html

Tuesday, October 5, 2010

比较Asp.net Ajax,Jquery,ExtJs框架

1.现流行的Ajax框架技术简介
现有的Ajax从框架角度分级的话,可以有以下分类:
·零级,完成base工作,包括扩展原有对象的方法,Ajax通讯部分,比较精简。
·一级,完成effect工作,包括增加常用效果转换函数,如tween、drag、maskLayer、fade等的特效。
· 二级,完成component工作,包括对话框、列表、树、日历等的组件。
·三级,完成application工作,包括完整的前端平台,允许用户定义能实现一定功能的模块。
一些框架只做零级,如Prototype.js,一些框架做到一级,如jQuery ,一些框架做到了三级,如Asp.net Ajax 和EXT。
选择合适的Ajax框架能提升程序效率,减少开发工作量,优化显示效果等作用。
  (1)Asp.net Ajax 简介
  主页:http://www.asp.net/cn/
设计思想
ASP.NET Ajax集成了一套客户端脚本库使得与功能丰富的、基于服务器开发平台的 ASP.NET结合在一起。其服务器端编程模型相对于客户端编程模型较为简单,而且容易与现有的ASP.NET程序相结合,通常实现复杂的功能只需要在页 面中拖几个控件,而不必了解深层次的工作原理,除此之外服务器端编程的ASP.NET AJAX Control Toolkit含有大量的独立AJAX控件和对ASP.NET原有服务器控件的AJAX功能扩展。
  (2)Jquery简介
主页:http://jquery.com/
设计思想
简洁的思想:几乎所有操作都是以选择DOM元素(有强大的Selector)开始,然后是对其的操作(Chaining等特性)。本身特别容易上手, 代码非常简单,非常贴近原生态的JavaScript,文件也非常小。
  (3)Extjs 简介
主页:http://extjs.com/
设计思想
100%面向对象和组件化的思想,一致的语法,全局的命名空间。文档的完整,规范,方便。所有的组件(widgets)都可直接使用,而无需进行设置
  2.性能比较
Ajax 应用程序的性能取决于 Web 应用程序的几个方面:
·服务器响应时间
·网络传输时间
·客户机 JavaScript 的处理时间
可以用不同的框架制作出程序样例,使用FireBug测试其性能
从生成机制来说
Asp.net Ajax 服务器控件会生成其控制代码,生成的js文件可能稍微大些
MicrosoftAjax原始文件比较小,在82k ,加载速度比较快
Jquery原始文件比较小,在40k左右,加载速度比较快
Ext2.0原始文件500多k,加载速度稍慢。
当然可以通过性能优化,减少不必要的加载项,使用缓存等技术提升Ajax的性能。
  3.易用性比较
  (1)Asp.net Ajax的使用
和VS2008 开发环境集成,开发和调试非常方便。
通常实现复杂的功能只需要在页面中拖几个控件,而不必了解深层次的工作原理,除此之外服务器端编程的ASP.NET AJAX Control Toolkit含有大量的独立AJAX控件和对ASP.NET原有服务器控件的AJAX功能扩展,实现起来也非常简单。网上有大量的书籍,源码和视频 资料,同时也是微软官方社区支持的。
 (2)Jquery 的使用
微软的visual studio 2008 sp1支持对jquery的动态提示,只要在代码页导入对应的vsdoc脚本就可以实现智能提示。该框架也有大量的示例它的文档说明很全,而且各种应用也说得很详细,同时还有许多成熟的插件可供选择.
  (3)Extjs的使用
微软的visual studio 2008 同样支持支持对Extjs的动态提示,只要在代码页导入对应的vswd-ext脚本就可以实现智能提示。该框架也有大量的源示例,它的文档说明很全,而且各种应用也说得很详细.

开发.net(Dot Net)程序常用软件

1)vs2008( Microsoft Visual Studio 2008)
功能:开发.net程序。

2)TestDriven.NET
功能:用于单元测试。
下载网址:请到网址 http://testdriven.net/download.aspx 下载其中的 个人版(Personal Version ),请勿下载企业版(Enterprise Version)。个人版功能完全够用。

3)firebug
功能:调试客户端js,监控客户端网页的性能,数据的发送和接受状况,检查客户端错误。
下载网址:这个需要先下载安装 firefox 浏览器,下载网址:http://www.mozillaonline.com/
安装firefox完毕之后,打开firefox,到 “工具->附件组件->获取附加组件” 中搜索 firebug,出现结果之后,点击安装即可。


4)IETester
功能:模拟ie5.5/ie6/ie7/ie8等多种ie浏览器,用于浏览器兼容测试。
下载网址:http://www.my-debugbar.com/wiki/IETester/HomePage

5)notepad++
功能:轻量级编辑器,在需要简单的修改一下文本(网页或配置文件)的情况下使用,避免每次都耗费很长时间启动vs2008这个庞然大物。这个软件不是必须的,你可以使用其他编辑器,比如 editplus 或 vim 等代替。
下载网址:http://notepad-plus-plus.org/download

*关于重构。直接使用vs2008的方法就是在vs2008中,右键代码部分,就会出现右键菜单,其中比较常用的是:重命名、提取方法、提取接口。如下图所示:

Wednesday, September 22, 2010

Important: ASP.NET Security Vulnerability

http://weblogs.asp.net/scottgu/archive/2010/09/18/important-asp-net-security-vulnerability.aspx

Wednesday, September 1, 2010

Dot Net Resource

Devexpress Asp.net Control: http://www.devexpress.com/
Download  http://download.chinaprj.cn/tag/isOEb/