<?xml version="1.0" encoding="utf-8"?><feed xmlns="http://www.w3.org/2005/Atom"><title type="text">博客园_let it be</title><subtitle type="text">行到水穷处    坐看云起时</subtitle><id>http://feed.cnblogs.com/blog/u/27117/rss</id><updated>2012-01-04T05:08:41Z</updated><author><name>流浪浪</name><uri>http://www.cnblogs.com/liulanglang/</uri></author><generator>feed.cnblogs.com</generator><link rel="alternate" type="text/html" href="http://www.cnblogs.com/liulanglang/"/><link rel="self" type="application/atom+xml" href="http://feed.cnblogs.com/blog/u/27117/rss"/><entry><id>http://www.cnblogs.com/liulanglang/archive/2012/01/02/2310325.html</id><title type="text">SQL截取字符串</title><summary type="text">SUBSTRING返回字符、binary、text或image表达式的一部分。有关可与该函数一起使用的有效Microsoft SQL Server数据类型的更多信息，请参见数据类型。语法SUBSTRING(expression,start,length)参数expression是字符串、二进制字符串、text、image、列或包含列的表达式。不要使用包含聚合函数的表达式。start是一个整数，指定子串的开始位置。length是一个整数，指定子串的长度（要返回的字符数或字节数）。substring()——任意位置取子串left()right()——左右两端取子串ltrim()rtrim()——截</summary><published>2012-01-02T11:37:00Z</published><updated>2012-01-02T11:37:00Z</updated><author><name>流浪浪</name><uri>http://www.cnblogs.com/liulanglang/</uri></author><link rel="alternate" href="http://www.cnblogs.com/liulanglang/archive/2012/01/02/2310325.html"/><link rel="alternate" type="text/html" href="http://www.cnblogs.com/liulanglang/archive/2012/01/02/2310325.html"/><content type="html">&lt;div class="cnt"&gt;&lt;p&gt;SUBSTRING&lt;br /&gt;返回字符、binary、text或image表达式的一部分。有关可与该函数一起使用的有效Microsoft SQL Server数据类型的更多信息，请参见数据类型。&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;br /&gt;&lt;br /&gt;语法&lt;br /&gt;SUBSTRING(expression,start,length)&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;br /&gt;&lt;br /&gt;参数&lt;br /&gt;expression&lt;br /&gt;&lt;br /&gt;是字符串、二进制字符串、text、image、列或包含列的表达式。不要使用包含聚合函数的表达式。&lt;br /&gt;&lt;br /&gt;start&lt;br /&gt;&lt;br /&gt;是一个整数，指定子串的开始位置。&lt;br /&gt;&lt;br /&gt;length&lt;br /&gt;&lt;br /&gt;是一个整数，指定子串的长度（要返回的字符数或字节数）。&lt;br /&gt;&lt;br /&gt;&lt;/p&gt;&lt;p&gt;substring()&lt;br /&gt;&amp;mdash;&amp;mdash;任意位置取子串&lt;br /&gt;&lt;br /&gt;left()&lt;br /&gt;right()&lt;br /&gt;&amp;mdash;&amp;mdash;左右两端取子串&lt;br /&gt;&lt;br /&gt;ltrim()&lt;br /&gt;rtrim()&lt;br /&gt;&amp;mdash;&amp;mdash;截断空格，没有trim()。&lt;br /&gt;&lt;br /&gt;charindex()&lt;br /&gt;patindex()&lt;br /&gt;&amp;mdash;&amp;mdash;查子串在母串中的位置，没有返回0。区别：patindex支持通配符，charindex不支持。&lt;/p&gt;&lt;p&gt;&amp;nbsp;&lt;/p&gt;&lt;p&gt;&amp;nbsp;&lt;/p&gt;&lt;p&gt;&amp;nbsp;&lt;/p&gt;&lt;p&gt;&lt;strong&gt;函数功效：&lt;/strong&gt;&lt;br /&gt;字符串截取函数，只限单字节字符使用（对于中文的截取时遇上奇数长度是会出现乱码，需另行处理），本函数可截取字符串指定范围内的字符。&lt;br /&gt;&lt;br /&gt;&lt;strong&gt;应用范围：&lt;br /&gt;&lt;/strong&gt;标题、内容截取&lt;br /&gt;&lt;br /&gt;&lt;strong&gt;函数格式：&lt;/strong&gt;&lt;br /&gt;string &lt;strong class="methodname"&gt;substr&lt;/strong&gt; ( string string, int start [, int length])&lt;br /&gt;参数1：处理字符串&lt;br /&gt;参数2：截取的起始位置（第一个字符是从0开始）&lt;br /&gt;参数3：截取的字符数量&lt;br /&gt;substr()更多介绍可在PHP官方手册中查询（字符串处理函数库）&lt;br /&gt;&lt;br /&gt;&lt;strong&gt;举例：&lt;/strong&gt;&lt;br /&gt;substr("ABCDEFG", 0);&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; //返回：ABCDEFG，截取所有字符&lt;br /&gt;substr("ABCDEFG", 2);&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; //返回：CDEFG，截取从C开始之后所有字符&lt;br /&gt;substr("ABCDEFG", 0, 3); //返回：ABC，截取从A开始3个字符&lt;br /&gt;substr("ABCDEFG", 0, 100); //返回：ABCDEFG，100虽然超出预处理的字符串最长度，但不会影响返回结果，系统按预处理字符串最大数量返回。&lt;br /&gt;substr("ABCDEFG", 0, -3); //返回：EFG，注意参数-3，为负值时表示从尾部开始算起，字符串排列位置不变&lt;/p&gt;&lt;p&gt;&amp;nbsp;&lt;/p&gt;&lt;p&gt;&amp;nbsp;&lt;/p&gt;&lt;p&gt;&amp;nbsp;&lt;/p&gt;&lt;p&gt;例子:&lt;/p&gt;&lt;p&gt;&lt;br /&gt;&lt;strong&gt;&lt;span style="font-size: small;"&gt;1.截取已知长度的函数&lt;/span&gt;&lt;/strong&gt;&lt;/p&gt;&lt;p&gt;&lt;br /&gt;&lt;strong&gt;&amp;nbsp;&amp;nbsp;&lt;/strong&gt;&lt;span style="text-decoration: underline;"&gt;A.截取从字符串左边开始N个字符&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&amp;nbsp;&lt;/p&gt;&lt;table style="width: 522px;" border="1" cellspacing="1" cellpadding="1"&gt;&lt;tbody&gt;&lt;tr&gt;&lt;td&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;Declare @S1 varchar(100)&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; Select @S1='http://www.163.com'&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; Select Left(@S1,4)&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; ------------------------------------&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; 显示结果: http&lt;/td&gt;&lt;/tr&gt;&lt;/tbody&gt;&lt;/table&gt;&lt;p&gt;&amp;nbsp;&lt;/p&gt;&lt;p&gt;&amp;nbsp;&amp;nbsp;&lt;span style="text-decoration: underline;"&gt;B.截取从字符串右边开始N个字符(例如取字符&lt;/span&gt;&lt;a href="http://www.163.com/"&gt;&lt;span style="color: #800080;"&gt;www.163.com&lt;/span&gt;&lt;/a&gt;&lt;span style="text-decoration: underline;"&gt;)&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&amp;nbsp;&lt;/p&gt;&lt;table style="width: 522px;" border="1" cellspacing="1" cellpadding="1"&gt;&lt;tbody&gt;&lt;tr&gt;&lt;td&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;Declare @S1 varchar(100)&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; Select @S1='http://www.163.com'&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; Select right(@S1,11)&amp;nbsp;&amp;nbsp;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; ------------------------------------&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; 显示结果: &lt;a href="http://www.163.com/"&gt;&lt;span style="color: #800080;"&gt;www.163.com&lt;/span&gt;&lt;/a&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/tbody&gt;&lt;/table&gt;&lt;p&gt;&amp;nbsp;&lt;/p&gt;&lt;p&gt;&amp;nbsp;&amp;nbsp;&lt;span style="text-decoration: underline;"&gt;C.截取字符串中任意位置及长度(例如取字符www)&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&amp;nbsp;&lt;/p&gt;&lt;table style="width: 521px;" border="1" cellspacing="1" cellpadding="1"&gt;&lt;tbody&gt;&lt;tr&gt;&lt;td&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;Declare @S1 varchar(100)&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; Select @S1='http://www.163.com'&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; Select SUBSTRING(@S1,8,3)&amp;nbsp;&amp;nbsp;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; ------------------------------------&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; 显示结果: &lt;a href="http://www.163.com/"&gt;&lt;span style="color: #800080;"&gt;www.163.com&lt;/span&gt;&lt;/a&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/tbody&gt;&lt;/table&gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;以上例子皆是已知截取位置及长度,下面介绍未知位置的例子&lt;p&gt;&amp;nbsp;&lt;/p&gt;&lt;p&gt;&lt;strong&gt;&lt;span style="font-size: small;"&gt;2.截取未知位置的函数&lt;/span&gt;&lt;/strong&gt;&lt;/p&gt;&lt;p&gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&lt;span style="text-decoration: underline;"&gt;A.截取指定字符串后的字符串(例如截取http://后面的字符串)&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;方法一:&lt;/p&gt;&lt;p&gt;&amp;nbsp;&lt;/p&gt;&lt;table style="width: 525px;" border="1" cellspacing="1" cellpadding="1"&gt;&lt;tbody&gt;&lt;tr&gt;&lt;td&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;Declare @S1 varchar(100)&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; Select @S1='http://www.163.com'&amp;nbsp;&amp;nbsp;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; Select Substring(@S1,CHARINDEX('www',@S1)+1,Len(@S1))&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;p&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;------------------------------------&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; 显示结果: &lt;a href="http://www.163.com/"&gt;&lt;span style="color: #800080;"&gt;www.163.com&lt;/span&gt;&lt;/a&gt;&lt;/p&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/tbody&gt;&lt;/table&gt;&lt;br /&gt;&lt;span style="color: #ff0000;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; 需要注意:CHARINDEX函数搜索字符串时,不区分大小写,因此CHARINDEX('www',@S1)也可以写成CHARINDEX('WWW',@S1)&lt;/span&gt;&lt;p&gt;&amp;nbsp;&lt;/p&gt;&lt;p&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;方法二:(与方法一类似)&lt;/p&gt;&lt;p&gt;&amp;nbsp;&lt;/p&gt;&lt;table style="width: 526px;" border="1" cellspacing="1" cellpadding="1"&gt;&lt;tbody&gt;&lt;tr&gt;&lt;td&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;Declare @S1 varchar(100)&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; Select @S1='http://www.163.com'&amp;nbsp;&amp;nbsp;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; Select Substring(@S1,PATINDEX('%www%',@S1)+1,Len(@S1))&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; --此处也可以这样写:Select Substring(@S1,PATINDEX('%//%',@S1)+2,Len(@S1))&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; ------------------------------------&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; 显示结果: &lt;a href="http://www.163.com/"&gt;&lt;span style="color: #800080;"&gt;www.163.com&lt;/span&gt;&lt;/a&gt;&amp;nbsp;&amp;nbsp;&lt;/td&gt;&lt;/tr&gt;&lt;/tbody&gt;&lt;/table&gt;&lt;p&gt;&amp;nbsp;&lt;/p&gt;&lt;p&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style="color: #ff0000;"&gt;函数PATINDEX与CHARINDEX区别在于:前者可以参数一些参数,增加查询的功能&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;方法三:&lt;/p&gt;&lt;p&gt;&amp;nbsp;&lt;/p&gt;&lt;table style="width: 523px;" border="1" cellspacing="1" cellpadding="1"&gt;&lt;tbody&gt;&lt;tr&gt;&lt;td&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;Declare @S1 varchar(100)&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; Select @S1='http://www.163.com'&amp;nbsp;&amp;nbsp;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; Select REPLACE(@S1,'http://','')&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; ------------------------------------&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; 显示结果: &lt;a href="http://www.163.com/"&gt;&lt;span style="color: #800080;"&gt;www.163.com&lt;/span&gt;&lt;/a&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/tbody&gt;&lt;/table&gt;&lt;p&gt;&amp;nbsp;&lt;/p&gt;&lt;p&gt;&amp;nbsp;&amp;nbsp;&lt;span style="color: #ff0000;"&gt;利用字符替换函数REPLACE,将除需要显示字符串外的字符替换为空&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;方法四:&lt;/p&gt;&lt;p&gt;&amp;nbsp;&lt;/p&gt;&lt;table style="width: 523px;" border="1" cellspacing="1" cellpadding="1"&gt;&lt;tbody&gt;&lt;tr&gt;&lt;td&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;Declare @S1 varchar(100)&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; Select @S1='http://www.163.com'&amp;nbsp;&amp;nbsp;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; Select STUFF(@S1,CHARINDEX('http://',@S1),Len('http://'),'')&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; ------------------------------------&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; 显示结果: &lt;a href="http://www.163.com/"&gt;&lt;span style="color: #800080;"&gt;www.163.com&lt;/span&gt;&lt;/a&gt;&amp;nbsp;&amp;nbsp;&lt;/td&gt;&lt;/tr&gt;&lt;/tbody&gt;&lt;/table&gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&lt;span style="color: #ff0000;"&gt;函数STUFF与REPLACE区别在于:前者可以指定替换范围,而后者则是全部范围内替换&lt;/span&gt;&lt;p&gt;&amp;nbsp;&lt;/p&gt;&lt;p&gt;&amp;nbsp;&amp;nbsp;&lt;span style="text-decoration: underline;"&gt;B.截取指定字符后的字符串(例如截取C:\Windows\test.txt中文件名)&lt;/span&gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; 与A不同的是,当搜索对象不是一个时,利用上面的方法只能搜索到第一个位置&lt;/p&gt;&lt;p&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;方法一:&lt;/p&gt;&lt;p&gt;&amp;nbsp;&lt;/p&gt;&lt;table style="width: 522px;" border="1" cellspacing="1" cellpadding="1"&gt;&lt;tbody&gt;&lt;tr&gt;&lt;td&gt;&lt;p&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;Declare @S1 varchar(100)&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; Select @S1='C:\Windows\test.txt'&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; select right(@S1,charindex('\',REVERSE(@S1))-1)&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; -------------------------------------&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; 显示结果: text.txt&lt;/p&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/tbody&gt;&lt;/table&gt;&lt;br /&gt;&lt;span style="color: #ff0000;"&gt;利用函数REVERSE获取需要截取的字符串长度&lt;/span&gt;&lt;p&gt;&amp;nbsp;&lt;/p&gt;&lt;p&gt;&amp;nbsp;&amp;nbsp;&lt;/p&gt;&lt;p&gt;&amp;nbsp;&lt;/p&gt;&lt;p&gt;substr()&lt;/p&gt;&lt;p&gt;&amp;nbsp;&lt;/p&gt;&lt;p&gt;&amp;nbsp;&lt;/p&gt;&lt;p&gt;例子:&lt;/p&gt;&lt;p&gt;private void DDL_AreaBind()&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; {&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; conn = new SqlConnection(ConfigurationManager.ConnectionStrings["strcon"].ConnectionString);&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; string str = "0000";&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; cmd = new SqlCommand("select AreaID,Name=ltrim(Name) from Area where&amp;nbsp;&amp;nbsp;&amp;nbsp; right(AreaID,4) ='" + str + "'", conn);&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; SqlDataAdapter sda = new SqlDataAdapter(cmd);&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; sda.Fill(ds, "area");&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; this.ddl_area.DataSource = ds.Tables["area"].DefaultView;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; this.ddl_area.DataTextField = "Name";&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; this.ddl_area.DataValueField = "AreaID";&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; this.ddl_area.DataBind();&lt;/p&gt;&lt;p&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; cmd = new SqlCommand("select * from Area&amp;nbsp;&amp;nbsp;&amp;nbsp; ", conn);&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; cmd.CommandType = CommandType.Text;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; SqlDataAdapter adapter = new SqlDataAdapter(cmd);&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; adapter.Fill(ds, "city");&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; this.ddl_city.DataSource = ds.Tables["city"].DefaultView;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; this.ddl_city.DataTextField = "Name";&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; this.ddl_city.DataValueField = "AreaID";&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; this.ddl_city.DataBind();&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; }&lt;/p&gt;&lt;p&gt;&amp;nbsp;&lt;/p&gt;&lt;p&gt;&amp;nbsp;&lt;/p&gt;&lt;p&gt;protected void ddl_area_SelectedIndexChanged(object sender, EventArgs e)&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; {&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; conn = new SqlConnection(ConfigurationManager.ConnectionStrings["strcon"].ConnectionString);&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; this.ddl_city.Enabled = true;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; string str1="0000";&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; cmd = new SqlCommand("select AreaID,Name from Area where substring(AreaID,1,2)='" + this.ddl_area.SelectedValue.Substring(0,2)&amp;nbsp;&amp;nbsp;&amp;nbsp; + "' AND substring(AreaID,3,4) &amp;lt;&amp;gt; '0000' AND substring(AreaID,5,2)='00'&amp;nbsp;&amp;nbsp;&amp;nbsp; ", conn);&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; cmd.CommandType = CommandType.Text;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; SqlDataAdapter adapter = new SqlDataAdapter(cmd);&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; DataSet ds = new DataSet();&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; adapter.Fill(ds, "city");&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; this.ddl_city.DataSource = ds.Tables["city"].DefaultView;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; this.ddl_city.DataTextField = "Name";&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; this.ddl_city.DataValueField = "AreaID";&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; this.ddl_city.DataBind();&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; }&lt;/p&gt;&lt;/div&gt;&lt;img src="http://www.cnblogs.com/liulanglang/aggbug/2310325.html?type=1" width="1" height="1" alt=""/&gt;&lt;p&gt;&lt;a href="http://www.cnblogs.com/liulanglang/archive/2012/01/02/2310325.html" target="_blank"&gt;本文链接&lt;/a&gt;&lt;/p&gt;</content></entry><entry><id>http://www.cnblogs.com/liulanglang/archive/2011/12/20/2294127.html</id><title type="text">SQL Server中各个系统表的作用</title><summary type="text">sysaltfiles主数据库在特殊情况下，包含与数据库中的文件相对应的行。该表存储在master 数据库中。syscharsets主数据库每个字符集在表中各占一行，表中还包含定义供Microsoft? SQL Server?使用的排序次序。排序次序中的一个在 sysconfigures中标记为默认排序次序，该次序是实际使用的唯一次序。sysconfigures主数据库用户设置的每个配置选项在表中各占一行。sysconfigures包含最近启动 Microsoft? SQL Server?前定义的配置选项，还包含最近启动后设置的所有动态配置选项。该表只位于master 数据库中。syscurc</summary><published>2011-12-20T00:10:00Z</published><updated>2011-12-20T00:10:00Z</updated><author><name>流浪浪</name><uri>http://www.cnblogs.com/liulanglang/</uri></author><link rel="alternate" href="http://www.cnblogs.com/liulanglang/archive/2011/12/20/2294127.html"/><link rel="alternate" type="text/html" href="http://www.cnblogs.com/liulanglang/archive/2011/12/20/2294127.html"/><content type="html">&lt;div&gt;sysaltfiles&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;主数据库&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;在特殊情况下，包含与数据库中的文件相对应的行。该表存储在master 数据库中。&lt;br /&gt;syscharsets&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;主数据库&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;每个字符集在表中各占一行，表中还包含定义供Microsoft? SQL Server?使用的排序次序。排序次序中的一个在 sysconfigures中标记为默认排序次序，该次序是实际使用的唯一次序。&lt;br /&gt;sysconfigures&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;主数据库&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;用户设置的每个配置选项在表中各占一行。sysconfigures包含最近启动 Microsoft? SQL Server?前定义的配置选项，还包含最近启动后设置的所有动态配置选项。该表只位于master 数据库中。&lt;br /&gt;syscurconfigs&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;主数据库&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;每个当前配置选项各占一项。另外，该表还包含四个描述配置结构的项。syscurconfigs在由用户查询时动态生成。有关更多信息，请参见sysconfigures。&lt;br /&gt;sysdatabases&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;主数据库&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;Microsoft? SQL Server?上的每个数据库在表中占一行。最初安装 SQL Server时，sysdatabases 包含 master、model、msdb、mssqlweb 和tempdb 数据库的项。该表只存储在 master数据库中。&lt;br /&gt;syslanguages&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;主数据库&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;出现在 Microsoft? SQL Server?中的每种语言在表中各占一行。虽然美国英语不在syslanguages 内，但该表始终可由 SQL Server使用。该表只存储在 master 数据库中。&lt;br /&gt;syslogins&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;主数据库&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;每个登录帐户在表中占一行。&lt;br /&gt;sysoledbusers&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;主数据库&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;每个指定的链接服务器的用户和密码映射在表中占一行。该表存储在master 数据库中。&lt;br /&gt;sysprocesses&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;主数据库&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;sysprocesses 表中保存关于运行在 Microsoft? SQL Server?上的进程的信息。这些进程可以是客户端进程或系统进程。sysprocesses只存储在 master 数据库中。&lt;br /&gt;sysremotelogins&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;主数据库&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;每个允许调用 Microsoft? SQL Server?上的远程存储过程的远程用户占一行。&lt;br /&gt;syscolumns&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;每个数据库&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;每个表和视图中的每列在表中占一行，存储过程中的每个参数在表中也占一行。该表位于每个数据库中。&lt;br /&gt;sysconstraints&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;每个数据库&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;包含约束映射，映射到拥有该约束的对象。该系统目录存储在每个数据库中。&lt;br /&gt;sysfilegroups&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;每个数据库&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;数据库中的每个文件组在表中占一行。该表存储在每个数据库中。在该表中至少有一项用于主文件组。&lt;br /&gt;sysfiles&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;每个数据库&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;数据库中的每个文件在表中占一行。该系统表是虚拟表，不能直接更新或修改。&lt;br /&gt;sysforeignkeys&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;每个数据库&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;包含关于表定义中的 FOREIGN KEY约束的信息。该表存储在每个数据库中。&lt;br /&gt;sysindexkeys&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;每个数据库&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;包含索引中的键或列的信息。该表存储在每个数据库中。&lt;br /&gt;sysmembers&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;每个数据库&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;每个数据库角色成员在表中占一行。该表存储在每个数据库中。&lt;br /&gt;sysobjects&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;每个数据库&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;在数据库内创建的每个对象（约束、默认值、日志、规则、存储过程等）在表中占一行。只有在tempdb 内，每个临时对象才在该表中占一行。&lt;br /&gt;syspermissions&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;每个数据库&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;包含有关对数据库内的用户、组和角色授予和拒绝的权限的信息。该表存储在每个数据库中。&lt;br /&gt;systypes&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;每个数据库&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;对于每种系统提供数据类型和用户定义数据类型，均包含一行信息。该表存储在每个数据库中。这些是系统提供的数据类型及其ID 号。&lt;br /&gt;sysusers&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;每个数据库&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;数据库中每个 Microsoft? Windows 用户、Windows组、Microsoft SQL Server? 用户或 SQL Server角色在表中占一行。&lt;br /&gt;sysproperties&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;每个数据库&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;查看每个表和列的提示信息&lt;/div&gt;&lt;img src="http://www.cnblogs.com/liulanglang/aggbug/2294127.html?type=1" width="1" height="1" alt=""/&gt;&lt;p&gt;&lt;a href="http://www.cnblogs.com/liulanglang/archive/2011/12/20/2294127.html" target="_blank"&gt;本文链接&lt;/a&gt;&lt;/p&gt;</content></entry><entry><id>http://www.cnblogs.com/liulanglang/archive/2011/12/12/2284829.html</id><title type="text">editor.js 缺少对象的解决方法(ewebeditor 使用)</title><summary type="text">IE浏览器升级到IE8.0,在使用eWebEditor在线HTML文本编辑器的时候出问题,点击eWebEditor上的所有编辑按钮都没用,只看到浏览器状态栏左下角显示网页上有错误字样。看来eWebEditor真的是很脆弱啊,先是漏洞百出,Firefox不支持,现在IE8也不支持了,真的很郁闷,不过还好,经过研究,问题最终得到了解决。 一、解决IE8不支持eWebEditor在线文本编辑器的方法如下: 1、首先找到eWebEditor编辑器所在的目录,然后搜索到editor.js文件,由于eWebEditor有很多个版本,所以editor.js文件所在的目录也有所不同,有的可能在Include目</summary><published>2011-12-12T06:51:00Z</published><updated>2011-12-12T06:51:00Z</updated><author><name>流浪浪</name><uri>http://www.cnblogs.com/liulanglang/</uri></author><link rel="alternate" href="http://www.cnblogs.com/liulanglang/archive/2011/12/12/2284829.html"/><link rel="alternate" type="text/html" href="http://www.cnblogs.com/liulanglang/archive/2011/12/12/2284829.html"/><content type="html">&lt;p&gt;IE浏览器升级到IE8.0,在使用eWebEditor在线HTML文本编辑器的时候出问题,点击eWebEditor上的所有编辑按钮都没用,只看到浏览器状态栏左下角显示网页上有错误字样。看来eWebEditor真的是很脆弱啊,先是漏洞百出,Firefox不支持,现在IE8也不支持了,真的很郁闷,不过还好,经过研究,问题最终得到了解决。&lt;br /&gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; 一、解决IE8不支持eWebEditor在线文本编辑器的方法如下:&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; 1、首先找到eWebEditor编辑器所在的目录,然后搜索到editor.js文件,由于eWebEditor有很多个版本,所以editor.js文件所在的目录也有所不同,有的可能在Include目录下,有的可能在js目录下。&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; 2、用记事本打开editor.js文件,找到如下代码:&lt;br /&gt;if (element.YUSERONCLICK) {&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; eval(element.YUSERONCLICK + "anonymous()");&lt;br /&gt;}&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; 由于eWebEditor编辑器版本不同,有的可能找不到上面的代码,而是下面这样的代码,两种代码只是书写格式不同而已,含义是一样的:&lt;br /&gt;if (element.YUSERONCLICK) eval(element.YUSERONCLICK + "anonymous()");&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; 3、将上面的代码替换为下面的代码即可:&lt;br /&gt;if(navigator.appVersion.match(/8./i)=='8.')&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; {&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; if (element.YUSERONCLICK) eval(element.YUSERONCLICK + "onclick(event)");&amp;nbsp;&amp;nbsp; &lt;br /&gt;&amp;nbsp;&amp;nbsp; }&lt;br /&gt;else&lt;br /&gt;&amp;nbsp;&amp;nbsp; {&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; if (element.YUSERONCLICK) eval(element.YUSERONCLICK + "anonymous()");&lt;br /&gt;} &lt;br /&gt;另:这个方法来自网上转载,我用上面方法修改几个确实是可行的,代Ewebeidtor团队谢谢原创作者哈。不管怎么说IE8真TMD不好用,我玩黑上传时抓包工具在IE8下抓不到数据,而且我的电脑还总是出现IE报错。操NND!&lt;br /&gt;&amp;nbsp;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; 二、如果IE7也不支持你就加下面这个代码:&lt;br /&gt;if(navigator.appVersion.match(/8./i)=='8.' || navigator.appVersion.match(/7./i)=='7.'){&lt;br /&gt;&amp;nbsp; if (element.YUSERONCLICK) eval(element.YUSERONCLICK + "onclick(event)"); //IE8 or IE7&lt;br /&gt;} else {&lt;br /&gt;&amp;nbsp; if (element.YUSERONCLICK) eval(element.YUSERONCLICK + "anonymous()"); //IE6&lt;br /&gt;}&lt;br /&gt;&amp;nbsp;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; 三、如果傲游[Maxthon]也不支持那怎么办?那你继续往下看呗:&lt;br /&gt;if(navigator.appVersion.match(/8./i)=='8.' || navigator.appVersion.match(/MAXTHON/i)=='MAXTHON'){&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; if (element.YUSERONCLICK) eval(element.YUSERONCLICK + "onclick(event)");&lt;br /&gt;}else{&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; if (element.YUSERONCLICK) eval(element.YUSERONCLICK + "anonymous()");&lt;/p&gt;&lt;p&gt;}&lt;/p&gt;&lt;img src="http://www.cnblogs.com/liulanglang/aggbug/2284829.html?type=1" width="1" height="1" alt=""/&gt;&lt;p&gt;&lt;a href="http://www.cnblogs.com/liulanglang/archive/2011/12/12/2284829.html" target="_blank"&gt;本文链接&lt;/a&gt;&lt;/p&gt;</content></entry><entry><id>http://www.cnblogs.com/liulanglang/archive/2011/12/09/2281494.html</id><title type="text">asp.net DataList中hyperlink传递参数及打开新页面全解</title><summary type="text">最近做个小东西，发现DataList中hyperlink传递参数不好做，找了许多论坛、文章都不尽如人意，后来经过自己捉摸，终于找到了实现的方法，现在贴出来大家共享！在aspx页面源码中书写方式如下：&lt;asp:HyperLink ID="HyperLink1" runat="server" Width="177px" NavigateUrl='&lt;%# "ToGoal.aspx?ID=" + DataBinder.Eval( Container.DataItem,"ID") %&amp;</summary><published>2011-12-09T00:20:00Z</published><updated>2011-12-09T00:20:00Z</updated><author><name>流浪浪</name><uri>http://www.cnblogs.com/liulanglang/</uri></author><link rel="alternate" href="http://www.cnblogs.com/liulanglang/archive/2011/12/09/2281494.html"/><link rel="alternate" type="text/html" href="http://www.cnblogs.com/liulanglang/archive/2011/12/09/2281494.html"/><content type="html">&lt;p&gt;最近做个小东西，发现DataList中hyperlink传递参数不好做，找了许多论坛、文章都不尽如人意，后来经过自己捉摸，终于找到了实现的方法，现在贴出来大家共享！&lt;br /&gt;&lt;br /&gt;在aspx页面源码中书写方式如下：&lt;br /&gt;&lt;em style="font-family: Times New Roman;"&gt;&lt;br /&gt;&lt;span style="color: #ff0000;"&gt;&amp;lt;asp:HyperLink ID="HyperLink1" runat="server"&amp;nbsp; Width="177px" NavigateUrl='&amp;lt;%# "ToGoal.aspx?ID=" +&amp;nbsp; DataBinder.Eval( Container.DataItem,"ID") %&amp;gt;' &amp;gt;&amp;lt;%# DataBinder.Eval( Container.DataItem,"Text") %&amp;gt;&amp;lt;/asp:HyperLink&amp;gt;&amp;lt;/td&amp;gt;&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;/em&gt;做完这个之后感觉有点不太满意，因为我想打开新的页面，而不是在原页面进行跳转，原来经常使用的&lt;br /&gt;&amp;nbsp;response.write("&amp;lt;script language=javascript&amp;gt;window.open('new.aspx');&amp;lt;/script&amp;gt;")&lt;br /&gt;&amp;nbsp;会被认为是弹出窗口被浏览器屏蔽，所以只好想其他办法。后来发现写成下边这样就可以了。&lt;br /&gt;&lt;em style="font-family: Times New Roman;"&gt;&lt;span style="color: #ff0000;"&gt;&amp;lt;asp:HyperLink ID="HyperLink1" runat="server"&amp;nbsp; Width="177px"&amp;nbsp; &amp;gt;&amp;lt;a href="http://www.sina.com"&amp;nbsp; target="_blank"&amp;gt;&amp;lt;%# DataBinder.Eval( Container.DataItem,"Text") %&amp;gt;&amp;lt;/a&amp;gt;&amp;lt;/asp:HyperLink&amp;gt;&amp;lt;/td&amp;gt;&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;/em&gt;如果你的链接地址是从数据库取出来的，那就写成下边这样：&lt;br /&gt;&lt;em style="font-family: Times New Roman;"&gt;&lt;span style="color: #ff0000;"&gt;&amp;lt;asp:HyperLink ID="HyperLink1" runat="server"&amp;nbsp; Width="177px"&amp;nbsp; &amp;gt;&amp;lt;a href='&amp;lt;%# "http://" +&amp;nbsp; DataBinder.Eval( Container.DataItem,"Url") %&amp;gt;' target="_blank"&amp;gt;&amp;lt;%# DataBinder.Eval( Container.DataItem,"Url") %&amp;gt;&amp;lt;/a&amp;gt;&amp;lt;/asp:HyperLink&amp;gt;&amp;lt;/td&amp;gt;&lt;/span&gt;&lt;/em&gt;&lt;/p&gt;&lt;img src="http://www.cnblogs.com/liulanglang/aggbug/2281494.html?type=1" width="1" height="1" alt=""/&gt;&lt;p&gt;&lt;a href="http://www.cnblogs.com/liulanglang/archive/2011/12/09/2281494.html" target="_blank"&gt;本文链接&lt;/a&gt;&lt;/p&gt;</content></entry><entry><id>http://www.cnblogs.com/liulanglang/archive/2011/12/02/2271575.html</id><title type="text">vs2005 c#鼠标悬停高亮显示在gridview中</title><summary type="text">在girdview中的RowDataBound事件中写下如下代码：protected void GridView1_RowDataBound(object sender, GridViewRowEventArgs e){ if (e.Row.RowType == DataControlRowType.DataRow) { e.Row.Attributes.Add("onmouseover", "currentcolor=this.style.backgroundColor;this.style.backgroundColor='yellow';&amp;q</summary><published>2011-12-02T00:24:00Z</published><updated>2011-12-02T00:24:00Z</updated><author><name>流浪浪</name><uri>http://www.cnblogs.com/liulanglang/</uri></author><link rel="alternate" href="http://www.cnblogs.com/liulanglang/archive/2011/12/02/2271575.html"/><link rel="alternate" type="text/html" href="http://www.cnblogs.com/liulanglang/archive/2011/12/02/2271575.html"/><content type="html">&lt;div id="cnblogs_post_body"&gt;&lt;p&gt;在girdview中的RowDataBound事件中写下如下代码：&amp;nbsp;&lt;/p&gt;&lt;p&gt;protected void GridView1_RowDataBound(object sender, GridViewRowEventArgs e)&lt;br /&gt;{&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; if (e.Row.RowType == DataControlRowType.DataRow)&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; {&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; e.Row.Attributes.Add("onmouseover", "currentcolor=this.style.backgroundColor;this.style.backgroundColor='yellow';");&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; e.Row.Attributes.Add("onmouseout", "this.style.backgroundColor=currentcolor;");&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; }&lt;br /&gt;}&lt;/p&gt;&lt;p&gt;有的时候，我们可能要根据需要，对gridview中的数据进行特殊的显示，比如当某样商品库存为0时，要求gridview中以不同颜色进行显示，这时，可以按如下的方法进行：&lt;/p&gt;&lt;p&gt;首先，gridview提供了rowdatabound事件，该事件在gridview中每行被创建并且绑定到datasource控件后被触发，因此，我们可以利用该事件去检查库存是否为0，如果为0的话，将所在行的北京颜色设置为黄色，代码如下：&lt;/p&gt;&lt;p&gt;&amp;nbsp;&lt;/p&gt;&lt;p&gt;public void productsGridView_RowDataBound(object sender,&lt;/p&gt;&lt;p&gt;GridViewRowEventArgs e)&lt;/p&gt;&lt;p&gt;{&lt;/p&gt;&lt;p&gt;　if (e.Row.RowType == DataControlRowType.DataRow)&lt;/p&gt;&lt;p&gt;　{&lt;/p&gt;&lt;p&gt;int unitsInStock = Convert.ToInt32(DataBinder.Eval(e.Row.DataItem, "UnitsInStock"));&lt;/p&gt;&lt;p&gt;if (unitsInStock == 0)&lt;/p&gt;&lt;p&gt;　e.Row.BackColor = Color.Yellow;&lt;/p&gt;&lt;p&gt;　}&lt;/p&gt;&lt;p&gt;}&lt;/p&gt;&lt;p&gt;首先，该事件首先检查，当前的行是否属于datarow类型的行，因为象gridview中的headerrow,footerrow等行，并不包含实际的数据，因此，我们不需要使用headerrow和footerrow,而为了取得库存unitesinstock的内容，通过使用databinder.eval的方法取出其内容，并转换为int类型，接着判断是否为0，如果为0的话，则设置其行的背景颜色为黄色。&lt;/p&gt;&lt;/div&gt;&lt;p&gt;&amp;nbsp;&lt;/p&gt;&lt;img src="http://www.cnblogs.com/liulanglang/aggbug/2271575.html?type=1" width="1" height="1" alt=""/&gt;&lt;p&gt;&lt;a href="http://www.cnblogs.com/liulanglang/archive/2011/12/02/2271575.html" target="_blank"&gt;本文链接&lt;/a&gt;&lt;/p&gt;</content></entry><entry><id>http://www.cnblogs.com/liulanglang/archive/2011/11/30/2268975.html</id><title type="text">li:hover ul,li.over ul{ display: block;}这句被ie6.0解释不了</title><summary type="text">CSS:#nav li:hover ul, #nav li.over ul{display:block}解决方法：在&lt;head&gt;&lt;/head&gt;中加入这段JS即可&lt;script type="text/javascript"&gt;&lt;!--function menuFix() {var sfEls = document.getElementById("nav").getElementsByTagName("li");for (var i=0; i&lt;sfEls.length; i++) {sfEls</summary><published>2011-11-30T05:28:00Z</published><updated>2011-11-30T05:28:00Z</updated><author><name>流浪浪</name><uri>http://www.cnblogs.com/liulanglang/</uri></author><link rel="alternate" href="http://www.cnblogs.com/liulanglang/archive/2011/11/30/2268975.html"/><link rel="alternate" type="text/html" href="http://www.cnblogs.com/liulanglang/archive/2011/11/30/2268975.html"/><content type="html">&lt;p&gt;CSS:&lt;/p&gt;&lt;p&gt;#nav li:hover ul, #nav li.over ul{display:block}&lt;/p&gt;&lt;p&gt;&amp;nbsp;&lt;/p&gt;&lt;p&gt;解决方法：&lt;/p&gt;&lt;p&gt;在&amp;lt;head&amp;gt;&amp;lt;/head&amp;gt;中加入这段JS即可&lt;br /&gt;&lt;br /&gt;&amp;lt;script type="text/javascript"&amp;gt;&lt;br /&gt;&amp;lt;!--&lt;br /&gt;function menuFix() {&lt;br /&gt;var sfEls = document.getElementById("nav").getElementsByTagName("li");&lt;br /&gt;for (var i=0; i&amp;lt;sfEls.length; i++) {&lt;br /&gt;&amp;nbsp;&amp;nbsp;sfEls&lt;em&gt;.onmouseover=function() {&lt;br /&gt;&amp;nbsp;&amp;nbsp;this.className+=(this.className.length&amp;gt;0? " ": "") + "sfhover";&lt;br /&gt;&amp;nbsp;&amp;nbsp;}&lt;br /&gt;&amp;nbsp;&amp;nbsp;sfEls&lt;em&gt;.onMouseDown=function() {&lt;br /&gt;&amp;nbsp;&amp;nbsp;this.className+=(this.className.length&amp;gt;0? " ": "") + "sfhover";&lt;br /&gt;&amp;nbsp;&amp;nbsp;}&lt;br /&gt;&amp;nbsp;&amp;nbsp;sfEls&lt;em&gt;.onMouseUp=function() {&lt;br /&gt;&amp;nbsp;&amp;nbsp;this.className+=(this.className.length&amp;gt;0? " ": "") + "sfhover";&lt;br /&gt;&amp;nbsp;&amp;nbsp;}&lt;br /&gt;&amp;nbsp;&amp;nbsp;sfEls&lt;em&gt;.onmouseout=function() {&lt;br /&gt;&amp;nbsp;&amp;nbsp;this.className=this.className.replace(new RegExp("( ?|^)sfhover\\b"), &lt;br /&gt;&lt;br /&gt;"");&lt;br /&gt;&amp;nbsp;&amp;nbsp;}&lt;br /&gt;}&lt;br /&gt;}&lt;br /&gt;window.onload=menuFix;&lt;br /&gt;&lt;br /&gt;//--&amp;gt;&lt;br /&gt;&amp;lt;/script&amp;gt;&lt;/em&gt;&lt;/em&gt;&lt;/em&gt;&lt;/em&gt;&lt;/p&gt;&lt;img src="http://www.cnblogs.com/liulanglang/aggbug/2268975.html?type=1" width="1" height="1" alt=""/&gt;&lt;p&gt;&lt;a href="http://www.cnblogs.com/liulanglang/archive/2011/11/30/2268975.html" target="_blank"&gt;本文链接&lt;/a&gt;&lt;/p&gt;</content></entry><entry><id>http://www.cnblogs.com/liulanglang/archive/2011/11/30/2268973.html</id><title type="text">CSS + JavaScript 利用display:none/block 构造弹出菜单</title><summary type="text">&lt;!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"&gt;&lt;html xmlns="http://www.w3.org/1999/xhtml"&gt;&lt;head&gt;&lt;title&gt; new document &lt;/title&gt;&lt;meta name="generator" conte</summary><published>2011-11-30T05:27:00Z</published><updated>2011-11-30T05:27:00Z</updated><author><name>流浪浪</name><uri>http://www.cnblogs.com/liulanglang/</uri></author><link rel="alternate" href="http://www.cnblogs.com/liulanglang/archive/2011/11/30/2268973.html"/><link rel="alternate" type="text/html" href="http://www.cnblogs.com/liulanglang/archive/2011/11/30/2268973.html"/><content type="html">&lt;p&gt;&amp;lt;!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"&amp;gt;&lt;br /&gt;&amp;lt;html xmlns="http://www.w3.org/1999/xhtml"&amp;gt;&lt;br /&gt;&amp;lt;head&amp;gt;&lt;br /&gt;&amp;lt;title&amp;gt; new document &amp;lt;/title&amp;gt;&lt;br /&gt;&amp;lt;meta name="generator" content="editplus" /&amp;gt;&lt;br /&gt;&amp;lt;meta name="author" content="" /&amp;gt;&lt;br /&gt;&amp;lt;meta name="keywords" content="" /&amp;gt;&lt;br /&gt;&amp;lt;meta name="description" content="" /&amp;gt;&lt;br /&gt;&amp;lt;style type="text/css"&amp;gt;&lt;br /&gt;*{margin:0px; padding:0px; border=0; list-style:none; font-family:verdana;}&lt;br /&gt;&lt;br /&gt;#nav{font-size:10pt}&lt;br /&gt;&lt;br /&gt;#nav a{text-decoration:none}&lt;br /&gt;#nav a:link{color:#999}&lt;br /&gt;#nav a:visited{color:#999}&lt;br /&gt;#nav a:hover{color:black}&lt;br /&gt;#nav a:active{color:#999}&lt;br /&gt;&lt;br /&gt;#nav li{width:120px; padding:4px; border:solid 1px; margin:3px; text-align:center; position:relative} /* 整个一级菜单占的长度120+4+1+3=128px */&lt;br /&gt;&lt;br /&gt;#nav li ul{display:none; position:absolute; left:129px; top:-4px; background:#fff} /*padding:4px，利用display:none隐藏菜单，background:#fff用于填充空隙，否则IE中有问题*/&lt;br /&gt;&lt;br /&gt;/*important for ff */&lt;br /&gt;#nav li ul li a{display:inline-block; background:#eee; border:solid 1px; width: 120px} /*用display将a转化为块元素，为右弹效果做准备*/&lt;br /&gt;#nav li ul li a{display:inline-block}&lt;br /&gt;/*设置带链接子菜单的外观*/&lt;br /&gt;#nav li ul li a:link{color:black}&lt;br /&gt;#nav li ul li a:visited{color:black}&lt;br /&gt;#nav li ul li a:hover{position:relative; left:8px} /*右弹的效果*/&lt;br /&gt;#nav li ul li a:active{color:black}&lt;br /&gt;&lt;br /&gt;#nav li:hover ul, #nav li.over ul{display:block} /*显示被隐藏的菜单*/&lt;br /&gt;&lt;br /&gt;&amp;lt;/style&amp;gt;&lt;br /&gt;&amp;lt;script type="text/javascript"&amp;gt;&lt;br /&gt;var a = function()&lt;br /&gt;{&lt;br /&gt;var nav = document.getElementById('nav');&lt;br /&gt;var lis = nav.childNodes;&lt;br /&gt;for(var i = 0;i&amp;lt;lis.length;i++)&lt;br /&gt;{&lt;br /&gt;if(lis[i].nodeName=='LI')&lt;br /&gt;{&lt;br /&gt;var childLi = lis[i];&lt;br /&gt;childLi.onmouseover = function(){this.className='over';}&lt;br /&gt;childLi.onmouseout = function(){this.className='';}&lt;br /&gt;}&lt;br /&gt;}&lt;br /&gt;}&lt;br /&gt;window.onload = a;&lt;br /&gt;&amp;lt;/script&amp;gt;&lt;br /&gt;&amp;lt;/head&amp;gt;&lt;br /&gt;&amp;lt;body&amp;gt;&lt;br /&gt;&amp;lt;ul id="nav"&amp;gt;&lt;br /&gt;&amp;lt;li&amp;gt;&amp;lt;a href="#1"&amp;gt;产品介绍&amp;lt;/a&amp;gt;&lt;br /&gt;&amp;lt;ul&amp;gt;&lt;br /&gt;&amp;lt;li&amp;gt;&amp;lt;a href="#1"&amp;gt;Link&amp;lt;/a&amp;gt;&amp;lt;/li&amp;gt;&lt;br /&gt;&amp;lt;/ul&amp;gt;&lt;br /&gt;&amp;lt;/li&amp;gt;&lt;br /&gt;&amp;lt;li&amp;gt;产品介绍&lt;br /&gt;&amp;lt;ul&amp;gt;&lt;br /&gt;&amp;lt;li&amp;gt;&amp;lt;a href="#1"&amp;gt;Link&amp;lt;/a&amp;gt;&amp;lt;/li&amp;gt;&lt;br /&gt;&amp;lt;li&amp;gt;&amp;lt;a href="#1"&amp;gt;Link&amp;lt;/a&amp;gt;&amp;lt;/li&amp;gt;&lt;br /&gt;&amp;lt;/ul&amp;gt;&lt;br /&gt;&amp;lt;/li&amp;gt;&lt;br /&gt;&amp;lt;li&amp;gt;产品介绍&lt;br /&gt;&amp;lt;ul&amp;gt;&lt;br /&gt;&amp;lt;li&amp;gt;&amp;lt;a href="#1"&amp;gt;Link&amp;lt;/a&amp;gt;&amp;lt;/li&amp;gt;&lt;br /&gt;&amp;lt;li&amp;gt;&amp;lt;a href="#1"&amp;gt;Link&amp;lt;/a&amp;gt;&amp;lt;/li&amp;gt;&lt;br /&gt;&amp;lt;li&amp;gt;&amp;lt;a href="#1"&amp;gt;Link&amp;lt;/a&amp;gt;&amp;lt;/li&amp;gt;&lt;br /&gt;&amp;lt;/ul&amp;gt;&lt;br /&gt;&amp;lt;/li&amp;gt;&lt;br /&gt;&amp;lt;li&amp;gt;产品介绍&lt;br /&gt;&amp;lt;ul&amp;gt;&lt;br /&gt;&amp;lt;li&amp;gt;&amp;lt;a href="#1"&amp;gt;Link&amp;lt;/a&amp;gt;&amp;lt;/li&amp;gt;&lt;br /&gt;&amp;lt;li&amp;gt;&amp;lt;a href="#1"&amp;gt;Link&amp;lt;/a&amp;gt;&amp;lt;/li&amp;gt;&lt;br /&gt;&amp;lt;li&amp;gt;&amp;lt;a href="#1"&amp;gt;Link&amp;lt;/a&amp;gt;&amp;lt;/li&amp;gt;&lt;br /&gt;&amp;lt;li&amp;gt;&amp;lt;a href="#1"&amp;gt;Link&amp;lt;/a&amp;gt;&amp;lt;/li&amp;gt;&lt;br /&gt;&amp;lt;/ul&amp;gt;&lt;br /&gt;&amp;lt;/li&amp;gt;&lt;br /&gt;&amp;lt;li&amp;gt;产品介绍&lt;br /&gt;&amp;lt;ul&amp;gt;&lt;br /&gt;&amp;lt;li&amp;gt;&amp;lt;a href="#1"&amp;gt;Link&amp;lt;/a&amp;gt;&amp;lt;/li&amp;gt;&lt;br /&gt;&amp;lt;li&amp;gt;&amp;lt;a href="#1"&amp;gt;Link&amp;lt;/a&amp;gt;&amp;lt;/li&amp;gt;&lt;br /&gt;&amp;lt;li&amp;gt;&amp;lt;a href="#1"&amp;gt;Link&amp;lt;/a&amp;gt;&amp;lt;/li&amp;gt;&lt;br /&gt;&amp;lt;li&amp;gt;&amp;lt;a href="#1"&amp;gt;Link&amp;lt;/a&amp;gt;&amp;lt;/li&amp;gt;&lt;br /&gt;&amp;lt;li&amp;gt;&amp;lt;a href="#1"&amp;gt;Link&amp;lt;/a&amp;gt;&amp;lt;/li&amp;gt;&lt;br /&gt;&amp;lt;/ul&amp;gt;&lt;br /&gt;&amp;lt;/li&amp;gt;&lt;br /&gt;&amp;lt;/ul&amp;gt;&lt;br /&gt;&amp;lt;/body&amp;gt;&lt;br /&gt;&amp;lt;/html&amp;gt;&lt;/p&gt;&lt;img src="http://www.cnblogs.com/liulanglang/aggbug/2268973.html?type=1" width="1" height="1" alt=""/&gt;&lt;p&gt;&lt;a href="http://www.cnblogs.com/liulanglang/archive/2011/11/30/2268973.html" target="_blank"&gt;本文链接&lt;/a&gt;&lt;/p&gt;</content></entry><entry><id>http://www.cnblogs.com/liulanglang/archive/2011/11/24/2262157.html</id><title type="text">23种设计模式的通俗理解</title><summary type="text">1、FACTORY 追MM少不了请吃饭了，麦当劳的鸡翅和肯德基的鸡翅都是MM爱吃的东西，虽然口味有所不同，但不管你带MM去麦当劳或肯德基，只管向服务员说“来四个鸡翅”就行了。麦当劳和肯德基就是生产鸡翅的Factory 工厂模式：客户类和工厂类分开。消费者任何时候需要某种产品，只需向工厂请求即可。消费者无须修改就可以接纳新产品。缺点是当产品修改时，工厂类也要做相应的修改。如：如何创建及如何向客户端提供。2、BUILDER MM最爱听的就是“我爱你”这句话了，见到不同地方的MM,要能够用她们的方言跟她说这句话哦，我有一个多种语言翻译机，上面每种语言都有一个按键，见到MM我只要按对应的键，它就能..</summary><published>2011-11-24T11:00:00Z</published><updated>2011-11-24T11:00:00Z</updated><author><name>流浪浪</name><uri>http://www.cnblogs.com/liulanglang/</uri></author><link rel="alternate" href="http://www.cnblogs.com/liulanglang/archive/2011/11/24/2262157.html"/><link rel="alternate" type="text/html" href="http://www.cnblogs.com/liulanglang/archive/2011/11/24/2262157.html"/><content type="html">&lt;div id="note_162200443_full"&gt;1、FACTORY  &lt;br/&gt;&lt;br/&gt;追MM少不了请吃饭了，麦当劳的鸡翅和肯德基的鸡翅都是MM爱吃的东西，虽然口味有所不同，但不管你带MM去麦当劳或肯德基，只管向服务员说&amp;ldquo;来四个鸡翅&amp;rdquo;就行了。麦当劳和肯德基就是生产鸡翅的Factory 工厂模式：客户类和工厂类分开。消费者任何时候需要某种产品，只需向工厂请求即可。消费者无须修改就可以接纳新产品。缺点是当产品修改时，工厂类也要做相应的修改。如：如何创建及如何向客户端提供。&lt;br/&gt;&lt;br/&gt;2、BUILDER  &lt;br/&gt;&lt;br/&gt;MM最爱听的就是&amp;ldquo;我爱你&amp;rdquo;这句话了，见到不同地方的MM,要能够用她们的方言跟她说这句话哦，我有一个多种语言翻译机，上面每种语言都有一个按键，见到MM我只要按对应的键，它就能够用相应的语言说出&amp;ldquo;我爱你&amp;rdquo;这句话了，国外的MM也可以轻松搞掂，这就是我的&amp;ldquo;我爱你&amp;rdquo;builder。（这一定比美军在伊拉克用的翻译机好卖） 建造模式：将产品的内部表象和产品的生成过程分割开来，从而使一个建造过程生成具有不同的内部表象的产品对象。建造模式使得产品内部表象可以独立的变化，客户不必知道产品内部组成的细节。建造模式可以强制实行一种分步骤进行的建造过程。&lt;br/&gt;&lt;br/&gt;3、FACTORY METHOD  &lt;br/&gt;&lt;br/&gt;请MM去麦当劳吃汉堡，不同的MM有不同的口味，要每个都记住是一件烦人的事情，我一般采用Factory Method模式，带着MM到服务员那儿，说&amp;ldquo;要一个汉堡&amp;rdquo;，具体要什么样的汉堡呢，让MM直接跟服务员说就行了。 工厂方法模式：核心工厂类不再负责所有产品的创建，而是将具体创建的工作交给子类去做，成为一个抽象工厂角色，仅负责给出具体工厂类必须实现的接口，而不接触哪一个产品类应当被实例化这种细节。&lt;br/&gt;&lt;br/&gt;4、PROTOTYPE  &lt;br/&gt;&lt;br/&gt;跟MM用QQ聊天，一定要说些深情的话语了，我搜集了好多肉麻的情话，需要时只要copy出来放到QQ里面就行了，这就是我的情话prototype了。（100块钱一份，你要不要） 原始模型模式：通过给出一个原型对象来指明所要创建的对象的类型，然后用复制这个原型对象的方法创建出更多同类型的对象。原始模型模式允许动态的增加或减少产品类，产品类不需要非得有任何事先确定的等级结构，原始模型模式适用于任何的等级结构。缺点是每一个类都必须配备一个克隆方法。&lt;br/&gt;&lt;br/&gt;5、SINGLETON  &lt;br/&gt;&lt;br/&gt;俺有6个漂亮的老婆，她们的老公都是我，我就是我们家里的老公Sigleton，她们只要说道&amp;ldquo;老公&amp;rdquo;，都是指的同一个人，那就是我(刚才做了个梦啦，哪有这么好的事) 单例模式：单例模式确保某一个类只有一个实例，而且自行实例化并向整个系统提供这个实例单例模式。单例模式只应在有真正的&amp;ldquo;单一实例&amp;rdquo;的需求时才可使用。 [b:9ceca65206]结构型模式[/b:9ceca65206]&lt;br/&gt;&lt;br/&gt;6、ADAPTER &lt;br/&gt;&lt;br/&gt; 在朋友聚会上碰到了一个美女Sarah，从香港来的，可我不会说粤语，她不会说普通话，只好求助于我的朋友kent了，他作为我和Sarah之间的Adapter，让我和Sarah可以相互交谈了(也不知道他会不会耍我) 适配器（变压器）模式：把一个类的接口变换成客户端所期待的另一种接口，从而使原本因接口原因不匹配而无法一起工作的两个类能够一起工作。适配类可以根据参数返还一个合适的实例给客户端。&lt;br/&gt;&lt;br/&gt;7、BRIDGE  &lt;br/&gt;&lt;br/&gt;早上碰到MM，要说早上好，晚上碰到MM，要说晚上好；碰到MM穿了件新衣服，要说你的衣服好漂亮哦，碰到MM新做的发型，要说你的头发好漂亮哦。不要问我&amp;ldquo;早上碰到MM新做了个发型怎么说&amp;rdquo;这种问题，自己用BRIDGE组合一下不就行了 桥梁模式：将抽象化与实现化脱耦，使得二者可以独立的变化，也就是说将他们之间的强关联变成弱关联，也就是指在一个软件系统的抽象化和实现化之间使用组合/聚合关系而不是继承关系，从而使两者可以独立的变化。&lt;br/&gt;&lt;br/&gt;8、COMPOSITE  &lt;br/&gt;&lt;br/&gt;Mary今天过生日。&amp;ldquo;我过生日，你要送我一件礼物。&amp;rdquo;&amp;ldquo;嗯，好吧，去商店，你自己挑。&amp;rdquo;&amp;ldquo;这件T恤挺漂亮，买，这条裙子好看，买，这个包也不错，买。&amp;rdquo;&amp;ldquo;喂，买了三件了呀，我只答应送一件礼物的哦。&amp;rdquo;&amp;ldquo;什么呀，T恤加裙子加包包，正好配成一套呀，小姐，麻烦你包起来。&amp;rdquo;&amp;ldquo;&amp;hellip;&amp;hellip;&amp;rdquo;，MM都会用Composite模式了，你会了没有？ 合成模式：合成模式将对象组织到树结构中，可以用来描述整体与部分的关系。合成模式就是一个处理对象的树结构的模式。合成模式把部分与整体的关系用树结构表示出来。合成模式使得客户端把一个个单独的成分对象和由他们复合而成的合成对象同等看待。&lt;br/&gt;&lt;br/&gt;9、DECORATOR  &lt;br/&gt;&lt;br/&gt;Mary过完轮到Sarly过生日，还是不要叫她自己挑了，不然这个月伙食费肯定玩完，拿出我去年在华山顶上照的照片，在背面写上&amp;ldquo;最好的的礼物，就是爱你的Fita&amp;rdquo;，再到街上礼品店买了个像框（卖礼品的MM也很漂亮哦），再找隔壁搞美术设计的Mike设计了一个漂亮的盒子装起来&amp;hellip;&amp;hellip;，我们都是Decorator，最终都在修饰我这个人呀，怎么样，看懂了吗？ 装饰模式：装饰模式以对客户端透明的方式扩展对象的功能，是继承关系的一个替代方案，提供比继承更多的灵活性。动态给一个对象增加功能，这些功能可以再动态的撤消。增加由一些基本功能的排列组合而产生的非常大量的功能。&lt;br/&gt;&lt;br/&gt;10、FACADE  &lt;br/&gt;&lt;br/&gt;我有一个专业的Nikon相机，我就喜欢自己手动调光圈、快门，这样照出来的照片才专业，但MM可不懂这些，教了半天也不会。幸好相机有Facade设计模式，把相机调整到自动档，只要对准目标按快门就行了，一切由相机自动调整，这样MM也可以用这个相机给我拍张照片了。 门面模式：外部与一个子系统的通信必须通过一个统一的门面对象进行。门面模式提供一个高层次的接口，使得子系统更易于使用。每一个子系统只有一个门面类，而且此门面类只有一个实例，也就是说它是一个单例模式。但整个系统可以有多个门面类。&lt;br/&gt;&lt;br/&gt;11、FLYWEIGHT  &lt;br/&gt;&lt;br/&gt;每天跟MM发短信，手指都累死了，最近买了个新手机，可以把一些常用的句子存在手机里，要用的时候，直接拿出来，在前面加上MM的名字就可以发送了，再不用一个字一个字敲了。共享的句子就是Flyweight，MM的名字就是提取出来的外部特征，根据上下文情况使用。 享元模式：FLYWEIGHT在拳击比赛中指最轻量级。享元模式以共享的方式高效的支持大量的细粒度对象。享元模式能做到共享的关键是区分内蕴状态和外蕴状态。内蕴状态存储在享元内部，不会随环境的改变而有所不同。外蕴状态是随环境的改变而改变的。外蕴状态不能影响内蕴状态，它们是相互独立的。将可以共享的状态和不可以共享的状态从常规类中区分开来，将不可以共享的状态从类里剔除出去。客户端不可以直接创建被共享的对象，而应当使用一个工厂对象负责创建被共享的对象。享元模式大幅度的降低内存中对象的数量。&lt;br/&gt;&lt;br/&gt;12、PROXY  &lt;br/&gt;&lt;br/&gt;跟MM在网上聊天，一开头总是&amp;ldquo;hi,你好&amp;rdquo;,&amp;ldquo;你从哪儿来呀？&amp;rdquo;&amp;ldquo;你多大了？&amp;rdquo;&amp;ldquo;身高多少呀？&amp;rdquo;这些话，真烦人，写个程序做为我的Proxy吧，凡是接收到这些话都设置好了自己的回答，接收到其他的话时再通知我回答，怎么样，酷吧。 代理模式：代理模式给某一个对象提供一个代理对象，并由代理对象控制对源对象的引用。代理就是一个人或一个机构代表另一个人或者一个机构采取行动。某些情况下，客户不想或者不能够直接引用一个对象，代理对象可以在客户和目标对象直接起到中介的作用。客户端分辨不出代理主题对象与真实主题对象。代理模式可以并不知道真正的被代理对象，而仅仅持有一个被代理对象的接口，这时候代理对象不能够创建被代理对象，被代理对象必须有系统的其他角色代为创建并传入。 [b:9ceca65206]行为模式[/b:9ceca65206]&lt;br/&gt;&lt;br/&gt;13、CHAIN OF RESPONSIBLEITY  &lt;br/&gt;&lt;br/&gt;晚上去上英语课，为了好开溜坐到了最后一排，哇，前面坐了好几个漂亮的MM哎，找张纸条，写上&amp;ldquo;Hi,可以做我的女朋友吗？如果不愿意请向前传&amp;rdquo;，纸条就一个接一个的传上去了，糟糕，传到第一排的MM把纸条传给老师了，听说是个老处女呀，快跑! 责任链模式：在责任链模式中，很多对象由每一个对象对其下家的引用而接起来形成一条链。请求在这个链上传递，直到链上的某一个对象决定处理此请求。客户并不知道链上的哪一个对象最终处理这个请求，系统可以在不影响客户端的情况下动态的重新组织链和分配责任。处理者有两个选择：承担责任或者把责任推给下家。一个请求可以最终不被任何接收端对象所接受。&lt;br/&gt;&lt;br/&gt;14、COMMAND  &lt;br/&gt;&lt;br/&gt;俺有一个MM家里管得特别严，没法见面，只好借助于她弟弟在我们俩之间传送信息，她对我有什么指示，就写一张纸条让她弟弟带给我。这不，她弟弟又传送过来一个COMMAND，为了感谢他，我请他吃了碗杂酱面，哪知道他说：&amp;ldquo;我同时给我姐姐三个男朋友送COMMAND，就数你最小气，才请我吃面。&amp;rdquo;， 命令模式：命令模式把一个请求或者操作封装到一个对象中。命令模式把发出命令的责任和执行命令的责任分割开，委派给不同的对象。命令模式允许请求的一方和发送的一方独立开来，使得请求的一方不必知道接收请求的一方的接口，更不必知道请求是怎么被接收，以及操作是否执行，何时被执行以及是怎么被执行的。系统支持命令的撤消。&lt;br/&gt;&lt;br/&gt;15、INTERPRETER  &lt;br/&gt;&lt;br/&gt;俺有一个《泡MM真经》，上面有各种泡MM的攻略，比如说去吃西餐的步骤、去看电影的方法等等，跟MM约会时，只要做一个Interpreter，照着上面的脚本执行就可以了。 解释器模式：给定一个语言后，解释器模式可以定义出其文法的一种表示，并同时提供一个解释器。客户端可以使用这个解释器来解释这个语言中的句子。解释器模式将描述怎样在有了一个简单的文法后，使用模式设计解释这些语句。在解释器模式里面提到的语言是指任何解释器对象能够解释的任何组合。在解释器模式中需要定义一个代表文法的命令类的等级结构，也就是一系列的组合规则。每一个命令对象都有一个解释方法，代表对命令对象的解释。命令对象的等级结构中的对象的任何排列组合都是一个语言。&lt;br/&gt;&lt;br/&gt;16、ITERATOR  &lt;br/&gt;&lt;br/&gt;我爱上了Mary，不顾一切的向她求婚。 Mary：&amp;ldquo;想要我跟你结婚，得答应我的条件&amp;rdquo; 我：&amp;ldquo;什么条件我都答应，你说吧&amp;rdquo; Mary：&amp;ldquo;我看上了那个一克拉的钻石&amp;rdquo; 我：&amp;ldquo;我买，我买，还有吗？&amp;rdquo; Mary：&amp;ldquo;我看上了湖边的那栋别墅&amp;rdquo; 我：&amp;ldquo;我买，我买，还有吗？&amp;rdquo; Mary：&amp;ldquo;我看上那辆法拉利跑车&amp;rdquo; 我脑袋嗡的一声，坐在椅子上，一咬牙：&amp;ldquo;我买，我买，还有吗？&amp;rdquo; &amp;hellip;&amp;hellip; 迭代子模式：迭代子模式可以顺序访问一个聚集中的元素而不必暴露聚集的内部表象。多个对象聚在一起形成的总体称之为聚集，聚集对象是能够包容一组对象的容器对象。迭代子模式将迭代逻辑封装到一个独立的子对象中，从而与聚集本身隔开。迭代子模式简化了聚集的界面。每一个聚集对象都可以有一个或一个以上的迭代子对象，每一个迭代子的迭代状态可以是彼此独立的。迭代算法可以独立于聚集角色变化。&lt;br/&gt;&lt;br/&gt;17、MEDIATOR  &lt;br/&gt;&lt;br/&gt;四个MM打麻将，相互之间谁应该给谁多少钱算不清楚了，幸亏当时我在旁边，按照各自的筹码数算钱，赚了钱的从我这里拿，赔了钱的也付给我，一切就OK啦，俺得到了四个MM的电话。 调停者模式：调停者模式包装了一系列对象相互作用的方式，使得这些对象不必相互明显作用。从而使他们可以松散偶合。当某些对象之间的作用发生改变时，不会立即影响其他的一些对象之间的作用。保证这些作用可以彼此独立的变化。调停者模式将多对多的相互作用转化为一对多的相互作用。调停者模式将对象的行为和协作抽象化，把对象在小尺度的行为上与其他对象的相互作用分开处理。&lt;br/&gt;&lt;br/&gt;18、MEMENTO  &lt;br/&gt;&lt;br/&gt;同时跟几个MM聊天时，一定要记清楚刚才跟MM说了些什么话，不然MM发现了会不高兴的哦，幸亏我有个备忘录，刚才与哪个MM说了什么话我都拷贝一份放到备忘录里面保存，这样可以随时察看以前的记录啦。 备忘录模式：备忘录对象是一个用来存储另外一个对象内部状态的快照的对象。备忘录模式的用意是在不破坏封装的条件下，将一个对象的状态捉住，并外部化，存储起来，从而可以在将来合适的时候把这个对象还原到存储起来的状态。&lt;br/&gt;&lt;br/&gt;19、OBSERVER  &lt;br/&gt;&lt;br/&gt;想知道咱们公司最新MM情报吗？加入公司的MM情报邮件组就行了，tom负责搜集情报，他发现的新情报不用一个一个通知我们，直接发布给邮件组，我们作为订阅者（观察者）就可以及时收到情报啦 观察者模式：观察者模式定义了一种一队多的依赖关系，让多个观察者对象同时监听某一个主题对象。这个主题对象在状态上发生变化时，会通知所有观察者对象，使他们能够自动更新自己。&lt;br/&gt;&lt;br/&gt;20、STATE  &lt;br/&gt;&lt;br/&gt;跟MM交往时，一定要注意她的状态哦，在不同的状态时她的行为会有不同，比如你约她今天晚上去看电影，对你没兴趣的MM就会说&amp;ldquo;有事情啦&amp;rdquo;，对你不讨厌但还没喜欢上的MM就会说&amp;ldquo;好啊，不过可以带上我同事么？&amp;rdquo;，已经喜欢上你的MM就会说&amp;ldquo;几点钟？看完电影再去泡吧怎么样？&amp;rdquo;，当然你看电影过程中表现良好的话，也可以把MM的状态从不讨厌不喜欢变成喜欢哦。 状态模式：状态模式允许一个对象在其内部状态改变的时候改变行为。这个对象看上去象是改变了它的类一样。状态模式把所研究的对象的行为包装在不同的状态对象里，每一个状态对象都属于一个抽象状态类的一个子类。状态模式的意图是让一个对象在其内部状态改变的时候，其行为也随之改变。状态模式需要对每一个系统可能取得的状态创立一个状态类的子类。当系统的状态变化时，系统便改变所选的子类。&lt;br/&gt;&lt;br/&gt;21、STRATEGY  &lt;br/&gt;&lt;br/&gt;跟不同类型的MM约会，要用不同的策略，有的请电影比较好，有的则去吃小吃效果不错，有的去海边浪漫最合适，单目的都是为了得到MM的芳心，我的追MM锦囊中有好多Strategy哦。 策略模式：策略模式针对一组算法，将每一个算法封装到具有共同接口的独立的类中，从而使得它们可以相互替换。策略模式使得算法可以在不影响到客户端的情况下发生变化。策略模把行为和环境分开。环境类负责维持和查询行为类，各种算法在具体的策略类中提供。由于算法和环境独立开来，算法的增减，修改都不会影响到环境和客户端。&lt;br/&gt;&lt;br/&gt;22、TEMPLATE METHOD  &lt;br/&gt;&lt;br/&gt;看过《如何说服女生上床》这部经典文章吗？女生从认识到上床的不变的步骤分为巧遇、打破僵局、展开追求、接吻、前戏、动手、爱抚、进去八大步骤(Template method)，但每个步骤针对不同的情况，都有不一样的做法，这就要看你随机应变啦(具体实现)； 模板方法模式：模板方法模式准备一个抽象类，将部分逻辑以具体方法以及具体构造子的形式实现，然后声明一些抽象方法来迫使子类实现剩余的逻辑。不同的子类可以以不同的方式实现这些抽象方法，从而对剩余的逻辑有不同的实现。先制定一个顶级逻辑框架，而将逻辑的细节留给具体的子类去实现。&lt;br/&gt;&lt;br/&gt;23、VISITOR  &lt;br/&gt;&lt;br/&gt;情人节到了，要给每个MM送一束鲜花和一张卡片，可是每个MM送的花都要针对她个人的特点，每张卡片也要根据个人的特点来挑，我一个人哪搞得清楚，还是找花店老板和礼品店老板做一下Visitor，让花店老板根据MM的特点选一束花，让礼品店老板也根据每个人特点选一张卡，这样就轻松多了； 访问者模式：访问者模式的目的是封装一些施加于某种数据结构元素之上的操作。一旦这些操作需要修改的话，接受这个操作的数据结构可以保持不变。访问者模式适用于数据结构相对未定的系统，它把数据结构和作用于结构上的操作之间的耦合解脱开，使得操作集合可以相对自由的演化。访问者模式使得增加新的操作变的很容易，就是增加一个新的访问者类。访问者模式将有关的行为集中到一个访问者对象中，而不是分散到一个个的节点类中。当使用访问者模式时，要将尽可能多的对象浏览逻辑放在访问者类中，而不是放到它的子类中。访问者模式可以跨过几个类的等级结构访问属于不同的等级结构的成员类。&lt;/div&gt;&lt;img src="http://www.cnblogs.com/liulanglang/aggbug/2262157.html?type=1" width="1" height="1" alt=""/&gt;&lt;p&gt;&lt;a href="http://www.cnblogs.com/liulanglang/archive/2011/11/24/2262157.html" target="_blank"&gt;本文链接&lt;/a&gt;&lt;/p&gt;</content></entry><entry><id>http://www.cnblogs.com/liulanglang/archive/2011/11/15/2249702.html</id><title type="text">myeclipse9.0破解方法</title><summary type="text">首先下载激活工具：激活工具下载首先：windows下激活，这是最简单的了。1.首先确保安装了java6和myeclipse9.0，并没有打开MyEclipse9.0。找到MyEclipse的安装目录（具体根据个人安装情况而定，可以使用搜索），我的电脑上默认是在：C:\Users\Sun\AppData\Local\MyEclipse（注意AppData是隐藏文件）找到Common\plugins\com.genuitec.eclipse.core_9.0.0.me201103181703.jar，这个文件，使用解压缩软件打开（比如winrar for win, betterzip for ma</summary><published>2011-11-15T06:39:00Z</published><updated>2011-11-15T06:39:00Z</updated><author><name>流浪浪</name><uri>http://www.cnblogs.com/liulanglang/</uri></author><link rel="alternate" href="http://www.cnblogs.com/liulanglang/archive/2011/11/15/2249702.html"/><link rel="alternate" type="text/html" href="http://www.cnblogs.com/liulanglang/archive/2011/11/15/2249702.html"/><content type="html">&lt;p&gt;首先下载激活工具：&lt;a href="http://files.cnblogs.com/SunChina/myeclipse9_keygen_activator.zip"&gt;激活工具下载&lt;/a&gt;&lt;/p&gt;&lt;p&gt;首先：windows下激活，这是最简单的了。&lt;/p&gt;&lt;p&gt;&amp;nbsp;&lt;/p&gt;&lt;p&gt;1.首先确保安装了java6和myeclipse9.0，并没有打开MyEclipse9.0。&lt;/p&gt;&lt;p&gt;找到MyEclipse的安装目录（具体根据个人安装情况而定，可以使用搜索），我的电脑上默认是在：C:\Users\Sun\AppData\Local\MyEclipse（注意AppData是隐藏文件）&lt;/p&gt;&lt;p&gt;找到Common\plugins\com.genuitec.eclipse.core_9.0.0.me201103181703.jar，这个文件，使用解压缩软件打开（比如winrar for win, betterzip for mac）&lt;/p&gt;&lt;p&gt;经将com\genuitec\eclipse\core\publicKey.bytes文件替换为激活工具中的同名文件。&lt;/p&gt;&lt;p&gt;&amp;nbsp;&lt;/p&gt;&lt;p&gt;2.破解MyEclipse9.0自检查程序文件完整性，若不改，那公钥破解会导致MyEclipse自检查失败，自动退出&lt;/p&gt;&lt;p&gt;用文本编辑器打开MyEclipse9.0\myeclipse.ini文件，在最后添加如下两行并保存：&lt;/p&gt;&lt;p&gt;-Dgenuitec.honorDevMode=true&lt;/p&gt;&lt;p&gt;-Dosgi.dev=true&lt;/p&gt;&lt;p&gt;3.启动MyEclipse9.0，执行myeclipse9_keygen_activator.exe(注册机)，在Subscriptor栏填写你喜欢的英文名称，点击Generate Subscription Code会生成Subscription&lt;/p&gt;&lt;p&gt;&lt;img style="display: block; margin-left: auto; margin-right: auto;" src="http://pic002.cnblogs.com/images/2011/291609/2011073111044294.png" alt="" /&gt;&lt;/p&gt;&lt;p&gt;Myeclipse中，菜单栏--&amp;gt;MyEclipse--&amp;gt;Subscriber Information，在Subscriber栏输入刚才的英文名，Subscription Code用刚才获取的。&lt;/p&gt;&lt;p&gt;&lt;img style="display: block; margin-left: auto; margin-right: auto;" src="http://pic002.cnblogs.com/images/2011/291609/2011073111263180.png" alt="" /&gt;&lt;/p&gt;&lt;p&gt;如果你是x86的系统，此时点击Generate Activation Code便会生成Activation Code&lt;/p&gt;&lt;p&gt;如果你是x64的系统，你有两种选择：&lt;/p&gt;&lt;p&gt;1)安装x86的jdk然后执行（可能要添加环境变量），我也是这么做的。&lt;/p&gt;&lt;p&gt;2)与下面linux和mac的获取方法一致&lt;/p&gt;&lt;p&gt;输入Subscription Code之后，点击 Save &amp;amp; Activate Now--&amp;gt;I already have an activation code--&amp;gt;next--&amp;gt;粘贴那一长串的激活码。&lt;/p&gt;&lt;p&gt;&lt;img style="display: block; margin-left: auto; margin-right: auto;" src="http://pic002.cnblogs.com/images/2011/291609/2011073111083771.png" alt="" /&gt;&lt;/p&gt;&lt;p&gt;&amp;nbsp;&lt;/p&gt;&lt;p&gt;如果失败会有一个红色的小叉&lt;/p&gt;&lt;p&gt;&lt;img style="display: block; margin-left: auto; margin-right: auto;" src="http://pic002.cnblogs.com/images/2011/291609/2011073111273746.png" alt="" /&gt;&lt;/p&gt;&lt;p&gt;如果成功会打一个提示点击"next"。&lt;/p&gt;&lt;p&gt;&lt;img style="display: block; margin-left: auto; margin-right: auto; border-width: 0px;" src="http://pic002.cnblogs.com/images/2011/291609/2011073111272760.png" alt="" /&gt;&lt;/p&gt;&lt;p&gt;至此，windows下myeclipse 9.0激活成功！！！&lt;/p&gt;&lt;p&gt;linux与mac激活，大致与win下一致，但是由于不能运行.exe文件，获取Activation Code是一个问题。&lt;/p&gt;&lt;p&gt;关键还是systemid的问题，而myeclipse是可以自己获取到systemid的。&lt;/p&gt;&lt;p&gt;在选择激活方式的时候，不是选择I already have an activation code，而是选Webactivation，&lt;/p&gt;&lt;p&gt;&lt;img style="display: block; margin-left: auto; margin-right: auto;" src="http://pic002.cnblogs.com/images/2011/291609/2011073111275336.png" alt="" /&gt;&lt;/p&gt;&lt;p&gt;下一步之后如下图所示，复制途中红色部分，那个就是systemid。&lt;/p&gt;&lt;p&gt;&lt;img style="display: block; margin-left: auto; margin-right: auto;" src="http://pic002.cnblogs.com/images/2011/291609/2011073111275974.png" alt="" /&gt;&lt;/p&gt;&lt;p&gt;如果你仅仅把这个systemid复制到激活工具中去是不行的，激活工具的systemid是通过那个systemidtools.jar文件获取的，这时需要你自己写一个jar文件，把这个systemid传给激活工具，代码特别简单，如下&lt;/p&gt;&lt;p&gt;public class Test｛&lt;/p&gt;&lt;p&gt;public static void main(String[] args){&lt;/p&gt;&lt;p&gt;System.out.println("你的systemid")；&lt;/p&gt;&lt;p&gt;}&lt;/p&gt;&lt;p&gt;｝&lt;/p&gt;&lt;p&gt;这样就好了，打印的部分就是你获取的systemid，把这个类导出jar，命名为systemidtools.jar替换激活文件夹里面的对应文件就好了。在点击获取激活码便可以了。&lt;/p&gt;&lt;p&gt;需要注意的是:我的mac下myeclipse.ini文件在/Applications/MyEclipse/MyEclipse 9.app/Contents/Profile/myeclipse.app/Contents/MacOS文件夹下（我可找了大半天啊）不知道是怎么回事。&lt;/p&gt;&lt;p&gt;附Red Hat Enterprise Linux 与 &amp;nbsp;Mac OS X 10.7 下的激活图&lt;/p&gt;&lt;img src="http://www.cnblogs.com/liulanglang/aggbug/2249702.html?type=1" width="1" height="1" alt=""/&gt;&lt;p&gt;&lt;a href="http://www.cnblogs.com/liulanglang/archive/2011/11/15/2249702.html" target="_blank"&gt;本文链接&lt;/a&gt;&lt;/p&gt;</content></entry><entry><id>http://www.cnblogs.com/liulanglang/archive/2009/11/03/1595301.html</id><title type="text">C#弹出选择对话框的程序</title><summary type="text">很多时候，我们都用一个按钮来触发一个事件，从而达到实现某一功能的操作，如按下一个按钮实现对数据库某一记录或某一批记录进行删除等等。通常我们要进行这些操作前都先要进行提示确认的步骤，这个提示步骤是：当用户作某一操作时，首先弹出一个操作确认选择对话框，用户后确认后，操作才能有效执行，否则中止操作。这样做既可以给用户提供一个很好的操作界面，也防止了误操作的发生。下面就讨论一下用C#编写的弹出选择对话框程...</summary><published>2009-11-03T07:58:00Z</published><updated>2009-11-03T07:58:00Z</updated><author><name>流浪浪</name><uri>http://www.cnblogs.com/liulanglang/</uri></author><link rel="alternate" href="http://www.cnblogs.com/liulanglang/archive/2009/11/03/1595301.html"/><link rel="alternate" type="text/html" href="http://www.cnblogs.com/liulanglang/archive/2009/11/03/1595301.html"/><content type="text">很多时候，我们都用一个按钮来触发一个事件，从而达到实现某一功能的操作，如按下一个按钮实现对数据库某一记录或某一批记录进行删除等等。通常我们要进行这些操作前都先要进行提示确认的步骤，这个提示步骤是：当用户作某一操作时，首先弹出一个操作确认选择对话框，用户后确认后，操作才能有效执行，否则中止操作。这样做既可以给用户提供一个很好的操作界面，也防止了误操作的发生。下面就讨论一下用C#编写的弹出选择对话框程...</content></entry></feed>
