RSS 2.0 Feed
技术心得
摘要:《Applications = Code + Markup》中文版我写的书评 WPF(Windows Presentation Foundation) 在框架上彻底改变了它的前辈WinForm架构设计。如果说WinForm多少还保留着Win32或者MFC的结构,那么在WPF中我们看到的是完全不同的新的形式。   以往的平台中,每个可视化控件只负责自己在屏幕上所占据的范围,这使得要实现特殊的效果变得很困难。   WPF把整个窗口看成一个整体,窗口上的每个控件可以在屏幕的任何位置进行绘画,不再受控件本身范围的限制。   WPF这个翻天覆地的变化,对我们技术人员来说,是一个非常大的门槛。很多之前的经验将不再适用。如何跨过这个门槛,是我们都要面对的一个问题。   Charles Petzold 的 《Applications = Code + Markup》这本书就很适合帮助我们跨过这个门槛。   细节决定成败,如果你想看上几十页就上手编程,这本书肯定不适合你。《Applications = Code + Markup》是循序渐进的讲解很多语言内部的东西和细节上的东西。而这些细节的积累才能帮助我们跨过WPF编程这道门槛。   这本书首先是一本:“学习用书”。书中每一个例子都很精短,但是不少例子都可以实现非常非常酷的功能。通过例子讲解知识,这对我们的学习非常有帮助。几乎每一个知识点都有一个配套的例子。在学习一个知识点后,可以动手做个酷的程序出来,学习的成就感就在这里体现出来了。   这本书又可以做一本非常有价值的“参考用书”。壹千页的容量让它可以包含非常多的知识点。据说:微软内部的不少WPF开发人员就使用本书作为必备参考书。   最后一点,WPF中引入了XAML的标记语言,微软的WPF设计软件 Microsoft Expression Design 就可以让美工设计出非常酷的WPF界面,但是这些设计的产生的结果文件是XAML文件。我有一个感觉,也许几年后,大多数的程序员,设计界面的时候,都是使用这些设计工具,而不是手写XAML,或者手写Code。要想写出性能高,精简的WPF程序,就必须懂WPF的各种细节。   这本书命名为《Applications = Code + Markup》,就是告诉我们WPF程序的各种效果,既可以用Code写出来,也可以用标志语言XAML写出来。本书章节安排上,上半部书写Code实现WPF效果,后半部书写XAML,就是要让书友避免陷入不明根源,只知道用软件设计WPF的问题。 ...[阅读全文]

posted @ | Feedback (0) |

摘要:先看一个有错误的代码:string subKeyName = @"Software\Microsoft\Windows\CurrentVersion\Run\"; //subkey name string valueName = @"App Name"; //name of the more specific key that will hold the value, "" means (Default) try ...{ RegistryKey reg = Registry.LocalMachine.OpenSubKey(subKeyName); if (reg != null) ...{ reg.DeleteValue(valueName); reg.Close(); } } catch (Exception ex) ...{ MessageBox.Show(this, ex.ToString()); }执行这段代码,你可以会收到以下异常:System.UnauthorizedAccessException原因很简单:RegistryKey.OpenSubKey (String) 以只读方式检索子项public RegistryKey OpenSubKey ( string name, bool writable)writable如果需要项的写访问权限,则设置为 true。 我们需要带第二个参数,标示我们是可写方式打开的。...[阅读全文]

posted @ | Feedback (2) |

摘要:前言: ASP.net 2.0 中,一些新的更加方便的控件被加了进来,为了方便自己学习这些控件,我把我自己学习这些控件的知识整理成这个系列文章。文章可能很简单,如果已经知道这些知识点的就不用再看了。 ASP.net 2.0中?TreeView 控件。 以前我们要在网页中实现一个树,是非常麻烦的,其最麻烦的地方在于,兼容不同版本的浏览器。而绝大多数人,对各个浏览器分别支持那些JavaScript、CSS、Html 标签不是很熟悉,就造成开发一个树复杂,甚至只支持少量的浏览器。 ASP.net 2.0 中,微软为我们预先作了很多方面的控件,TreeView 就是其中一个。 在介绍TreeView 之前,我们先在网页中,用TreeView实现一个树。我们边看代码,边来学习这个树控件。 新建一个ASPX页面,输入如下代码:<html> <body> <h3>一个简单树的展示h3> <form id="form1" runat="server"> <asp:TreeView ID="SampleTreeView" runat="server"> <Nodes> <asp:TreeNode Value="个人电脑" NavigateUrl="PC.aspx" Text="个人电脑" Target="Content" Expanded="True"> <asp:TreeNode Value="硬件" NavigateUrl="hardware.aspx" Text="硬件" Target="Content"> ......[阅读全文]

posted @ | Feedback (47) |

摘要:以下方法是抄自:http://dev.csdn.net/article/21/21714.shtm 步骤: 1.         建立一个空白解决方案blank solution,如:d:\MyProject\MyProject.sln 2.         在d:\MyProject下建一个Web Application的根目录d:\MyProject\WebMis并设为http://localhost/WebMis的虚拟目录 3.         在WebMis目录下根据模块分别新建目录,如:d:\MyProject\WebMis\Login和d:\MyProject\WebMis\CheckOut 4.         在VS.net中根据模块新建web application,如:http://localhost/WebMis/Login和http://localhost/WebMis/CheckOut 5.         新建后Login和CheckOut两个目录自动被设置为虚拟目录 6.  在WebMis项目中添加Login和CheckOut的项目引用 7.在IIS管理器中删除Login和CheckOut的虚拟目录 8.         删除各项目的global.asax(除根项目) 9.         除去个项目的web.config(除根项目)中的如下代码:<authentication mode="Windows" /><sessionState mode="InProc" stateConnectionString="tcpip=127.0.0.1:42424" sqlConnectionString="data source=127.0.0.1;Trusted_Connection=yes" cookieless="false" timeout="20" />或删掉web.config(若不需要在各目录中进行配置) 10.         编译后,即可运行。  ...[阅读全文]

posted @ | Feedback (8) |

摘要:在阅读 Enterprise Library 代码的时候,我们可以看到 Enterprise Library 的测试代码和实现功能代码是在一个项目中的。这么做的好处在于: 测试跟实现代码放在一起,我们就可以测试 internal 的方法函数。参见对 internal 的定义:internal 关键字是类型和类型成员的访问修饰符。内部成员只有在同一程序集中的文件内才是可访问的。http://msdn.microsoft.com/library/chs/default.asp?url=/library/CHS/csref/html/vclrfInternalPG.asp 测试代码和具体实现代码放在一个项目中,这时候我们就需要区分测试版和运行版,就类似于编译工程有Debug版和Release版一样。 下面我们简单的看看实现自定义区分不同的编译版本。首先我们仍然来看 Enterprise Library 的代码,在它的项目中,我们可以看到,编译一个项目的时候,有六个编译选项,而不是以前默认只有的两个编译选项,如下图: 对应的编译出来的版本,就具有或者不具有对应的某一部分功能。我们如果要作单元测试,只需要编译出对应的版本既可以,在发布的时候,发布一个Release版本,这个版本就会不包含单元测试代码。 下面我们来看 Enterprise Library 具体如何实现的。 1、首先我们来看如何实现增加这几个编译选项。 A、在“解决方案资源管理器”中选中解决方案。B、在“生成”菜单中选择“配置管理器”菜单项,这时候会有“配置管理器”窗口出来。C、打开“活动的解决方案配置”下的下拉列表框,下拉列表项中有一项“新建”,单击它。如下图: D、在“新建解决方案配置”窗体中,输入编译选项的名称,同时为了方便,选择一个跟这个编译选项配置比较接近的已有编译选项。如下图所示: E、重复C、D操作,把你准备增加的编译选项都增加上去。F、对不同的工程项目,也做类似的配置。基本类似,这里就不重复了。 2、下面我们来配置具体的编译选项。 A、选中其中一个项目,右键单击选择属性。B、在属性页左边依次选择“配置属性”,“生成”。修改这时候右边 “条件编译常数” 中的值,比如下图方式: 上图增加了 UNIT_TESTS 编译常数。这样我们在代码中只要判断有没有这个编译常数,既可以让他去做一些事情。如下述代码: #if UNIT_TESTS using System.Threading; using NUnit.Framework; namespace Microsoft.Practices.EnterpriseLibrary.Caching.Tests ...{ [TestFixture] public class BackgroundSchedulerFixture ...{ [Test] public void SchedulerCanBeStoppedWhenRequested() ...{ BackgroundScheduler scheduler = new BackgroundScheduler(null, null); scheduler.Start(); ......[阅读全文]

posted @ | Feedback (8) |

摘要:BizTalk的项目,VS.net 生成时候,如果发现有下面错误信息: 中文版: 生成失败。 文件类型“*.xsd”的编译器失败。 值不能为空。参数名: pUnk 英文版: Build failed. Compiler for file type '*.xsd' failed. Value cannot be null.Parameter name: pUnk 解决方法,目前没有好的办法,添加删除程序中,修复一下BizTalk Server 2004即可。 参见:http://www.adminlife.com/247reference/msgs/28/143127.aspx  ...[阅读全文]

posted @ | Feedback (3) |

摘要:MSDN中文版中,阿很多不该翻译的翻译了,或者翻译的有问题。我在参阅英文版MSDN和中文版MSDN基础上,跟据自己的经验,把数据库连接字符串整理了一下,具体如下: 英文版可以看以下地址: http://msdn.microsoft.com/library/default.asp?url=/library/en-us/cpref/html/frlrfSystemDataSqlClientSqlConnectionClassConnectionStringTopic.asp SqlConnection.ConnectionString 属性 ConnectionString 类似于 OLE DB 连接字符串,但并不相同。与 OLE DB 或 ADO 不同,如果“Persist Security Info ”值设置为 false(默认值),则返回的连接字符串与用户设置的 ConnectionString 相同但去除了安全信息。除非将“Persist Security Info ”设置为 true,否则,SQL Server .NET Framework 数据提供程序将不会保持,也不会返回连接字符串中的密码。 可以使用 ConnectionString 属性连接到数据库。下面的示例阐释了一个典型的连接字符串。"Persist Security Info=False;Integrated Security=SSPI;database=northwind;server=mySQLServer" 只有在连接关闭时才能设置 ConnectionString 属性。许多连接字符串值都具有相应的只读属性。当设置连接字符串时,将更新所有这些属性(除非检测到错误)。检测到错误时,不会更新任何属性。SqlConnection 属性只返回那些包含在 ConnectionString 中的设置。 若要连接到本地机器,请将服务器指定为“(local)”。(必须始终指定一个服务器。) 重置已关闭连接上的 ConnectionString 会重置包括密码在内的所有连接字符串值(和相关属性)。例如,如果设置一个连接字符串,其中包含“Database= northwind”,然后再将该连接字符串重置为“Data Source=myserver;Integrated Security=SSPI”,则 Database 属性将不再设置为 Northwind。 在设置后会立即分析连接字符串。如果在分析时发现语法中有错误,则产生运行库异常,如 ArgumentException。只有当试图打开连接时,才会发现其他错误。 连接字符串的基本格式包括一系列由分号分隔的关键字/值对。等号 (=) 连接各个关键字及其值。若要包括含有分号、单引号字符或双引号字符的值,则该值必须用双引号括起来。如果该值同时包含分号和双引号字符,则该值可以用单引号括起来。如果该值以双引号字符开始,则还可以使用单引号。相反地,如果该值以单引号开始,则可以使用双引号。如果该值同时包含单引号和双引号字符,则用于将值括起来的引号字符每次出现时,都必须成对出现。 若要在字符串值中包括前导或尾随空格,则该值必须用单引号或双引号括起来。即使将整数、布尔值或枚举值用引号括起来,其周围的任何前导或尾随空格也将被忽略。然而,保留字符串关键字或值内的空格。使用 .NET Framework 1.1 版时,在连接字符串中可以使用单引号或双引号而不用使用分隔符(例如,Data Source= my'Server 或 Data Source= my"Server),但引号字符不可以为值的第一个或最后一个字符。 若要在关键字或值中包括等号 (=),则它之前必须还有另一个等号。例如,在假设的连接字符串中,"key==word=value" 关键字是“key=word”并且值是“value”。 如果“keyword= value”对中的一个特定关键字多次出现在连接字符串中,则将所列出的最后一个用于值集。 关键字不区分大小写。 下表列出了 ConnectionString 中的关键字值的有效名称。 名称 默认值 说明 Application Name   应用程序的名称,如果不提供应用程序名称,默认是:“.Net SqlClient Data Provider” AttachDBFilename- 或 -extended properties- 或 -Initial File Name   可连接数据库的主文件的名称,包括完整的路径名。 必须使用关键字“database”来指定数据库的名称。 Connect Timeout - 或 -Connection Timeout 15 在终止尝试连接并产生错误之前,等待与服务器的连接的时间长度(以秒为单位)。 Current Language   SQL Server 语言 Data Source - 或 -Server- 或 -Address- 或 -Addr- 或 -Network Address   要连接的 SQL Server 实例的名称或网络地址。 Encrypt 'false' 当该值为 true 时,如果服务器端安装了证书,则 SQL Server 将对所有在客户端和服务器之间传送的数据使用......[阅读全文]

posted @ | Feedback (8) |

摘要:在MSDN中,.net的数据库连接字符串都有详细的说明,我这里以代码范例的方式罗列一些,具体的每一项代表的意义可以参看MSDN. ADO.net 中数据库连接方式(微软提供) 微软提供了以下四种数据库连接方式:System.Data.OleDb.OleDbConnectionSystem.Data.SqlClient.SqlConnectionSystem.Data.Odbc.OdbcConnectionSystem.Data.OracleClient.OracleConnection下面我们以范例的方式,来依次说明: System.Data.SqlClient.SqlConnection常用的一些连接字符串(C#代码): SqlConnection conn = new SqlConnection( "Server=(local);Integrated Security=SSPI;database=Pubs"); SqlConnection conn = new SqlConnection("server=(local)\\NetSDK;database=pubs;Integrated Security=SSPI"); SqlConnection conn = new SqlConnection("Data Source=localhost;Integrated Security=SSPI;Initial Catalog=Northwind;"); SqlConnection conn = new SqlConnection(" data source=(local);initial catalog=xr;integrated security=SSPI;persist security info=False;workstation id=XURUI;packet size=4096; "); SqlConnection myConn  = new System.Data.SqlClient.SqlConnection("Persist Security Info=False;Integrated Security=SSPI;database=northwind;server=mySQLServer"); SqlConnection conn = new SqlConnection( " uid=sa;pwd=passwords;initial catalog=pubs;data source=127.0.0.1;Connect Timeout=900"); 更多字符串连接说明请看MSDN:http://msdn.microsoft.com/library/default.asp?url=/library/en-us/cpref/html/frlrfSystemDataSqlClientSqlConnectionClassConnectionStringTopic.asp System.Data.OleDb.OleDbConnection常用的一些连接字符串(C#代码): OleDbConnection conn = new OleDbConnection(@"Provider=Microsoft.Jet.OLEDB.4.0;Data Source=D:\MyWeb\81\05\GrocerToGo.mdb"); OleDbConnection conn = new OleDbConnection(@"Provider=Microsoft.Jet.OLEDB.4.0;Password=;User ID=Admin;Data Source=grocertogo.mdb;"); OleDbConnection conn = new OleDbConnection("Provider=MSDAORA; Data Source=ORACLE8i7;Persist Security Info=False;Integrated Security=yes"); OleDbConnection conn = new OleDbConnection("Provider=Microsoft.Jet.OLEDB.4.0; Data Source=c:\bin\LocalAccess40.mdb"); OleDbConnection conn = new OleDbConnection("Provider=SQLOLEDB;Data Source=MySQLServer;Integrated Security=SSPI"); 更多字符串连接说明请看MSDN:http://msdn.microsoft.com/library/default.asp?url=/library/en-us/cpref/html/frlrfSystemDataOleDbOleDbConnectionClassConnectionStringTopic.asp?frame=true System.Data.OracleClient.OracleConnection常用的一些连接字符串(C#代码):OracleConnection myConn = new System.Data.OracleClient.OracleConnection("Data Source=Oracle8i;Integrated Security=yes");   更多字符串连接说明请看MSDN:http://msdn.microsoft.com/library/default.asp?url=/library/en-us/cpref/html/frlrfSystemDataOracleClientOracleConnectionClassConnectionStringTopic.asp?frame=true System.Data.Odbc.OdbcConnection常用的一些连接字符串(C#代码): OdbcConnection conn = new OdbcConnection("Driver={SQL Server};Server=MyServer;Trusted_Connection=yes;Database=Northwind;"); OdbcConnection conn = new OdbcConnection("Driver={Microsoft ODBC for Oracle};Server=ORACLE8i7;Persist Security......[阅读全文]

posted @ | Feedback (10) |

摘要:select a.*,b.SumPoint from Expert_Topic_Index a,(select TopicID, Sum(Point) as SumPoint from expert_reply_indexwhere PostUserName = 'ghj1976'Group by TopicIDHaving Sum(Point) > 0) as bwhere a.TopicID = b.TopicID 这里其实就是把一个查询的结果放到新的一个查询中了。 另外 Having 对分组结果进行的查询。...[阅读全文]

posted @ | Feedback (9) |

摘要:Win Form 的 Splitter 使用心得     今天作个分析html代码,然后再批量下载的程序,其中用到 Splitter (分割条),编译程序后,发现分割条不起作用,拖动分割条的时候,相邻的两个 Panel 没有变换大小。为这个几乎花了一天时间,也没找到原因。包括到其他机子上测试。     后来,再次作一个完全独立的测试项目,发现 Splitter 的使用有个算是 bug 的问题,如果你首先放两个 Panel ,然后再放一个 Splitter 。(注意这时候的次序)就会产生我上面出现的问题。这时候代码中的 InitializeComponent 函数部分代码如下: private void InitializeComponent() { // // ... 其他代码 // this.panel1 = new System.Windows.Forms.Panel(); this.panel2 = new System.Windows.Forms.Panel(); this.splitter1 = new System.Windows.Forms.Splitter(); this.panel2.SuspendLayout(); this.SuspendLayout(); // // ... 其他代码 // // // panel1 // this.panel1.Dock = System.Windows.Forms.DockStyle.Left; ......[阅读全文]

posted @ | Feedback (4) |