博文
[置顶] 程序员的苦恼-选择VB.NET还是C# (转)(2006-09-04 11:35:00)
摘要:分享一篇好文章,帮你做决策: 互联网上的各大讨论区或者电子邮件的讨论列表都对微软的VB.NET以及C#的各种优越性做了探讨。这些讨论围绕的主要问题就是,我应该先学哪一个,VB.NET还是C#? 我写这篇文章的目的就是想帮您解决这个问题。我并不是想动摇你倾向哪一种语言而是想解决一些大家在基本问题上的疑惑,以便大家能够作出自己的决定,选择一种自己觉得用起来最舒适的语言。我将尽量避免讨论一些语法上的模棱两可的话,就像“C#的括弧太多了,”“VB.NET句子太冗长,”或者“我讨厌C#(或者VB.NET)因为它能(或者不能)区分大小写。”之类的话。评论语法的好坏是你个人品味的问题。相反,我将着重讨论一些我见到的关于这两种语言的技术方面的讨论。 在C#方面 作为微软公司最新的一种语言,并且由于它又是Java语言的小翻版,C#引起了广大的关注。 人们看上去喜欢一种语言仅仅取决于它是最新的,程序开发者们总是喜欢用最新的工具工作。其它的一些选择使用C#的理由更为具体一些。 领导潮流的东西总是无懈可击的 “如果我正准备学一门新的语言,我还是应该学C#。”这也许也是你经常听到的言论。那些推理总是这样进行的:“VB6转变到VB.NET变化已经非常大了,以至于它基本上就是一门是新的语言。如果我无论如何打算学习新语言,我想还是学C#吧,因为它是特别为.NET类的库设计的。” 这也是我听到过的关于这两方面的最苍白的争论。你也可以同样理直气壮的说,如果我无论如何打算学习新语言,我想还是学VB.NET吧,毕竟它也是一门新的语言。另外,让我们想想为什么VB.NET从其先驱者那里如此激烈地演变到现在的样子:它为了适应.NET类的库而被重新设计了。 对比管理过的和没有管理过的代码 “C#允许我写那些运行在CLS存储器控制之外的非管理代码,我可以直接访问存储器,并且使用指针。让代码自由地运行,包括使用存储器的管理,可以得到更高的效益。”这个观点有3个问题需要考虑:首先,我们不应该在Beta版本的开发环境下讨论性能问题。举个例子:在.NET的Beta1和Beta2版本之间有显著的管理代码运行速度的改善。第二,我们还不能把非管理代码比管理代码能获取多少利益量化,并且是否值得为了这些好处冒险。可以去......
[置顶] 什么是.NET?(2006-09-03 12:28:00)
摘要: Web服务从由简单网页构成的静态服务网站,发展到可以交互执行一些复杂步骤的动态服务网站,这些服务可能需要一个Web服务调用其他的Web服务,并且像一个传统软件程序那样执行命令。这就需要和其他服务整合,需要多个服务能够一起无缝地协同工作,需要能够创建出与设备无关的应用程序,需要能够容易地协调网络上的各个服务的操作步骤,容易地创建新的用户化的服务。 微软公司推出的.NET系统技术正是为了满足这种需求(还有针对JAVA)。.NET将Internet本身作为构建新一代操作系统的基础,并对Internet和操作系统的设计思想进行了延伸,使开发人员能够创建出与设备无关的应用程序,容易地实现Internet连接。
根据微软的定义:
。NET is a "revolutionary new platform, built on open Internet protocols and standards, with tools and services that meld computing and communications in new ways".
即:。NET = 新平台 + 标准协议 + 统一开发工具
。NET作为新一代互联软件和服务战略,将使微软现有的软件在网络时代不仅适用于传统的个人计算机,而且能够满足呈现强劲增长的新设备的需要。到底什么是。NET呢?微软总裁兼首席执行官Steve Ballmer把它定义为:。NET代表一个集合,一个环境,一个可以作为平台支持下一代Internet的可编程结构。
。NET的最终目的就是让用户在任何地方、任何时间,以及利用任何设备都能访问所需的信息、文件和程序。用户不需要知道这些文件放在什么地方,只需要发出请求,然后只管接收就可以了。而所有后台的复杂性是完全屏蔽起来的。
在微软的WinXP的发布会上,我注意到主持人特别强调的一句话:在未来,我们可以在任何时间,任何地点,使用任何设备获取信息(any ......
[置顶] 什么是C#(2006-09-07 00:17:00)
摘要:C#(读做 "C sharp")是微软公司在去年六月发布的一种新的编程语言,并定于在微软职业开发者论坛(PDC)上登台亮相.C#是微软公司研究员Anders Hejlsberg的最新成果.C#看起来与Java有着惊人的相似;它包括了诸如单一继承,界面,与Java几乎同样的语法,和编译成中间代码再运行的过程.但是C#与Java有着明显的不同,它借鉴了Delphi的一个特点,与COM(组件对象模型)是直接集成的,而且它是微软公司.NET windows网络框架的主角,也是用JAVA的对手.
C#是可用于创建要运行在.NET CLR上的应用程序的语言之一,它从C和C++语言演化而来,是Microsoft专门为使用.NET平台而创建的。因为C#是近期发展起来的,所以吸取了以前的教训,考虑了其他语言的许多优点,并解决了它们的问题。
使用C#开发应用程序比使用C++简单,因为其语法比较简单。但是,C#是一种强大的语言,在C++中能完成的任务利用C#也能完成。C#中与C++比较高级的功能等价的功能(例如直接访问和处理系统内存),只能在标记为“不安全”的代码中使用。这个高级编程技术是非常危险的(正如它的名称),因为它可能覆盖系统中重要的内存块,导致严重的后果。
C#代码常常比C++略长一些。这是因为C#是一种类型安全的语言(与C++不同)。在外行人看来,这表示一旦为某些数据指定了类型,就不能转换为另一个不相关的类型。所以,在类型之间转换时,必须遵守严格的规则。执行相同的任务时,用C#编写的代码通常比C++长。但C#代码更健壮,调试也比较简单,.NET总是可以随时跟踪数据的类型。在C#中,不能完成诸如“把4字节的内存放在这个数据中,使之有10个字节长,并把它解释为X”等的任务,但这并不是一件坏事。
C#只是.NET开发的一种语言,但在我看来,这是最好的一种语言。C#的优点是,它是惟一为.NET Framework设计的语言,是在移植到其他操作系统上的.NET版本中使用的主要语言。要使语言如VB.NET尽可能类似于其以前的语言,且仍遵循CLR,就不能完全支持.NET代码库的某些功能。但C#能使用.NET Framework代码库提供的每种功能。.NET的最新版本还对C#语言进行了几处改进,这是为了满足开发人员的要求,使之更强大......
关于ASP.NET在IIS一些问题的经验总结(2006-10-17 00:00:00)
摘要:很多开发人员对于IIS和ASPNET的安装等问题困扰,特此做下面的小总结,请大家多交流!
iis 坏了修复办法!!!!!!!
一般IIS运行不了ASP.NET,试一下下面四种方法,99%有效:
1。.NET 安装的顺序应该是先装IIS,再装VS.NET,如果次序反了,或者IIS重装了,就需要使用aspnet_regiis.exe -i来重新安装IIS
Mapping(主要用于aspx, asmx等文件的Extention的匹配)。在C:\WINDOWS\Microsoft.NET\Framework\v1.0.3705目录下,运行下
面的命令:aspnet_regiis.exe -i
2。重设ASPNET的密码,然后在下面的目录中找到Machine.config文件:%Systemroot%\Microsoft.NET\Framework\v1.0.3705\CONFIG
(Systemroot是你的安装目录),在<processModel>标识中添加/修改:userName和password3。如果还不行,重装IIS,然后再按照方
法1进行操作4。如果你的机器是域控制器,你可以参考Q315158:
ASP.NET Does Not Work withASPNET Account on Domain
Controller:http://support.microsoft.com/default.aspx?
scid=KB;EN-US;Q315158&和你大致讲一下操作的步骤:
1。在Administrative Tools->Active Directory Users and
Computers中建立一个名为ASPUSER的用户,将该用户添加到用户组
中(默认情况下已在User Group中)
2。在Administrative Tools->Local Security Settings->Local
Policy->UserRight Assignment中,双击右栏的Log on as a batch
job项,在弹出的窗口中点击Add,选择或输入刚才建立的ASPUSER帐号,确定。(需要重启机器)
3。确保ASPUSER帐号有相应文件、目录的访问权......
ASP.NET访问Oracle数据库的方法(2006-10-16 23:58:00)
摘要:Microsoft .NET Framework Data Provider for Oracle(以下简称为.NET for Oracle)是一个.NET Framework的组件。这个组件为我们使用.NET访问Oracle数据库提供了极大的方便。那些使用.NET和Oracle的开发人员,相信会乐的手舞足蹈,因为他们再也不必使用那个并不十分“专业="的OLEDB来访问Oracle数据库了。这个组件的设计非常类似.NET中内置的Microsoft .NET Framework Data Provider for SQL Server和OLEDB。如果读者非常熟悉这两个内置的组件,那么相信您学习这个组件也是轻车熟路的。
本文针对的读者主要是那些考虑使用.NET技术访问Oracle数据库的程序员而编写,需要有一定的C#语言、ADO.NET技术和Oracle数据库基础知识。文中结合ASP.NET技术给出了相关示例以及具体的注释。当然,这并不意味着.NET for Oracle组件只能为编写ASP.NET程序提供服务,同样它还可以为使用.NET技术编写的Windows程序提供方便。
本文将简要介绍ASP.NET for Oracle的系统需求和安装以及核心类,之后重点详解使用此组件访问Oracle数据库的方法。其中包括.NET for Oracle对于各种Oracle数据库中的特殊数据类型的访问、各种核心类使用方法的介绍并且在文章的最后给出了示例等等。
--------------------------------------------------------------------------------
系统需求和安装
在安装.NET for Oracle之前,必须首先安装.NET Framework version 1.0。同时,还要确定安装了数据访问组件(MDAC 2.6及其以上版本,推荐版本是2.7)。既然是要访问Oracle数据库的数据,那么还需要安装Oracle 8i Release 3 (8.1.7) Client及其以上版本。目前Oracle9i已经发布,作者本人安装的是Oracle 9i,本文中所有的程序,都是在Oracle9i数据库环境下编写和调试完成的。
组件的安装非常方便,直接运行oracle_net.msi。在安装过程中无需任何设......
用ASP.NET/C#连接Access和SQL Server数据库(2006-10-16 23:54:00)
摘要:连接Access
首先看一个例子代码片断:程序代码:
--------------------------------------------------------------------------------
using System.Data;using System.Data.OleDb;
......
string strConnection="Provider=Microsoft.Jet.OleDb.4.0;";strConnection+=@"Data Source=C:\BegASPNET\Northwind.mdb";
OleDbConnection objConnection=new OleDbConnection(strConnection);
......
objConnection.Open();objConnection.Close();
......
--------------------------------------------------------------------------------
解释:
连接Access数据库需要导入额外的命名空间,所以有了最前面的两条using命令,这是必不可少的!
strConnection这个变量里存放的是连接数据库所需要的连接字符串,他指定了要使用的数据提供者和要使用的数据源.
"Provider=Microsoft.Jet.OleDb.4.0;"是指数据提供者,这里使用的是Microsoft Jet引擎,也就是Access中的数据引擎,asp.net就是靠这个和Access的数据库连接的.
"Data Source=C:\BegASPNET\Northwind.mdb"是指明数据源的位置,他的标准形式是"Data Source=MyDrive:MyPath\MyFile.MDB".
ps: 1."+="后面的"@"符号是防止将后面字符串中的"\"解析为转义字符. 2.如果要连接的数据库文件和当前文件在同一个目录下,还可以使用如下的方法连接: strConnection+="Data Source="; strConnection+=MapPath("Northwind.mdb"); 这样就可以省得你写一大堆东西了! ......
在ASP.NET使用javascript一点小技巧(2006-10-16 23:52:00)
摘要:我们在进行ASP.NET开发时,经常会用到一些javascript脚本,比如: private void Button1_Click(object sender, System.EventArgs e) { Response.Write( "<script language='javascript'>alert('OK');</script>") ; }
经常是重复的书写这些脚本,如果我们能做成一个相应的函数就好了,直接就可以拿来使用。很多人都有自己的一些javascript的函数,但是大部分向这样的:
/// <summary> /// 服务器端弹出alert对话框 /// </summary> /// <param name="str_Message">提示信息,例子:"请输入您姓名!"</param> /// <param name="page">Page类</param> public void Alert(string str_Message,Page page) { if(!page.IsStartupScriptRegistered ("msgOnlyAlert")) { page.RegisterStartupScript("msgOnlyAlert","<script>alert('"+str_Message+"');</script>"); } }
但是,用的时候,每次都要继承这个类,用起来还是有些麻烦,如果函数是静态的函数,类是静态的类的话,我们不要继承就可以使用。但是我们怎么写呢?
看看这段代码
#region public static void MessageBox( Page page, string msg ) /// /// 弹出对话框 /// /// 当前页面的指针,一般为this /// 消息 public static void MessageBox( Page page, string msg ) { StringBuilder StrScript = new StringBuilder(); StrScript.Append( "<script language=javascri......
利用ASP.NET的三种缓存提高站点性能(下)(2006-10-16 23:50:00)
摘要:缓存API,使用Cache对象
页面级和用户控件级输出缓存的确是一种可以迅速而简便地提高站点性能的方法,但是在ASP.NET中,缓存的真正灵活性和强大功能是通过Cache对象提供的。使用Cache对象,您可以存储任何可序列化的数据对象,基于一个或多个依赖项的组合来控制缓存条目到期的方式。这些依赖项可以包括自从某对象被缓存后经过的时间、自从某对象上次被访问后经过的时间、对文件或文件夹的更改以及对其他缓存对象的更改,在略作处理后还可以包括对数据库中特定表的更改。
在Cache中存储数据
在Cache中存储数据的最简单的方法就是使用一个键为其赋值,就像HashTable或Dictionary对象一样:
Cache["key"] = "value";
这种做法将在缓存中存储项,同时不带任何依赖项,因此它不会到期,除非缓存引擎为了给其他缓存数据提供空间而将其删除。要包括特定的缓存依赖项,可使用Add()或Insert()方法。其中每个方法都有几个重载。Add()和Insert()之间的唯一区别是,Add()返回对已缓存对象的引用,而Insert()没有返回值(在C#中为空,在VB中为Sub)。
示例
Cache.Insert("key", myXMLFileData, new System.Web.Caching.CacheDependency(Server.MapPath("users.xml")));
该示例可将文件中的xml数据插入缓存,无需在以后请求时从文件读取。CacheDependency的作用是确保缓存在文件更改后立即到期,以便可以从文件中提取最新数据,重新进行缓存。如果缓存的数据来自若干个文件,还可以指定一个文件名的数组。
Cache.Insert("dependentkey", myDependentData, new System.Web.Caching.CacheDependency(new string[] {}, new string[] {"key"}));
该示例可插入键值为“key”的第二个数据块(取决于是否存在第一个数据块)。如果缓存中不存在名为“key”的键,或者如果与该键相关联的对象已到期或被更新,则“dependentkey”的缓存条目将到期。
Cache.Insert("key"......
利用ASP.NET的三种缓存提高站点性能(中)(2006-10-16 23:48:00)
摘要:片段缓存,用户控件输出缓存
缓存整个页面通常并不可行,因为页面的某些部分是针对用户定制的。不过,页面的其他部分是整个应用程序共有的。这些部分最适合使用片段缓存和用户控件进行缓存。此外,菜单和其他布局元素,尤其是那些从数据源动态生成的元素,也可以用这种方法进行缓存。
如果需要,可以按以下条件选择需要缓存的控件:
(1)某控件的属性已改变
(2)由页面级输出缓存所支持的任何一种页面或控件状态改变
一旦对某些控件进行了缓存,使用它们的几百个页面就可以共享这些控件,而不再需要为每个页面保留单独的控件缓存版本。
实现
片段缓存使用的语法与页面级输出缓存一样,但其应用于用户控件(.ascx文件)而不是Web窗体(.aspx文件)。除了Location属性,对于OutputCache在Web窗体上支持的所有属性,用户控件也同样支持。用户控件还支持名为VaryByControl的OutputCache属性,该属性将根据用户控件(通常是页面上的控件,例如,DropDownList)的成员的值改变该控件的缓存。如果指定了VaryByControl,可以省略VaryByParam。最后,在默认情况下,对每个页面上的每个用户控件都单独进行缓存。不过,如果一个用户控件不随应用程序中的页面改变,并且在所有页面都使用相同的名称,则可以设置参数Shared的值为“true”,该参数将使用户控件的缓存版本供引用该控件的所有页面使用。
示例
<%@ OutputCache Duration="60" VaryByParam="*" %>
该示例将缓存用户控件60秒,并且将针对查询字符串的每个变动、针对此控件所在的每个页面创建单独的缓存条目。
<%@ OutputCache Duration="60" VaryByParam="none" VaryByControl="CategoryDropDownList" %>
该示例将缓存用户控件60秒,并且将针对CategoryDrop
DownList控件的每个不同的值、针对此控件所在的每个页面创建单独的缓存条目。
<%@ OutputCache Duration="60" VaryByParam="none" VaryByCustom="browser......
利用ASP.NET的三种缓存提高站点性能(上)(2006-10-16 23:47:00)
摘要: [简介]
ASP.NET提供三种主要形式的缓存:页面级输出缓存、用户控件级输出缓存(或称为片段缓存)和缓存API。输出缓存和片段缓存的优点是非常易于实现,在大多数情况下,使用这两种缓存就足够了。而缓存API则提供了额外的灵活性(实际上是相当大的灵活性),可用于在应用程序的每一层利用缓存。本文全面介绍了这三种缓存技术在系统各层中的应用。
在ASP.NET提供的许多特性中,缓存支持无疑是我最欣赏的特性,我这样说当然是有充分理由的。相比ASP.NET的所有其他特性,缓存对应用程序的性能具有最大的潜在影响,利用缓存和其他机制,ASP.NET开发人员可以接受使用开销很大的控件(例如,DataGrid)构建站点时的额外开销,而不必担心性能会受到太大的影响。为了在应用程序中最大程度地利用缓存,您应该考虑在所有程序级别上都实现缓存的方法。
Steve的缓存提示
尽早缓存;经常缓存
您应该在应用程序的每一层都实现缓存。向数据层、业务逻辑层、UI或输出层添加缓存支持。内存现在非常便宜-因此,通过以智能的方式在整个应用程序中实现缓存,可以获得很大的性能提高。
缓存可以防止许多过失
缓存是一种无需大量时间和分析就可以获得“足够良好的”性能的方法。这里再次强调,内存现在非常便宜,因此,如果您能通过将输出缓存30秒,而不是花上一整天甚至一周的时间尝试优化代码或数据库就可以获得所需的性能,您肯定会选择缓存解决方案(假设可以接受30秒的旧数据)。缓存正是那些利用20%付出获得80%回报的特性之一,因此,要提高性能,应该首先想到缓存。不过,如果设计很糟糕,最终却有可能带来不良的后果,因此,您当然也应该尽量正确地设计应用程序。但如果您只是需要立即获得足够高的性能,缓存就是您的最佳选择,您可以在以后有时间的时候再重新设计应用程序。
页面级输出缓存
作为最简单的缓存形式,输出缓存只是在内存中保留为响应请求而发送的HTML的副本。其后再有请求时将提供缓存的输出,直到缓存到期,这样,性能有可能得到很大的提高(取决于需要多少开销来创建原始页面输出-发送缓存的输出总是很快,并且比较稳定)。
实现
要实现页面输出缓存,只要将一条OutputCache指令添加到页面即可。
<%@ OutputCache Duration="60" Vary......
