<?xml version="1.0" encoding="utf-8"?><feed xmlns="http://www.w3.org/2005/Atom"><title type="text">博客园_沐海—化茧成蝶</title><subtitle type="text">一只井底之蛙，你什么时候才能真正的向自己的脚下一点点的垫石头。而不是以为天下只有井口那么大。</subtitle><id>http://feed.cnblogs.com/blog/u/73182/rss</id><updated>2012-05-02T04:56:31Z</updated><author><name>沐海</name><uri>http://www.cnblogs.com/mahaisong/</uri></author><generator>feed.cnblogs.com</generator><link rel="alternate" type="text/html" href="http://www.cnblogs.com/mahaisong/"/><link rel="self" type="application/atom+xml" href="http://feed.cnblogs.com/blog/u/73182/rss"/><entry><id>http://www.cnblogs.com/mahaisong/archive/2012/03/31/2426432.html</id><title type="text">一大清早的惊醒，看别人SQL注入之后，加强学习SQL和参数化查询。</title><summary type="text">先说说两会(这名字不怕被河蟹)的帖子哈：http://www.cnblogs.com/hkncd/archive/2012/03/31/2426274.html忽然发现，很多项目中还使用这种拼SQL语句的方式。真是早就该进步啊。以前一师兄说过用参数化查询，我没有仔细揣摩参数化查询的本质。知其然不知其所以然，那么看完这帖子，我的困觉一下的又醒了。马上来仔细讨论学习一下SQL参数化查询。引用:以往的防御方式以前对付这种漏洞的方式主要有三种：字符串检测：限定内容只能由英文、数字等常规字符，如果检查到用户输入有特殊字符，直接拒绝。但缺点是，系统 中不可避免地会有些内容包含特殊字符，这时候总不能拒绝入库</summary><published>2012-03-31T01:57:00Z</published><updated>2012-03-31T01:57:00Z</updated><author><name>沐海</name><uri>http://www.cnblogs.com/mahaisong/</uri></author><link rel="alternate" href="http://www.cnblogs.com/mahaisong/archive/2012/03/31/2426432.html"/><link rel="alternate" type="text/html" href="http://www.cnblogs.com/mahaisong/archive/2012/03/31/2426432.html"/><content type="html">&lt;p&gt;先说说两会(这名字不怕被河蟹)的帖子哈：&lt;a title="http://www.cnblogs.com/hkncd/archive/2012/03/31/2426274.html" href="http://www.cnblogs.com/hkncd/archive/2012/03/31/2426274.html"&gt;http://www.cnblogs.com/hkncd/archive/2012/03/31/2426274.html&lt;/a&gt;&lt;/p&gt;&lt;p&gt;&amp;nbsp;&lt;/p&gt;&lt;p&gt;忽然发现，很多项目中还使用这种拼SQL语句的方式。真是早就该进步啊。以前一师兄说过用参数化查询，我没有仔细揣摩参数化查询的本质。知其然不知其所以然，那么看完这帖子，我的困觉一下的又醒了。马上来仔细讨论学习一下SQL参数化查询。&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;&amp;nbsp;&lt;/p&gt;&lt;table style="width: 400px;" border="1" cellspacing="0" cellpadding="2"&gt;&lt;tbody&gt;&lt;tr&gt;&lt;td valign="top" width="398"&gt;&lt;p&gt;&lt;strong&gt;以往的防御方式&lt;/strong&gt;&lt;/p&gt;&lt;p&gt;以前对付这种漏洞的方式主要有三种：&lt;/p&gt;&lt;ul&gt;&lt;li&gt;&lt;strong&gt;字符串检测&lt;/strong&gt;：限定内容只能由英文、数字等常规字符，如果检查到用户输入有特殊字符，直接拒绝。但缺点是，系统 中不可避免地会有些内容包含特殊字符，这时候总不能拒绝入库。&lt;/li&gt;&lt;li&gt;&lt;strong&gt;字符串替换&lt;/strong&gt;：把危险字符替换成其他字符，缺点是危险字符可能有很多，一一枚举替换相当麻烦，也可能有漏网之 鱼。&lt;/li&gt;&lt;li&gt;&lt;strong&gt;存储过程&lt;/strong&gt;：把参数传到存储过程进行处理，但并不是所有数据库都支持存储过程。如果存储过程中执行的命令也是通 过拼接字符串出来的，还是会有漏洞。&lt;/li&gt;&lt;/ul&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;&lt;/p&gt;&lt;p&gt;&lt;strong&gt;参数化查询&lt;/strong&gt;&lt;/p&gt;&lt;p&gt;参数化查询（Parameterized Query 或 Parameterized Statement）是访问数据库时，在需要填入数值或数据的地方，使用参数 (Parameter) 来给值。&lt;/p&gt;&lt;p&gt;在使用参数化查询的情况下，数据库&lt;a href="http://www.chinahtml.com/server"&gt;服务器&lt;/a&gt;不会将参数的内容视为SQL指令的一部份来处理，而是在&lt;strong&gt;数据库完成SQL指令的编译后，才 套用参数运行&lt;/strong&gt;，因此就算参数中含有指令，也不会被数据库运行。Access、SQL Server、MySQL、SQLite等常用数据库都支持参数化查询。&lt;/p&gt;&lt;table style="width: 600px;" border="1" cellspacing="0" cellpadding="2"&gt;&lt;tbody&gt;&lt;tr&gt;&lt;td valign="top" width="598"&gt;&lt;p&gt;&lt;strong&gt;在ASP.NET程序中使用参数化查询&lt;/strong&gt;&lt;/p&gt;&lt;p&gt;ASP.NET环境下的查询化查询也是通过Connection对象和Command对象完成。如果数据库是SQL Server，就可以用有名字的参数了，格式是&lt;strong&gt;&amp;ldquo;@&amp;rdquo;字符加上参数名&lt;/strong&gt;。&lt;/p&gt;&lt;p&gt;&lt;code&gt;SqlConnection conn = new SqlConnection("server=(local)\\SQL2005;user id=sa;pwd=12345;initial catalog=TestDb");&lt;br /&gt;conn.Open();&lt;/code&gt;&lt;/p&gt;&lt;p&gt;SqlCommand cmd = new SqlCommand(&amp;ldquo;SELECT TOP 1 * FROM [User] WHERE &lt;strong&gt;UserName = @UserName AND Password = @Password&lt;/strong&gt;&amp;ldquo;);&lt;br /&gt;cmd.Connection = conn;&lt;br /&gt;cmd.Parameters.AddWithValue(&amp;rdquo;UserName&amp;rdquo;, &amp;ldquo;user01&amp;Prime;);&lt;br /&gt;cmd.Parameters.AddWithValue(&amp;rdquo;Password&amp;rdquo;, &amp;ldquo;123456&amp;Prime;);&lt;/p&gt;&lt;p&gt;SqlDataReader reader = cmd.ExecuteReader();&lt;br /&gt;reader.Read();&lt;br /&gt;int userId = reader.GetInt32(0);&lt;/p&gt;&lt;p&gt;reader.Close();&lt;br /&gt;conn.Close();&lt;/p&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/tbody&gt;&lt;/table&gt;&lt;p&gt;&amp;nbsp;&lt;/p&gt;&lt;p&gt;什么是参数化查询? &lt;br /&gt;一个简单理解参数化查询的方式是把它看做只是一个T-SQL查询，它接受控制这个查询返回什么的参数。通过使用不同的参数，一个参数化查询返回不同的结果。要获得一个参数化查询，你需要以一种特定的方式来编写你的代码，或它需要满足一组特定的标准。&lt;/p&gt;&lt;p&gt;有两种不同的方式来创建参数化查询。第一个方式是让查询优化器自动地参数化你的查询。另一个方式是通过以一个特定方式来编写你的T-SQL代码，并将它传递给sp_executesql系统存储过程，从而编程一个参数化查询。&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;参数化查询被喻为最有效防止SQL注入的方法，那么存储过程一定是参数化过后的吗？&lt;/strong&gt;&lt;/p&gt;&lt;p&gt;如果存储过得利用传递进来的参数，再次进行动态SQL拼接，这样还算做是参数化过后的吗？如果存储过程一定是参数化过后的，那么是不是意味着，只要使用存储过程就具有参数化查询的全部优点了？&lt;/p&gt;&lt;p&gt;&amp;nbsp;&lt;/p&gt;&lt;table style="width: 600px;" border="1" cellspacing="0" cellpadding="2"&gt;&lt;tbody&gt;&lt;tr&gt;&lt;td valign="top" width="598"&gt;&lt;p&gt;我有如下存储过程：&lt;/p&gt;create procedure pro_getCustomers&lt;br/&gt;(&lt;br/&gt;@whereSql nvarchar(max)&lt;br/&gt;)&lt;br/&gt;as&lt;br/&gt;declare @sql nvarchar(max)&lt;br/&gt;set @sql=N'select * from dbo.Customer ' + @whereSql&lt;br/&gt;exec(@sql)&lt;br/&gt;Go&lt;br/&gt;&lt;p&gt;--如果我要在ADO.NET中参数化查询这个存储过程，以防止SQL注入，我该怎么办呢？比如：&lt;br /&gt;exec pro_getCustomers 'where &lt;a href="mailto:Name=@name'"&gt;Name=@name'&lt;/a&gt;&lt;/p&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/tbody&gt;&lt;/table&gt;&lt;p&gt;&amp;nbsp;&lt;/p&gt;&lt;p&gt;这种方法没有办法防止注入，你能做的就是对字符串进行过滤.&lt;/p&gt;&lt;p&gt;&amp;nbsp;&lt;/p&gt;&lt;p&gt;&amp;nbsp;&lt;/p&gt;&lt;p&gt;拼接SQL是：&lt;/p&gt;&lt;p&gt;"select * from customer where 1=1"&amp;nbsp;&amp;nbsp; + " and &lt;a href="mailto:name=@name"&gt;name=@name&lt;/a&gt;" + " and sex=@sex"&lt;/p&gt;&lt;p&gt;也就是判断参数化查询。只不过是动态地组装查询限制条件。&amp;nbsp;&lt;/p&gt;&lt;p&gt;动态拼接SQL，而且是参数化查询的SQL语句是没有问题的。&lt;/p&gt;&lt;p&gt;&amp;nbsp;&lt;/p&gt;&lt;p&gt;ADO.NET中被SQL注入的问题，必须过于关键字。我的测试代码如下：&lt;/p&gt;&lt;p&gt;&amp;nbsp;&lt;/p&gt;&lt;p&gt;&amp;nbsp;&lt;/p&gt;&lt;table style="width: 600px;" border="1" cellspacing="0" cellpadding="2"&gt;&lt;tbody&gt;&lt;tr&gt;&lt;td valign="top" width="598"&gt;USE [B2CShop]&lt;br/&gt;GO&lt;br/&gt;SET ANSI_NULLS ON&lt;br/&gt;GO&lt;br/&gt;SET QUOTED_IDENTIFIER ON&lt;br/&gt;GO&lt;br/&gt;ALTER procedure [dbo].[pro_getCustomers]&lt;br/&gt;(&lt;br/&gt;@whereSql nvarchar(max),&lt;br/&gt;@paramNameList nvarchar(max),&lt;br/&gt;@paramValueList nvarchar(max)&lt;br/&gt;)&lt;br/&gt;as&lt;br/&gt;declare @sql nvarchar(max)&lt;br/&gt;set @sql=N'select * from dbo.Customer ' + @whereSql&lt;br/&gt;exec sp_executesql @sql, @paramNameList , @paramValueList&lt;br/&gt;go&lt;br/&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/tbody&gt;&lt;/table&gt;&lt;table style="width: 600px;" border="1" cellspacing="0" cellpadding="2"&gt;&lt;tbody&gt;&lt;tr&gt;&lt;td valign="top" width="598"&gt;  /// &amp;lt;summary&amp;gt;&lt;br/&gt;    /// 动态执行存储过程&lt;br/&gt;    /// &amp;lt;/summary&amp;gt;&lt;br/&gt;    /// &amp;lt;param name="searchedName"&amp;gt;要查询的姓名的关键字&amp;lt;/param&amp;gt;&lt;br/&gt;    /// &amp;lt;returns&amp;gt;实体集合&amp;lt;/returns&amp;gt;&lt;br/&gt;    public static List&amp;lt;Customer&amp;gt; ExecDynamicProc(string searchedName)&lt;br/&gt;    {&lt;br/&gt;      SqlParameter[] values = new SqlParameter[]&lt;br/&gt;      {&lt;br/&gt;        new SqlParameter("@whereSql", "where name like @name"),&lt;br/&gt;        new SqlParameter("@paramNameList","@name nvarchar(50)"),&lt;br/&gt;        new SqlParameter("@paramValueList","@name='%"+ searchedName +"%'")&lt;br/&gt;      };&lt;br/&gt;      return DBHelper.ExecuteProc("proc_GetCustomerPagerBySearch",values);&lt;br/&gt;    }&lt;br/&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;&lt;/p&gt;&lt;table style="width: 611px;" border="1" cellspacing="0" cellpadding="2"&gt;&lt;tbody&gt;&lt;tr&gt;&lt;td valign="top" width="609"&gt;  /// &amp;lt;summary&amp;gt;&lt;br/&gt;    /// 从搜索类里面拼接参数化的SQL字符串&lt;br/&gt;    /// &amp;lt;/summary&amp;gt;&lt;br/&gt;    /// &amp;lt;param name="search"&amp;gt;搜索类&amp;lt;/param&amp;gt;&lt;br/&gt;    /// &amp;lt;param name="sqlParams"&amp;gt;搜索的参数，不能传入Null&amp;lt;/param&amp;gt;&lt;br/&gt;    /// &amp;lt;returns&amp;gt;安全的SQL语句&amp;lt;/returns&amp;gt;&lt;br/&gt;    private static string GetSafeSqlBySearchItem(CustomerSearch search, ref List&amp;lt;SqlParameter&amp;gt; sqlParams)&lt;br/&gt;    {&lt;br/&gt;      StringBuilder safeSqlAppend = new StringBuilder();&lt;br/&gt;      if (search != null)&lt;br/&gt;      {&lt;br/&gt;        if (!string.IsNullOrEmpty(search.NameEquals))&lt;br/&gt;        {&lt;br/&gt;          safeSqlAppend.Append(" and Name=@nameEquals");&lt;br/&gt;          sqlParams.Add(new SqlParameter("@nameEquals", search.NameEquals));&lt;br/&gt;        }&lt;br/&gt;        if (!string.IsNullOrEmpty(search.NameContains))&lt;br/&gt;        {&lt;br/&gt;          safeSqlAppend.Append(" and Name like @nameContains");&lt;br/&gt;          sqlParams.Add(new SqlParameter("@nameContains", "%" + search.NameContains + "%"));&lt;br/&gt;        }&lt;br/&gt;      }&lt;br/&gt;      return safeSqlAppend.ToString();&lt;br/&gt;    }&lt;br/&gt;&lt;hr /&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;&lt;/p&gt;&lt;p&gt;&amp;nbsp;&lt;/p&gt;&lt;p&gt;&amp;nbsp;&lt;/p&gt;&lt;table style="width: 614px;" border="1" cellspacing="0" cellpadding="2"&gt;&lt;tbody&gt;&lt;tr&gt;&lt;td valign="top" width="612"&gt;  /// &amp;lt;summary&amp;gt;&lt;br/&gt;    /// 得到分页用的SQL语句&lt;br/&gt;    /// &amp;lt;/summary&amp;gt;&lt;br/&gt;    /// &amp;lt;param name="columnNameItems"&amp;gt;要查询的列名，多个列名用逗号分隔。传入Empty或Null时，则默认查询出所有的列&amp;lt;/param&amp;gt;&lt;br/&gt;    /// &amp;lt;param name="tableName"&amp;gt;表名，不能为Null和Empty，默认的SQL别名为a&amp;lt;/param&amp;gt;&lt;br/&gt;    /// &amp;lt;param name="joinOtherTable"&amp;gt;连接其他的表，可以传入Null或Empty。调用的时候，可以类似如：inner join departInfo as b on a.departInfoId=b.Id&amp;lt;/param&amp;gt;&lt;br/&gt;    /// &amp;lt;param name="whereSql"&amp;gt;搜索条件，即在&amp;ldquo;where 1=1 &amp;rdquo;后面写条件，可以传入Null或Empty。调用的时候，可以类似如：and b.Price=@beginPrice &amp;lt;/param&amp;gt;&lt;br/&gt;    /// &amp;lt;param name="orderColumnNameAndAscOrDesc"&amp;gt;排序的列名以及Asc或Desc，即在&amp;ldquo;order by&amp;rdquo;后面写排序项，不能为Null和Empty。比如&amp;ldquo;Id asc, name desc&amp;rdquo;&amp;lt;/param&amp;gt;&lt;br/&gt;    /// &amp;lt;param name="pageNumber"&amp;gt;当前页的页码，最小值应该为1&amp;lt;/param&amp;gt;&lt;br/&gt;    /// &amp;lt;param name="pageSize"&amp;gt;每页显示的记录数，最小值应该为1&amp;lt;/param&amp;gt;&lt;br/&gt;    /// &amp;lt;returns&amp;gt;SQL语句&amp;lt;/returns&amp;gt;&lt;br/&gt;    internal static string GetPagerTSql(string columnNameItems, string tableName, string joinOtherTable, string whereSql, string orderColumnNameAndAscOrDesc, int pageNumber, int pageSize)&lt;br/&gt;    {&lt;br/&gt;      if (string.IsNullOrEmpty(tableName))&lt;br/&gt;      {&lt;br/&gt;        throw new ArgumentNullException("tableName", String.Format(CultureInfo.CurrentCulture, DALResource.Common_NullOrEmpty));&lt;br/&gt;      }&lt;br/&gt;      if (string.IsNullOrEmpty(orderColumnNameAndAscOrDesc))&lt;br/&gt;      {&lt;br/&gt;        throw new ArgumentNullException("orderColumnNameAndAscOrDesc", String.Format(CultureInfo.CurrentCulture, DALResource.Common_NullOrEmpty));&lt;br/&gt;      }&lt;br/&gt;      if (string.IsNullOrEmpty(columnNameItems))&lt;br/&gt;      {&lt;br/&gt;        columnNameItems = "a.*";&lt;br/&gt;      }&lt;br/&gt;      if (pageNumber &amp;lt; 1)&lt;br/&gt;      {&lt;br/&gt;        pageNumber = 1;&lt;br/&gt;      }&lt;br/&gt;      if (pageSize &amp;lt; 1)&lt;br/&gt;      {&lt;br/&gt;        pageSize = 1;&lt;br/&gt;      }&lt;br/&gt;      int beginNumber = (pageNumber - 1) * pageSize + 1;&lt;br/&gt;      int endNumber = pageNumber * pageSize;&lt;br/&gt;      string sqlPager = string.Format("select * from (select row_number() over(order by {1}) as __MyNewId, {0} from {2} as a {3} where 1=1 {4}) as __MyTempTable where __MyNewId between {5} and {6} order by __MyNewId asc;", columnNameItems, orderColumnNameAndAscOrDesc, tableName, joinOtherTable, whereSql, beginNumber, endNumber);&lt;br/&gt;      string sqlPagerCount = string.Format("select @__returnCount=COUNT(*) from {0} as a {1} where 1=1 {2};",tableName, joinOtherTable, whereSql);&lt;br/&gt;      return sqlPager + sqlPagerCount;&lt;br/&gt;    }&lt;br/&gt;&lt;hr /&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/tbody&gt;&lt;/table&gt;&lt;img src="http://www.cnblogs.com/mahaisong/aggbug/2426432.html?type=1" width="1" height="1" alt=""/&gt;&lt;p&gt;&lt;a href="http://www.cnblogs.com/mahaisong/archive/2012/03/31/2426432.html" target="_blank"&gt;本文链接&lt;/a&gt;&lt;/p&gt;</content></entry><entry><id>http://www.cnblogs.com/mahaisong/archive/2012/03/19/2406246.html</id><title type="text">（井底之蛙）惭愧丢人的两段代码---希望以后多多长进，警醒自己</title><summary type="text">井底之蛙2012-04-10 20:50 今天又来看看这个代码。错误地方有很几处。这个代码主要是因为不熟悉.NET中数组和LIST之间的转换。目的:想排除所有不等项。然后再赋值给原对象。先说说第二个。第二个就是一个错啊。特别是第二个FOR循环。简直把自己的脸丢完了。第一个也是个错。啥都不说了。丢死人了。最后写法。参考以上留言的各位。var list=new List&lt;Common.Other.Cookies&gt;();foreach (Common.Other.Cookies cookiesTemp in cartJson.Cookies){ if(cookiesTemp.GoodsN</summary><published>2012-03-19T08:19:00Z</published><updated>2012-03-19T08:19:00Z</updated><author><name>沐海</name><uri>http://www.cnblogs.com/mahaisong/</uri></author><link rel="alternate" href="http://www.cnblogs.com/mahaisong/archive/2012/03/19/2406246.html"/><link rel="alternate" type="text/html" href="http://www.cnblogs.com/mahaisong/archive/2012/03/19/2406246.html"/><content type="html">&lt;p&gt;井底之蛙&lt;/p&gt;&lt;p&gt;&amp;nbsp;&lt;/p&gt;&lt;p&gt;&lt;small&gt;&lt;span class="comment_date"&gt;2012-04-10 20:50&lt;/span&gt;&lt;/small&gt; &lt;span id="comment_body_2351957" class="blog_comment_body"&gt;今天又来看看这个代码。错误地方有很几处。这个代码主要是因为不熟悉.NET中数组和LIST之间的转换。&lt;br /&gt;目的:想排除所有不等项。然后再赋值给原对象。&lt;br /&gt;先说说第二个。第二个就是一个错啊。特别是第二个FOR循环。简直把自己的脸丢完了。&lt;br /&gt;&lt;br /&gt;第一个也是个错。啥都不说了。丢死人了。&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;最后写法。参考以上留言的各位。&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;var list=new List&amp;lt;Common.Other.Cookies&amp;gt;();&lt;br /&gt;foreach (Common.Other.Cookies cookiesTemp in cartJson.Cookies)&lt;br /&gt;{ &lt;br /&gt;if(cookiesTemp.GoodsNo!=GoodsNo)//删除相等的。&lt;br /&gt;{&lt;br /&gt;list.Add(cookiesTemp);&lt;br /&gt;}&lt;br /&gt;}&lt;br /&gt;cartJson.Cookies=list.ToArray();&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;//各位各位。实在是一点点泡沫把我吹的不知道自己是谁了。惭愧啊惭愧啊。&lt;br /&gt;&lt;br /&gt;最惭愧的。虽然立即就把代码改成上面那样，但是直到今天，我才从心里真正明白自己那一点点经验就自大的心态。&lt;br /&gt;&lt;br /&gt;感谢各位的点醒。这篇错误代码要永远留着。&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&amp;nbsp;&lt;/p&gt;&lt;p&gt;&amp;nbsp;&lt;/p&gt;&lt;div style="background-color: #F5F5F5;border: 1px solid #CCCCCC;padding:10px;"&gt;         int i = 0; bool isDel = false;&lt;br/&gt;                foreach (Common.Other.Cookies cookies1 in cartJson.Cookies)&lt;br/&gt;                {&lt;br/&gt;                    if (isDel)&lt;br/&gt;                    {&lt;br/&gt;                        cookiesArray[i - 1] = cookies1;&lt;br/&gt;                    }&lt;br/&gt;                    else&lt;br/&gt;                    {&lt;br/&gt;&lt;br/&gt;                        if (cookies1.GoodsNo == GoodsNo)&lt;br/&gt;                        {&lt;br/&gt;                            isDel = true;&lt;br/&gt;                            continue;&lt;br/&gt;                        }&lt;br/&gt;                        cookiesArray[i] = cookies1;&lt;br/&gt;&lt;br/&gt;                    }&lt;br/&gt;                    i++;&lt;br/&gt;                }&lt;br/&gt;                //int i = 0;&lt;br/&gt;                //foreach (Common.Other.Cookies cookies1 in cartJson.Cookies)&lt;br/&gt;                //{&lt;br/&gt;                    &lt;br/&gt;                //        if (cookies1.GoodsNo == GoodsNo)// 这种写法如果排在前面别上面优化，排在后面比上面劣势，况且(2N+1)和(N+1)之间还是N+1比较省。&lt;br/&gt;                //        {&lt;br/&gt;                //            break;&lt;br/&gt;                //        }&lt;br/&gt;                //        cookiesArray[i] = cookies1;&lt;br/&gt;                //        i++;&lt;br/&gt;                //}&lt;br/&gt;&lt;br/&gt;                //for (int j = i; j &amp;lt;cartJson.Cookies.Length;j++ ) &lt;br/&gt;                //{&lt;br/&gt;                //    cookiesArray[j] = cartJson.Cookies[j+1];&lt;br/&gt;                //}&lt;br/&gt;&lt;br/&gt;&lt;/div&gt;&lt;p&gt;&amp;nbsp;&lt;/p&gt;&lt;p&gt;&lt;strong&gt;&lt;a href="http://www.cnblogs.com/mahaisong/archive/2012/03/19/2406246.html#2334666"&gt;#2楼&lt;/a&gt;&lt;a id="comment_anchor_2334666" name="2334666"&gt;&lt;/a&gt; &lt;span&gt;&lt;span class="comment_date"&gt;2012-03-19 22:20&lt;/span&gt; &lt;/span&gt;&lt;a id="Comments1_CommentList_NameLink_1" href="http://home.cnblogs.com/u/97757/" rel="nofllow" target="_blank"&gt;vons&lt;/a&gt;&amp;nbsp;&lt;a class="sendMsg2This" title="给此人发送站内短消息" href="http://space.cnblogs.com/msg/send/vons"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/a&gt;&lt;/strong&gt;&lt;/p&gt;&lt;p&gt;&lt;span id="comment_body_2334666" class="blog_comment_body"&gt;代码的变量和结构太乱了，是不是想在cookiesArray中保存所有不等于GoodsNo的项？&lt;br /&gt;&lt;br /&gt;var list = new List&amp;lt;Common.Other.Cookies&amp;gt;();&lt;br /&gt;for (int i=0; i &amp;lt;cartJson.Cookies.Length;i++ ) &lt;br /&gt;{&lt;br /&gt;if (cartJson.Cookies[i].GoodsNo != GoodsNo)&lt;br /&gt;list.Add(cartJson.Cookies[i]); &lt;br /&gt;}&lt;br /&gt;return list.ToArray();&lt;/span&gt; 　&lt;a onclick="ReplyComment(&amp;quot;vons&amp;quot;,2334666,&amp;quot;N3ctElQuTXU0c+nO0nGaFdBmxuA69c/GnpYb9Dy+w/0JpMA8h4Tffg==&amp;quot;)" href="http://www.cnblogs.com/mahaisong/archive/2012/03/19/2406246.html#commentform"&gt;回复&lt;/a&gt;　&lt;a onclick="QuoteComment(2334666,&amp;quot;N3ctElQuTXU0c+nO0nGaFdBmxuA69c/GnpYb9Dy+w/0JpMA8h4Tffg==&amp;quot;)" href="http://www.cnblogs.com/mahaisong/archive/2012/03/19/2406246.html#commentform"&gt;引用&lt;/a&gt;　&lt;a title="查看该作者发表过的评论" href="http://www.cnblogs.com/CommentsByAuthor.aspx?author=vons" target="_blank"&gt;查看&lt;/a&gt;　&lt;a id="Comments1_CommentList_DeleteLink_1" onclick="return DelComment(2334666,this);" href="javascript:__doPostBack('Comments1$CommentList$ctl01$DeleteLink','')"&gt;删除&lt;/a&gt;&amp;nbsp;&amp;nbsp;&lt;/p&gt;&lt;p&gt;&lt;strong&gt;&lt;a href="http://www.cnblogs.com/mahaisong/archive/2012/03/19/2406246.html#2334772"&gt;#3楼&lt;/a&gt;&lt;a id="comment_anchor_2334772" name="2334772"&gt;&lt;/a&gt; &lt;span&gt;&lt;span class="comment_date"&gt;2012-03-20 02:43&lt;/span&gt; &lt;/span&gt;&lt;a id="Comments1_CommentList_NameLink_2" href="http://home.cnblogs.com/u/177979/" rel="nofllow" target="_blank"&gt;青砖绿树&lt;/a&gt;&amp;nbsp;&lt;a class="sendMsg2This" title="给此人发送站内短消息" href="http://space.cnblogs.com/msg/send/%e9%9d%92%e7%a0%96%e7%bb%bf%e6%a0%91"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/a&gt;&lt;/strong&gt;&lt;/p&gt;&lt;p&gt;&lt;span id="comment_body_2334772" class="blog_comment_body"&gt;你这代码写得够绕的。。。&lt;br /&gt;要是在我的团队，这样的情况出现3次，打包回家找妈&lt;br /&gt;取出不等于GoodsNo的项&lt;br /&gt;var list = cartJson.Cookies.ToList()&lt;br /&gt;.Select(c=&amp;gt;c.GoodsNo != GoodsNo)&lt;br /&gt;.ToList();&lt;/span&gt; 　&lt;a onclick="ReplyComment(&amp;quot;青砖绿树&amp;quot;,2334772,&amp;quot;B4YFwmA12BJQjdKU4hmvmRfYOJXBeUQFKo8F1/I/fSIIr+nmvAo+Yw==&amp;quot;)" href="http://www.cnblogs.com/mahaisong/archive/2012/03/19/2406246.html#commentform"&gt;回复&lt;/a&gt;　&lt;a onclick="QuoteComment(2334772,&amp;quot;B4YFwmA12BJQjdKU4hmvmRfYOJXBeUQFKo8F1/I/fSIIr+nmvAo+Yw==&amp;quot;)" href="http://www.cnblogs.com/mahaisong/archive/2012/03/19/2406246.html#commentform"&gt;引用&lt;/a&gt;　&lt;a title="查看该作者发表过的评论" href="http://www.cnblogs.com/CommentsByAuthor.aspx?author=%e9%9d%92%e7%a0%96%e7%bb%bf%e6%a0%91" target="_blank"&gt;查看&lt;/a&gt;　&lt;a id="Comments1_CommentList_DeleteLink_2" onclick="return DelComment(2334772,this);" href="javascript:__doPostBack('Comments1$CommentList$ctl02$DeleteLink','')"&gt;删除&lt;/a&gt;&amp;nbsp;&amp;nbsp;&lt;/p&gt;&lt;p&gt;&lt;strong&gt;&lt;a href="http://www.cnblogs.com/mahaisong/archive/2012/03/19/2406246.html#2334773"&gt;#4楼&lt;/a&gt;&lt;a id="comment_anchor_2334773" name="2334773"&gt;&lt;/a&gt; &lt;span&gt;&lt;span class="comment_date"&gt;2012-03-20 02:44&lt;/span&gt; &lt;/span&gt;&lt;a id="Comments1_CommentList_NameLink_3" href="http://home.cnblogs.com/u/177979/" rel="nofllow" target="_blank"&gt;青砖绿树&lt;/a&gt;&amp;nbsp;&lt;a class="sendMsg2This" title="给此人发送站内短消息" href="http://space.cnblogs.com/msg/send/%e9%9d%92%e7%a0%96%e7%bb%bf%e6%a0%91"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/a&gt;&lt;/strong&gt;&lt;/p&gt;&lt;p&gt;&lt;span id="comment_body_2334773" class="blog_comment_body"&gt;var list = cartJson.Cookies.ToList()&lt;br /&gt;.Where(c=&amp;gt;c.GoodsNo != GoodsNo);&lt;/span&gt; 　&lt;a onclick="ReplyComment(&amp;quot;青砖绿树&amp;quot;,2334773,&amp;quot;B4YFwmA12BJQjdKU4hmvmRfYOJXBeUQFKo8F1/I/fSIIr+nmvAo+Yw==&amp;quot;)" href="http://www.cnblogs.com/mahaisong/archive/2012/03/19/2406246.html#commentform"&gt;回复&lt;/a&gt;　&lt;a onclick="QuoteComment(2334773,&amp;quot;B4YFwmA12BJQjdKU4hmvmRfYOJXBeUQFKo8F1/I/fSIIr+nmvAo+Yw==&amp;quot;)" href="http://www.cnblogs.com/mahaisong/archive/2012/03/19/2406246.html#commentform"&gt;引用&lt;/a&gt;　&lt;a title="查看该作者发表过的评论" href="http://www.cnblogs.com/CommentsByAuthor.aspx?author=%e9%9d%92%e7%a0%96%e7%bb%bf%e6%a0%91" target="_blank"&gt;查看&lt;/a&gt;　&lt;a id="Comments1_CommentList_DeleteLink_3" onclick="return DelComment(2334773,this);" href="javascript:__doPostBack('Comments1$CommentList$ctl03$DeleteLink','')"&gt;删除&lt;/a&gt;&amp;nbsp;&amp;nbsp;&lt;/p&gt;&lt;p&gt;&lt;strong&gt;&lt;a href="http://www.cnblogs.com/mahaisong/archive/2012/03/19/2406246.html#2334782"&gt;#5楼&lt;/a&gt;&lt;a id="comment_anchor_2334782" name="2334782"&gt;&lt;/a&gt; &lt;span&gt;&lt;span class="comment_date"&gt;2012-03-20 04:48&lt;/span&gt; &lt;/span&gt;&lt;a id="Comments1_CommentList_NameLink_4" href="http://home.cnblogs.com/u/30672/" rel="nofllow" target="_blank"&gt;B.Zhou&lt;/a&gt;&amp;nbsp;&lt;a class="sendMsg2This" title="给此人发送站内短消息" href="http://space.cnblogs.com/msg/send/B.Zhou"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/a&gt;&lt;/strong&gt;&lt;/p&gt;&lt;p&gt;&lt;span id="comment_body_2334782" class="blog_comment_body"&gt;LZ代码的意思是，排除不等于GoodsNo的第一项&lt;br /&gt;楼上几位看的太不仔细了！&lt;br /&gt;&lt;br /&gt;不过LZ的代码写的太不专业了，有逻辑错误，有发生异常的可能性&lt;br /&gt;1.cookiesArray[i - 1] = cookies1;&lt;br /&gt;应该改成：cookiesArray[i] = cookies1;这是逻辑错误&lt;br /&gt;i-1:如果当i为0时就匹配成功isDel=true，index启不是-1？有异常可能性&lt;br /&gt;&lt;br /&gt;2.楼主以后不要把这样的文章放首页。&lt;/span&gt; 　&lt;a onclick="ReplyComment(&amp;quot;B.Zhou&amp;quot;,2334782,&amp;quot;BBJxiLLKs+4lpmhcDx1VdkGzfRNgvbwajgLCYbVTClGTCnAlaXvBSg==&amp;quot;)" href="http://www.cnblogs.com/mahaisong/archive/2012/03/19/2406246.html#commentform"&gt;回复&lt;/a&gt;　&lt;a onclick="QuoteComment(2334782,&amp;quot;BBJxiLLKs+4lpmhcDx1VdkGzfRNgvbwajgLCYbVTClGTCnAlaXvBSg==&amp;quot;)" href="http://www.cnblogs.com/mahaisong/archive/2012/03/19/2406246.html#commentform"&gt;引用&lt;/a&gt;　&lt;a title="查看该作者发表过的评论" href="http://www.cnblogs.com/CommentsByAuthor.aspx?author=B.Zhou" target="_blank"&gt;查看&lt;/a&gt;　&lt;a id="Comments1_CommentList_DeleteLink_4" onclick="return DelComment(2334782,this);" href="javascript:__doPostBack('Comments1$CommentList$ctl04$DeleteLink','')"&gt;删除&lt;/a&gt;&amp;nbsp;&amp;nbsp;&lt;/p&gt;&lt;p&gt;&lt;strong&gt;&lt;a href="http://www.cnblogs.com/mahaisong/archive/2012/03/19/2406246.html#2334864"&gt;#6楼&lt;/a&gt;&lt;a id="comment_anchor_2334864" name="2334864"&gt;&lt;/a&gt;[&lt;span class="louzhu"&gt;楼主&lt;/span&gt;] &lt;span&gt;&lt;span class="comment_date"&gt;2012-03-20 09:13&lt;/span&gt; &lt;/span&gt;&lt;a id="Comments1_CommentList_NameLink_5" href="http://home.cnblogs.com/u/146292/" rel="nofllow" target="_blank"&gt;沐海&lt;/a&gt;&amp;nbsp;&lt;a class="sendMsg2This" title="给此人发送站内短消息" href="http://space.cnblogs.com/msg/send/%e6%b2%90%e6%b5%b7"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/a&gt;&lt;/strong&gt;&lt;/p&gt;&lt;p&gt;&lt;span id="comment_body_2334864" class="blog_comment_body"&gt;&lt;a title="查看所回复的评论" href="http://www.cnblogs.com/mahaisong/archive/2012/03/19/2406246.html#2334666"&gt;@&lt;/a&gt;vons&lt;br /&gt;谢啦。小弟实在太惭愧了。这段代码留着给我这个井底之蛙。&lt;/span&gt; &lt;a title="查看该作者发表过的评论" href="http://www.cnblogs.com/CommentsByAuthor.aspx?author=%e6%b2%90%e6%b5%b7" target="_blank"&gt;查看&lt;/a&gt;　&lt;a id="Comments1_CommentList_DeleteLink_5" onclick="return DelComment(2334864,this);" href="javascript:__doPostBack('Comments1$CommentList$ctl05$DeleteLink','')"&gt;删除&lt;/a&gt;&amp;nbsp;&amp;nbsp;&lt;a id="Comments1_CommentList_EditLink_5" onclick="BindComment(2334864);" href="http://www.cnblogs.com/mahaisong/archive/2012/03/19/2406246.html#commentform"&gt;修改&lt;/a&gt;&lt;/p&gt;&lt;p&gt;&lt;strong&gt;&lt;a href="http://www.cnblogs.com/mahaisong/archive/2012/03/19/2406246.html#2334865"&gt;#7楼&lt;/a&gt;&lt;a id="comment_anchor_2334865" name="2334865"&gt;&lt;/a&gt;[&lt;span class="louzhu"&gt;楼主&lt;/span&gt;] &lt;span&gt;&lt;span class="comment_date"&gt;2012-03-20 09:13&lt;/span&gt; &lt;/span&gt;&lt;a id="Comments1_CommentList_NameLink_6" href="http://home.cnblogs.com/u/146292/" rel="nofllow" target="_blank"&gt;沐海&lt;/a&gt;&amp;nbsp;&lt;a class="sendMsg2This" title="给此人发送站内短消息" href="http://space.cnblogs.com/msg/send/%e6%b2%90%e6%b5%b7"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/a&gt;&lt;/strong&gt;&lt;/p&gt;&lt;p&gt;&lt;span id="comment_body_2334865" class="blog_comment_body"&gt;&lt;a title="查看所回复的评论" href="http://www.cnblogs.com/mahaisong/archive/2012/03/19/2406246.html#2334772"&gt;@&lt;/a&gt;青砖绿树&lt;br /&gt;谢啦。小弟实在太惭愧了。这段代码留着给我这个井底之蛙。&lt;/span&gt; &lt;a title="查看该作者发表过的评论" href="http://www.cnblogs.com/CommentsByAuthor.aspx?author=%e6%b2%90%e6%b5%b7" target="_blank"&gt;查看&lt;/a&gt;　&lt;a id="Comments1_CommentList_DeleteLink_6" onclick="return DelComment(2334865,this);" href="javascript:__doPostBack('Comments1$CommentList$ctl06$DeleteLink','')"&gt;删除&lt;/a&gt;&amp;nbsp;&amp;nbsp;&lt;a id="Comments1_CommentList_EditLink_6" onclick="BindComment(2334865);" href="http://www.cnblogs.com/mahaisong/archive/2012/03/19/2406246.html#commentform"&gt;修改&lt;/a&gt;&lt;/p&gt;&lt;p&gt;&lt;strong&gt;&lt;a href="http://www.cnblogs.com/mahaisong/archive/2012/03/19/2406246.html#2334868"&gt;#8楼&lt;/a&gt;&lt;a id="comment_anchor_2334868" name="2334868"&gt;&lt;/a&gt;[&lt;span class="louzhu"&gt;楼主&lt;/span&gt;]&lt;a name="Post"&gt;&lt;/a&gt; &lt;span&gt;&lt;span class="comment_date"&gt;2012-03-20 09:15&lt;/span&gt; &lt;/span&gt;&lt;a id="Comments1_CommentList_NameLink_7" href="http://home.cnblogs.com/u/146292/" rel="nofllow" target="_blank"&gt;沐海&lt;/a&gt;&amp;nbsp;&lt;a class="sendMsg2This" title="给此人发送站内短消息" href="http://space.cnblogs.com/msg/send/%e6%b2%90%e6%b5%b7"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/a&gt;&lt;/strong&gt;&lt;/p&gt;&lt;p&gt;&lt;span id="comment_body_2334868" class="blog_comment_body"&gt;&lt;a title="查看所回复的评论" href="http://www.cnblogs.com/mahaisong/archive/2012/03/19/2406246.html#2334782"&gt;@&lt;/a&gt;B.Zhou&lt;br /&gt;楼上几位老大的意思是对的。是我的代码写的不好，让你误会了。&lt;br /&gt;&lt;br /&gt;但是您指出的&amp;ldquo;index启不是-1？有异常可能性&amp;rdquo;也是我的错误。&lt;/span&gt; &lt;a title="查看该作者发表过的评论" href="http://www.cnblogs.com/CommentsByAuthor.aspx?author=%e6%b2%90%e6%b5%b7" target="_blank"&gt;查看&lt;/a&gt;　&lt;a id="Comments1_CommentList_DeleteLink_7" onclick="return DelComment(2334868,this);" href="javascript:__doPostBack('Comments1$CommentList$ctl07$DeleteLink','')"&gt;删除&lt;/a&gt;&amp;nbsp;&amp;nbsp;&lt;a id="Comments1_CommentList_EditLink_7" onclick="BindComment(2334868);" href="http://www.cnblogs.com/mahaisong/archive/2012/03/19/2406246.html#commentform"&gt;修改&lt;/a&gt;&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;img src="http://www.cnblogs.com/mahaisong/aggbug/2406246.html?type=1" width="1" height="1" alt=""/&gt;&lt;p&gt;&lt;a href="http://www.cnblogs.com/mahaisong/archive/2012/03/19/2406246.html" target="_blank"&gt;本文链接&lt;/a&gt;&lt;/p&gt;</content></entry><entry><id>http://www.cnblogs.com/mahaisong/archive/2012/03/06/2382361.html</id><title type="text">项目讨论记</title><summary type="text">项目讨论问题：1.为什么不能用买卖家。目前做的不好是因为做的不好。不是因为现在的设计错误。2.淘宝的模式和当前我们的模式是一样的。相同的经营模式，淘宝的经验不值得我们学习？3.淘宝从定制服务，业务流程等等各个方面，完全应该以买卖家为不同的定制对象来不同考虑。4.买卖家分开虽然使切换带来问题。可是同样可以把对应的功能分的更细化。比如我进入卖家就是来管理我卖的东西的。我进入买家就是来管理我买的东西的。为什么要和在一起？以订单为例：我进入我的买家就是想看我买的订单怎么样了。我进入卖家就是想看我的卖家怎么样了。如果放在一起。我需要在中心页不能直接的显示相关信息，只能加个不同状态的小提示。5.如果按照这</summary><published>2012-03-06T09:40:00Z</published><updated>2012-03-06T09:40:00Z</updated><author><name>沐海</name><uri>http://www.cnblogs.com/mahaisong/</uri></author><link rel="alternate" href="http://www.cnblogs.com/mahaisong/archive/2012/03/06/2382361.html"/><link rel="alternate" type="text/html" href="http://www.cnblogs.com/mahaisong/archive/2012/03/06/2382361.html"/><content type="html">&lt;p&gt;项目讨论问题：&lt;br /&gt;1.&amp;nbsp;为什么不能用买卖家。目前做的不好是因为做的不好。不是因为现在的设计错误。&lt;br /&gt;2.&amp;nbsp;淘宝的模式和当前我们的模式是一样的。相同的经营模式，淘宝的经验不值得我们学习？&lt;br /&gt;3.&amp;nbsp;淘宝从定制服务，业务流程等等各个方面，完全应该以买卖家为不同的定制对象来不同考虑。&lt;br /&gt;4.&amp;nbsp;买卖家分开虽然使切换带来问题。可是同样可以把对应的功能分的更细化。比如我进入卖家就是来管理我卖的东西的。我进入买家就是来管理我买的东西的。为什么要和在一起？以订单为例：我进入我的买家就是想看我买的订单怎么样了。我进入卖家就是想看我的卖家怎么样了。如果放在一起。我需要在中心页不能直接的显示相关信息，只能加个不同状态的小提示。&lt;br /&gt;5.&amp;nbsp;如果按照这种设计。最好的方式是左侧的菜单是根据卖家和买家中心进行折叠。这样是最节省空间的。但是光是展示也是很考研耐性的。有可能做成3级目录。在我的认识中。人们对折叠菜单的忍耐是2层。&lt;br /&gt;6.&amp;nbsp;那如果在整合到一起。你在Open用户中心内页上推荐的服务比如五花八门。上一个有可能是哪家的商品便宜。下一个就有可能是怎么管理店铺模板。&lt;/p&gt;&lt;p&gt;7.还有个问题：你看看现在你的设计。卖家买家的中心页面都是不同的。你怎么整合能达到你的要求？&lt;/p&gt;&lt;p&gt;对应的卖家的中心是订单。买家中心是商品推荐。你怎么整合合适？&lt;/p&gt;&lt;p&gt;&amp;nbsp;&lt;/p&gt;&lt;p&gt;是得，时间就像海绵里的水挤挤总会有的。可是你这样去设计，抛却优势，只为某人的话？心态就不对 。怎么能把项目做好才是根本。&lt;/p&gt;&lt;p&gt;要是我能做主，我肯定坚持比较好的设计做。&lt;/p&gt;&lt;p&gt;我承认他有时候对。但不是都对，更不是绝对对。&lt;/p&gt;&lt;p&gt;&amp;nbsp;&lt;/p&gt;&lt;p&gt;这样的整合和布局必然会导致**合作方和管理人，在中后期这些问题逐渐凸显的时候，要求修改项目。呜呼&lt;/p&gt;&lt;p&gt;&lt;br /&gt;但是我没办法。对于自己的设计不能实现，无可奈何。整合到一起绝对能做。但是其优点和其缺点在我的认知中没办法说服我。&lt;/p&gt;&lt;p&gt;&lt;br /&gt;还是那句话：我可以去做。但是这不是我想做的。&lt;/p&gt;&lt;p&gt;&amp;nbsp;&lt;/p&gt;&lt;p&gt;OK。记住我的设计。接着做的工作。看看项目到最后是谁的设计赢。&lt;/p&gt;&lt;img src="http://www.cnblogs.com/mahaisong/aggbug/2382361.html?type=1" width="1" height="1" alt=""/&gt;&lt;p&gt;&lt;a href="http://www.cnblogs.com/mahaisong/archive/2012/03/06/2382361.html" target="_blank"&gt;本文链接&lt;/a&gt;&lt;/p&gt;</content></entry><entry><id>http://www.cnblogs.com/mahaisong/archive/2012/02/20/2358950.html</id><title type="text">JS插入排序算法</title><summary type="text">function insertSortArray(sort_Array,x){ //一趟排序的算法for(var i=0;i&lt;sort_Array.length;i++){ if(sort_array[i]&gt;=x){ //找到插入点 for (var j=sort_array.length; j&gt;i; j--){ //后挪空出位置 sort_array[j]=sort_array[j-1] } sort_array[i]=x; //...</summary><published>2012-02-20T02:09:00Z</published><updated>2012-02-20T02:09:00Z</updated><author><name>沐海</name><uri>http://www.cnblogs.com/mahaisong/</uri></author><link rel="alternate" href="http://www.cnblogs.com/mahaisong/archive/2012/02/20/2358950.html"/><link rel="alternate" type="text/html" href="http://www.cnblogs.com/mahaisong/archive/2012/02/20/2358950.html"/><content type="html">&lt;div style="background-color: #F5F5F5;border: 1px solid #CCCCCC;padding:10px;"&gt;function insertSortArray(sort_Array,x){         //一趟排序的算法&lt;br/&gt;for(var i=0;i&amp;lt;sort_Array.length;i++){&lt;br/&gt;   if(sort_array[i]&amp;gt;=x){                    //找到插入点&lt;br/&gt;    for (var j=sort_array.length; j&amp;gt;i; j--){   //后挪空出位置 &lt;br/&gt;     sort_array[j]=sort_array[j-1]         &lt;br/&gt;    }&lt;br/&gt;    sort_array[i]=x;                             //插入&lt;br/&gt;    break;                                      //任务结束，退出循环&lt;br/&gt;   }&lt;br/&gt;}&lt;br/&gt;return sort_array;                                      //返回处理后的数组&lt;br/&gt;}&lt;br/&gt;&lt;br/&gt;function SortArrayByInsert(array){                      //主排序算法&lt;br/&gt;var returnValue=new Array(1);                        //定义成功排序后的返回值，初始大小为一位&lt;br/&gt;returnValue[0]=array[0];                               //在结果后置入排序前的第一位&lt;br/&gt;for (i=1; i&amp;lt;array.length; i++){&lt;br/&gt;   returnValue=insertSortArray(returnValue,array[i]);     //调用一趟排序函数，从第二个元素开始，依次使用&lt;br/&gt;}&lt;br/&gt;return returnValue;&lt;br/&gt;}&lt;br/&gt; &lt;br/&gt;&lt;br/&gt;&lt;/div&gt;&lt;p&gt;&lt;br /&gt;&amp;nbsp;&lt;/p&gt;&lt;p&gt;C版：&lt;/p&gt;&lt;p&gt;&amp;nbsp;&lt;/p&gt;&lt;div style="background-color: #F5F5F5;border: 1px solid #CCCCCC;padding:10px;"&gt;void &lt;br/&gt;&lt;br/&gt;  InsertionSort(ElementType A[],int N)&lt;br/&gt;&lt;br/&gt;{&lt;br/&gt;&lt;br/&gt;int j,p;&lt;br/&gt;&lt;br/&gt;Element Type tmp;&lt;br/&gt;&lt;br/&gt;for(p=1;p&amp;lt;N;P++)&lt;br/&gt;&lt;br/&gt;{&lt;br/&gt;&lt;br/&gt;Tmp=A[p];&lt;br/&gt;&lt;br/&gt;for(j=P;j&amp;gt;0&amp;amp;&amp;amp;A[j-1]&amp;gt;Tmp;j--)&lt;br/&gt;&lt;br/&gt;A[j]=A[j-1];&lt;br/&gt;&lt;br/&gt;A[j]=Tmp;&lt;br/&gt;&lt;br/&gt;}&lt;br/&gt;&lt;br/&gt;}&lt;br/&gt;&lt;br/&gt;&lt;br/&gt;&lt;/div&gt;&lt;p&gt;&amp;nbsp;&lt;/p&gt;&lt;p&gt;&amp;nbsp;&lt;/p&gt;&lt;p&gt;两版比较，JS的方法不够简洁。利用C的算法写JS的程序先。&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;&amp;nbsp;&lt;/p&gt;&lt;img src="http://www.cnblogs.com/mahaisong/aggbug/2358950.html?type=1" width="1" height="1" alt=""/&gt;&lt;p&gt;&lt;a href="http://www.cnblogs.com/mahaisong/archive/2012/02/20/2358950.html" target="_blank"&gt;本文链接&lt;/a&gt;&lt;/p&gt;</content></entry><entry><id>http://www.cnblogs.com/mahaisong/archive/2012/01/08/2316434.html</id><title type="text">一切磨难，从今天，从现在，才刚刚开始。过去都是开胃小菜。家伙，你自己珍重。</title><summary type="text">一切磨难，从今天，从现在，才刚刚开始。</summary><published>2012-01-08T07:14:00Z</published><updated>2012-01-08T07:14:00Z</updated><author><name>沐海</name><uri>http://www.cnblogs.com/mahaisong/</uri></author><link rel="alternate" href="http://www.cnblogs.com/mahaisong/archive/2012/01/08/2316434.html"/><link rel="alternate" type="text/html" href="http://www.cnblogs.com/mahaisong/archive/2012/01/08/2316434.html"/><content type="html">&lt;p&gt;一切磨难，从今天，从现在，才刚刚开始。&lt;/p&gt;&lt;img src="http://www.cnblogs.com/mahaisong/aggbug/2316434.html?type=1" width="1" height="1" alt=""/&gt;&lt;p&gt;&lt;a href="http://www.cnblogs.com/mahaisong/archive/2012/01/08/2316434.html" target="_blank"&gt;本文链接&lt;/a&gt;&lt;/p&gt;</content></entry><entry><id>http://www.cnblogs.com/mahaisong/archive/2011/12/15/2288527.html</id><title type="text">自己的理想，成长过程逐渐明确</title><summary type="text">第一步，精通数据库原理，ASP.NET技术，设计模式。第二步，掌握多种高级编程技术。WCF.WPF.第三部，掌握分布式WEB开发架构设计。第三部，学习领域驱动和企业级开发。——————————————目前我第一步还没有走好。欠缺很多。最近浮躁的心态要调整下。更重要是要认识到。这又可能是你下面5年，10年要走的路。不是一年内就可以去奢望的。去想这么远。不如脚踏实地的学习好ASP.NET技术。ASP.NET技术有其优点。有其缺点。 封装的太好。开源的不多。 真正底层的操作介绍也只能在各个牛人博客上才能找到。对应java或者PHP。需要什么组件和功能，都可以自己根据原理订制。这样个人技术发展起来比较</summary><published>2011-12-15T02:57:00Z</published><updated>2011-12-15T02:57:00Z</updated><author><name>沐海</name><uri>http://www.cnblogs.com/mahaisong/</uri></author><link rel="alternate" href="http://www.cnblogs.com/mahaisong/archive/2011/12/15/2288527.html"/><link rel="alternate" type="text/html" href="http://www.cnblogs.com/mahaisong/archive/2011/12/15/2288527.html"/><content type="html">&lt;p&gt;第一步，精通数据库原理，ASP.NET技术，设计模式。&lt;br /&gt;第二步，掌握多种高级编程技术。WCF.WPF.&lt;br /&gt;第三部，掌握分布式WEB开发架构设计。&lt;br /&gt;第三部，学习领域驱动和企业级开发。&lt;/p&gt;&lt;p&gt;&amp;nbsp;&lt;/p&gt;&lt;p&gt;&amp;mdash;&amp;mdash;&amp;mdash;&amp;mdash;&amp;mdash;&amp;mdash;&amp;mdash;&amp;mdash;&amp;mdash;&amp;mdash;&amp;mdash;&amp;mdash;&amp;mdash;&amp;mdash;&lt;br /&gt;目前我第一步还没有走好。欠缺很多。最近浮躁的心态要调整下。&lt;/p&gt;&lt;p&gt;&amp;nbsp;&lt;/p&gt;&lt;p&gt;更重要是要认识到。这又可能是你下面5年，10年要走的路。不是一年内就可以去奢望的。去想这么远。不如脚踏实地的学习好ASP.NET技术。&lt;/p&gt;&lt;p&gt;&amp;nbsp;&lt;/p&gt;&lt;p&gt;ASP.NET技术有其优点。有其缺点。 封装的太好。开源的不多。 真正底层的操作介绍也只能在各个牛人博客上才能找到。&lt;/p&gt;&lt;p&gt;对应java或者PHP。需要什么组件和功能，都可以自己根据原理订制。这样个人技术发展起来比较快。&lt;/p&gt;&lt;p&gt;&amp;nbsp;&lt;/p&gt;&lt;p&gt;不过既然决定当初要做.NET，就一定要尽自己的努力。虽然我爱java。不过java是我情人。.NET是我老婆啊。&lt;/p&gt;&lt;p&gt;&amp;nbsp;&lt;/p&gt;&lt;p&gt;希望自己多多学习吧。&lt;/p&gt;&lt;img src="http://www.cnblogs.com/mahaisong/aggbug/2288527.html?type=1" width="1" height="1" alt=""/&gt;&lt;p&gt;&lt;a href="http://www.cnblogs.com/mahaisong/archive/2011/12/15/2288527.html" target="_blank"&gt;本文链接&lt;/a&gt;&lt;/p&gt;</content></entry><entry><id>http://www.cnblogs.com/mahaisong/archive/2011/12/04/2275248.html</id><title type="text">脱离SVN版本控制。DAT文件语句。</title><summary type="text">for /r . %%a in (.) do @if exist "%%a\.svn" rd /s /q "%%a\.svn"</summary><published>2011-12-04T02:15:00Z</published><updated>2011-12-04T02:15:00Z</updated><author><name>沐海</name><uri>http://www.cnblogs.com/mahaisong/</uri></author><link rel="alternate" href="http://www.cnblogs.com/mahaisong/archive/2011/12/04/2275248.html"/><link rel="alternate" type="text/html" href="http://www.cnblogs.com/mahaisong/archive/2011/12/04/2275248.html"/><content type="html">&lt;p&gt;for /r . %%a in (.) do @if exist "%%a\.svn" rd /s /q "%%a\.svn"&lt;/p&gt;&lt;img src="http://www.cnblogs.com/mahaisong/aggbug/2275248.html?type=1" width="1" height="1" alt=""/&gt;&lt;p&gt;&lt;a href="http://www.cnblogs.com/mahaisong/archive/2011/12/04/2275248.html" target="_blank"&gt;本文链接&lt;/a&gt;&lt;/p&gt;</content></entry><entry><id>http://www.cnblogs.com/mahaisong/archive/2011/12/01/2270928.html</id><title type="text">从0开始--倒序输出。</title><summary type="text">今天加入一个QQ群。是搞算法的。可是有个投名状 是 倒序输出 123456789.哦。于是我写了个。写的我看上去惨不忍睹。百度一下。发现个不错的的。int [] num=new int[1,2,3,4,5,6,7,8,9];for（int i=0;i&lt;num.length/2;i++）{int temp=num[i];num[i]=num[num.length-1-i];num[num.length-1-i]=temp;}这个不错就是它把 从0开始 这个 真正的用到了编程理论上。让我们看到。为什么从0开始更省力。因为如果不是从零开始。</summary><published>2011-12-01T09:14:00Z</published><updated>2011-12-01T09:14:00Z</updated><author><name>沐海</name><uri>http://www.cnblogs.com/mahaisong/</uri></author><link rel="alternate" href="http://www.cnblogs.com/mahaisong/archive/2011/12/01/2270928.html"/><link rel="alternate" type="text/html" href="http://www.cnblogs.com/mahaisong/archive/2011/12/01/2270928.html"/><content type="html">&lt;p&gt;今天加入一个QQ群。是搞算法的。可是有个投名状 是 倒序输出 123456789.&lt;/p&gt;&lt;p&gt;&amp;nbsp;&lt;/p&gt;&lt;p&gt;哦。于是我写了个。写的我看上去惨不忍睹。百度一下。发现个不错的的。&lt;/p&gt;&lt;p&gt;&amp;nbsp;&lt;/p&gt;&lt;p&gt;&amp;nbsp;&lt;/p&gt;&lt;div&gt;&lt;div style="background-color: #F5F5F5;border: 1px solid #CCCCCC;padding:10px;"&gt;int [] num=new int[1,2,3,4,5,6,7,8,9];&lt;br/&gt;&lt;br/&gt;for（int i=0;i&amp;lt;num.length/2;i++）{&lt;br/&gt;int temp=num[i];&lt;br/&gt;&lt;br/&gt;num[i]=num[num.length-1-i];&lt;br/&gt;num[num.length-1-i]=temp;&lt;br/&gt;&lt;br/&gt;}&lt;br/&gt;&lt;/div&gt;&lt;p&gt;&lt;br /&gt;这个不错就是它把 从0开始 这个 真正的用到了编程理论上。让我们看到。为什么从0开始更省力。&lt;/p&gt;&lt;p&gt;因为如果不是从零开始。&lt;/p&gt;&lt;/div&gt;&lt;img src="http://www.cnblogs.com/mahaisong/aggbug/2270928.html?type=1" width="1" height="1" alt=""/&gt;&lt;p&gt;&lt;a href="http://www.cnblogs.com/mahaisong/archive/2011/12/01/2270928.html" target="_blank"&gt;本文链接&lt;/a&gt;&lt;/p&gt;</content></entry><entry><id>http://www.cnblogs.com/mahaisong/archive/2011/11/15/2249855.html</id><title type="text">动软版本问题 +修改时，参数化查询时，提示少了某些参数， 但在数据库中这些参数为空。</title><summary type="text">一哥们。用动软2.6.7来写ADD和Update（）；数据库中字段可以为空。后台赋值为“”；结果修改时，首先给MODEL赋值，发现怎么成了NULL了。而数据库终中也不是“NULL”，证明数据库中是空串。于是发现动软生成的三层里面有一个SQLSERVERDAL。里面的UPDATE时，多了一个IF判断。我们的都是if(ds.Tables[0].Rows[0]["beginTime"].ToString()!="") { model.beginTime=DateTime.Parse(ds.Tables[0].Rows[0]["beginTime&amp;qu</summary><published>2011-11-15T08:10:00Z</published><updated>2011-11-15T08:10:00Z</updated><author><name>沐海</name><uri>http://www.cnblogs.com/mahaisong/</uri></author><link rel="alternate" href="http://www.cnblogs.com/mahaisong/archive/2011/11/15/2249855.html"/><link rel="alternate" type="text/html" href="http://www.cnblogs.com/mahaisong/archive/2011/11/15/2249855.html"/><content type="html">&lt;p&gt;一哥们。用动软2.6.7来写ADD和Update（）；&lt;/p&gt;&lt;p&gt;数据库中字段可以为空。后台赋值为&amp;ldquo;&amp;rdquo;；结果修改时，首先给MODEL赋值，发现怎么成了NULL了。&lt;/p&gt;&lt;p&gt;而数据库终中也不是&amp;ldquo;NULL&amp;rdquo;，证明数据库中是空串。&lt;/p&gt;&lt;p&gt;&amp;nbsp;&lt;/p&gt;&lt;p&gt;于是发现动软生成的三层里面有一个SQLSERVERDAL。里面的UPDATE时，多了一个IF判断。&lt;/p&gt;&lt;p&gt;&amp;nbsp;&lt;/p&gt;&lt;p&gt;我们的都是&lt;/p&gt;&lt;p&gt;&amp;nbsp;if(ds.Tables[0].Rows[0]["beginTime"].ToString()!="")&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; {&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; model.beginTime=DateTime.Parse(ds.Tables[0].Rows[0]["beginTime"].ToString());&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; }&lt;/p&gt;&lt;p&gt;&amp;nbsp;&lt;/p&gt;&lt;p&gt;他的是&lt;/p&gt;&lt;p&gt;if(ds.Tables[0].Rows[0]["beginTime"]!=null&amp;amp;&amp;amp;ds.Tables[0].Rows[0]["beginTime"].ToString()!=""){}&lt;/p&gt;&lt;p&gt;&amp;nbsp;&lt;/p&gt;&lt;p&gt;于是乎，导致一直取不到值。赋值也有null值。更不要说是UPDATE操作了。&lt;/p&gt;&lt;p&gt;&amp;nbsp;&lt;/p&gt;&lt;p&gt;但是注意：并不是说这样写是错的。而是看你平时针对数据库为空的情况在程序后台中怎么添加，怎么修改的习惯。&lt;/p&gt;&lt;p&gt;&amp;nbsp;&lt;/p&gt;&lt;p&gt;LOCATION中&lt;/p&gt;&lt;p&gt;&amp;nbsp;nvarchar&amp;nbsp; Memo 是可以为空的。model.BirdsNum = ds.Tables[0].Rows[0]["BirdsNum"].ToString();&lt;/p&gt;&lt;p&gt;其他的有的检查ds.Tables[0].Rows[0]["ServiceType"].ToString() != ""&lt;/p&gt;&lt;p&gt;有的还坚持ds.Tables[0].Rows[0]["beginTime"]!=null&lt;/p&gt;&lt;p&gt;&amp;nbsp;&lt;/p&gt;&lt;p&gt;各种动软版本都不同。导致你的可空字段的值很不稳定。&lt;/p&gt;&lt;p&gt;&amp;nbsp;&lt;/p&gt;&lt;p&gt;所以&lt;/p&gt;&lt;p&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; if (ds.Tables[0].Rows.Count &amp;gt; 0)&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; {&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;&amp;nbsp;&amp;nbsp; model.DeviceId = ds.Tables[0].Rows[0]["DeviceId"].ToString();&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;&amp;nbsp;&amp;nbsp; if (ds.Tables[0].Rows[0]["ServiceType"].ToString() != "")&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;&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;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; model.ServiceType = int.Parse(ds.Tables[0].Rows[0]["ServiceType"].ToString());&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;&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;&amp;nbsp;&amp;nbsp; if (ds.Tables[0].Rows[0]["Longtitude"].ToString() != "")&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;&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;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; model.Longtitude = decimal.Parse(ds.Tables[0].Rows[0]["Longtitude"].ToString());&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;&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;&amp;nbsp;&amp;nbsp; if (ds.Tables[0].Rows[0]["Latitude"].ToString() != "")&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;&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;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; model.Latitude = decimal.Parse(ds.Tables[0].Rows[0]["Latitude"].ToString());&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;&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;&amp;nbsp;&amp;nbsp; model.Direction = ds.Tables[0].Rows[0]["Direction"].ToString();&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;&amp;nbsp;&amp;nbsp; if (ds.Tables[0].Rows[0]["Velocity"].ToString() != "")&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;&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;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; model.Velocity = decimal.Parse(ds.Tables[0].Rows[0]["Velocity"].ToString());&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;&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;&amp;nbsp;&amp;nbsp; model.BirdsOrientation = ds.Tables[0].Rows[0]["BirdsOrientation"].ToString();&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;&amp;nbsp;&amp;nbsp; model.BirdsFlyDirection = ds.Tables[0].Rows[0]["BirdsFlyDirection"].ToString();&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;&amp;nbsp;&amp;nbsp; model.BirdsNum = ds.Tables[0].Rows[0]["BirdsNum"].ToString();&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;&amp;nbsp;&amp;nbsp; model.BirdsSize = ds.Tables[0].Rows[0]["BirdsSize"].ToString();&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;&amp;nbsp;&amp;nbsp; model.BirdsHeight = ds.Tables[0].Rows[0]["BirdsHeight"].ToString();&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;&amp;nbsp;&amp;nbsp; model.BirdsAction = ds.Tables[0].Rows[0]["BirdsAction"].ToString();&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;&amp;nbsp;&amp;nbsp; model.Address = ds.Tables[0].Rows[0]["Address"].ToString();&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;&amp;nbsp;&amp;nbsp; if (ds.Tables[0].Rows[0]["LocationTime"].ToString() != "")&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;&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;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; model.LocationTime = DateTime.Parse(ds.Tables[0].Rows[0]["LocationTime"].ToString());&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;&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;&amp;nbsp;&amp;nbsp; model.Memo = ds.Tables[0].Rows[0]["Memo"].ToString();&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;&amp;nbsp;&amp;nbsp; return model;&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; }&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; else&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; {&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;&amp;nbsp;&amp;nbsp; return null;&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; }&lt;/p&gt;&lt;p&gt;&amp;nbsp;&lt;/p&gt;&lt;p&gt;&amp;nbsp;&lt;/p&gt;&lt;p&gt;&lt;span style="background-color: #ffff00;"&gt;综上所述，解决方案分两个方面&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span style="background-color: #ffff00;"&gt;&amp;nbsp;&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span style="background-color: #ffff00;"&gt;1. 养成自己的编码习惯，看看修改和赋值时，自己想赋值成什么样。&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span style="background-color: #ffff00;"&gt;2.不要批量生成。每一个代码文件，特别是SQLServerDAL都要看看，是否和自己的编码习惯一直。不一致再改动。&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span style="background-color: #ffff00;"&gt;&amp;nbsp;&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span style="background-color: #ffff00;"&gt;反正有句话我在心里说：动软这点。正烦人。但是动软也不能适应所有的需求啊。而且动软是别人的定义。所以还是把这些修改成自己习惯的吧。哈哈。谁让我也是程序员那。&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span style="background-color: #ffff00;"&gt;&amp;nbsp;&lt;/span&gt;&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;&amp;mdash;&amp;mdash;&amp;mdash;&amp;mdash;&amp;mdash;&amp;mdash;&amp;mdash;&amp;mdash;下面是一种情况&lt;/p&gt;&lt;p&gt;参数化查询时，提示少了某些参数， 但在数据库中这些参数为空。&lt;/p&gt;&lt;p&gt;而且还是在修改时发生的。&lt;/p&gt;&lt;p&gt;&amp;nbsp;&lt;/p&gt;&lt;p&gt;我一直以为是三层中的&amp;ldquo;可空符号？&amp;rdquo;没写的问题。后台我加上此符号，发现string？ aa这样报错。&lt;/p&gt;&lt;p&gt;原来。string字符串本身就是个引用类型。可以是NULL 。不需要在加&amp;ldquo;？&amp;rdquo;。一般是INT 或者 DECIMAL 或者 DATETIME 这样的类型加&amp;ldquo;？&amp;rdquo;；&lt;/p&gt;&lt;p&gt;那是什么错误那？&lt;/p&gt;&lt;p&gt;&amp;nbsp;&lt;/p&gt;&lt;p&gt;后来我又一想，是修改。就需要先得到MODEL.直接拿一个MODEL赋值。然后UPDATE，当然有问题，因为不是ADD。是update。必须先赋值才可以啊。&lt;/p&gt;&lt;p&gt;&amp;nbsp;&lt;/p&gt;&lt;p&gt;于是我才明白。原来是在修改时，没有 MODEL=BLL.GETMODEL(ID);&lt;/p&gt;&lt;p&gt;&amp;nbsp;&lt;/p&gt;&lt;p&gt;已经赋了model的 提示MEMO字段缺失。一看原来是在参数化查询时，NULL字段没办法表示。一般更新就写个判断。看看MODEL是否只NULL。是NULL就赋值为""；&lt;/p&gt;&lt;p&gt;反正经过动软三层的SQLServerDAL.也会变成数据库中是NULL。不是NULL的时候就再赋一遍原来的值喽（其实我还是建议改动软三层中的代码）。&lt;/p&gt;&lt;p&gt;&amp;nbsp;&lt;/p&gt;&lt;p&gt;还是要看自己的习惯啊。&lt;/p&gt;&lt;img src="http://www.cnblogs.com/mahaisong/aggbug/2249855.html?type=1" width="1" height="1" alt=""/&gt;&lt;p&gt;&lt;a href="http://www.cnblogs.com/mahaisong/archive/2011/11/15/2249855.html" target="_blank"&gt;本文链接&lt;/a&gt;&lt;/p&gt;</content></entry><entry><id>http://www.cnblogs.com/mahaisong/archive/2011/11/15/2249503.html</id><title type="text">Sql Server 2005 用户 &amp;#39;sa&amp;#39; 登录失败。该用户与可信 SQL Server 连接无关联</title><summary type="text">用户 'sa' 登录失败。该用户与可信 SQL Server 连接无关联 问题一、忘记了登录Microsoft SQL Server 2005 的sa的登录密码解决方法：先用windows身份验证的方式登录进去，然后在‘安全性’-‘登录’-右键单击‘sa’-‘属性’，修改密码（sa的密码不能太简单，最好要有数字，字母，下划线字符组成，且长度最好大于10个字符）；点击确定就可以了。问题二、已成功与服务器建立连接，但是在登录过程中发生错取。（provider:共享内存提供程序，error：0-管道的另一端上无任何进程。）（Microsoft SQL Server,错误:233） 解</summary><published>2011-11-15T03:24:00Z</published><updated>2011-11-15T03:24:00Z</updated><author><name>沐海</name><uri>http://www.cnblogs.com/mahaisong/</uri></author><link rel="alternate" href="http://www.cnblogs.com/mahaisong/archive/2011/11/15/2249503.html"/><link rel="alternate" type="text/html" href="http://www.cnblogs.com/mahaisong/archive/2011/11/15/2249503.html"/><content type="html">&lt;p align="left"&gt;用户 'sa' 登录失败。该用户与可信 SQL Server 连接无关联 &lt;br /&gt;&lt;br /&gt;问题一、忘记了登录Microsoft SQL Server 2005 的sa的登录密码&lt;/p&gt;&lt;p align="left"&gt;解决方法：先用windows身份验证的方式登录进去，然后在&amp;lsquo;安全性&amp;rsquo;-&amp;lsquo;登录&amp;rsquo;-右键单击&amp;lsquo;sa&amp;rsquo;-&amp;lsquo;属性&amp;rsquo;，修改密码（sa的密码不能太简单，最好要有数字，字母，下划线字符组成，且长度最好大于10个字符）；点击确定就可以了。&lt;/p&gt;&lt;p align="left"&gt;问题二、已成功与服务器建立连接，但是在登录过程中发生错取。（provider:共享内存提供程序，error：0-管道的另一端上无任何进程。）（Microsoft SQL Server,错误:233） &lt;br /&gt;&lt;br /&gt;解决方法：打开&amp;lsquo;程序&amp;rsquo;－&amp;lsquo;所有程序&amp;rsquo;－&amp;lsquo;Microsoft SQL Server 2005 &amp;rsquo;－&amp;lsquo;配置工具&amp;rsquo;－&amp;lsquo;SQL Server 配置管理器&amp;rsquo;，在弹出的窗体中，找到&amp;lsquo;SQL Server 2005 网络配置&amp;rsquo;，把&amp;lsquo;MSSQLSERVER的协议&amp;rsquo;下的&amp;ldquo;Named Pipes&amp;rdquo;和&amp;ldquo;TCP/IP&amp;rdquo;启动，然后重新启动Microsoft SQL Server 2005就可以了。&lt;/p&gt;&lt;p align="left"&gt;&amp;nbsp;&lt;/p&gt;&lt;p align="left"&gt;问题三、无法打开用户默认数据库。登录失败。用户&amp;lsquo;sa&amp;rsquo;登录失败。（Microsoft SQL Server, 错误：4064）&lt;/p&gt;&lt;p align="left"&gt;解决方法：先用windows身份验证的方式登录进去，然后在&amp;lsquo;安全性&amp;rsquo;-&amp;lsquo;登录&amp;rsquo;-右键单击&amp;lsquo;sa&amp;rsquo;-&amp;lsquo;属性&amp;rsquo;，将默认数据库设置成master，点击确定就可以了。&lt;/p&gt;&lt;p align="left"&gt;问题四、sql server 2005 错误 18452 &lt;br /&gt;无法连接到服务器 &lt;br /&gt;服务器：消息18452， 级别16，状态1 &lt;br /&gt;[Microsoft][ODBC SQL Server Driver][SQL Server]用户&amp;lsquo;sa&amp;rsquo;登陆失败。原因：未与信任SQL Server连接相关联&lt;/p&gt;&lt;p align="left"&gt;该错误产生的原因是由于SQL Server使用了"仅 Windows"的身份验证方式，因此用户无法使用SQL Server的登录帐户（例如 sa )进行连接，解决方法如下 &lt;br /&gt;设置允许SQL Server身份登录 (基本上这个很有用) &lt;br /&gt;操作步骤： &lt;br /&gt;1。在企业管理器中，展开"SQL Server组"，鼠标右键点击SQL Server服务器的名称 2。选择"属性" 3。再选择"安全性"选项卡 4。在"身份验证"下，选择"SQL Server和 Windows" 5。确定,并重新启动SQL Server服务 &lt;br /&gt;&lt;br /&gt;&lt;/p&gt;&lt;p align="left"&gt;问题五、用户 'sa' 登录失败。该用户与可信 SQL Server 连接无关联。 &lt;br /&gt;解决方法：检查你的数据库的认证模式，windows 和 混合模式，需要SA登陆的请选择混合模式。 &lt;br /&gt;检查计算机1433连接端口，1434数据端口是否打开 &lt;br /&gt;针对sql 2005 进入管理器中&amp;ldquo;安全&amp;rdquo;==》&amp;ldquo;用户&amp;rdquo;==》双击用户（弹出属性对话框）==》&amp;ldquo;状态&amp;rdquo;把状态改成enable，退出管理器重新登录（用户验证模式） &lt;br /&gt;&lt;br /&gt;即：右键数据库属性对话框，选择&amp;ldquo;安全性&amp;rdquo;选项卡，服务器身份验证模式选择&amp;ldquo;SQL Server和Windows身份验证模式 。然后重新配置sa的登陆信息即可。 &lt;br /&gt;&lt;br /&gt;SQL SERVER 2005使用sa 登录失败-提示该用户与可信 SQL Server 连接无关联 &lt;br /&gt;错误提示： &lt;br /&gt;&lt;br /&gt;sa 登录失败，提示该用户与可信 SQL Server 连接无关联 &lt;br /&gt;&lt;br /&gt;解决方法： &lt;br /&gt;打开SQL Server Management Studio Express， &lt;br /&gt;右键点击服务器，选择Properties(属性),在弹出窗口中点击Security(安全)切换到安全面板， &lt;br /&gt;将server authentication服务器认证从windows authentication mode（windows用户认证模式） &lt;br /&gt;修改为Sql Server and Windows Authentication mode（Sql server和windows认证模式），ok。 &lt;br /&gt;&lt;br /&gt;打开security(安全性) -- logins(登录名) ，右键选中sa，选择properties(属性)，点击Status(状态)切换到状态面板，将Login(登录)设置为Enabled(启用)。 &lt;br /&gt;切记：一定要把SQL2005服务重启才生效。&lt;/p&gt;&lt;p align="left"&gt;&amp;nbsp;&lt;/p&gt;&lt;p align="left"&gt;关于在xp系统上sql2005创建用户失败的问题(已解决)&lt;/p&gt;&lt;table style="width: 100%;" border="0" cellpadding="0"&gt;&lt;tbody&gt;&lt;tr&gt;&lt;td&gt;&lt;p align="left"&gt;Sqlexpress中&amp;nbsp; 创建&amp;nbsp;&amp;nbsp;&amp;nbsp; 对于&amp;nbsp;&amp;nbsp;&amp;nbsp; 登录&amp;ldquo;worthcom&amp;rdquo;失败。&amp;nbsp; (Microsoft.SqlServer.Smo)&amp;nbsp;&amp;nbsp; 执行&amp;nbsp;&amp;nbsp;&amp;nbsp; Transact-SQL语句或批处理时发生了异常。&amp;nbsp;&amp;nbsp;&amp;nbsp; 此版本的&amp;nbsp;&amp;nbsp;&amp;nbsp; Microsoft&amp;nbsp;&amp;nbsp;&amp;nbsp; Windows&amp;nbsp;&amp;nbsp;&amp;nbsp; 不支持&amp;nbsp;&amp;nbsp;&amp;nbsp; MUST_CHANGE&amp;nbsp;&amp;nbsp;&amp;nbsp; 选项。&amp;nbsp;&amp;nbsp;&amp;nbsp; (Microsoft&amp;nbsp;&amp;nbsp;&amp;nbsp; SQL&amp;nbsp;&amp;nbsp;&amp;nbsp; Server，错误:&amp;nbsp;&amp;nbsp;&amp;nbsp; 15195)&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;br /&gt;&amp;nbsp;解决方法:只需创建时取消强制密码过期选项&lt;/p&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/tbody&gt;&lt;/table&gt;&lt;p&gt;&amp;nbsp;&lt;/p&gt;&lt;img src="http://www.cnblogs.com/mahaisong/aggbug/2249503.html?type=1" width="1" height="1" alt=""/&gt;&lt;p&gt;&lt;a href="http://www.cnblogs.com/mahaisong/archive/2011/11/15/2249503.html" target="_blank"&gt;本文链接&lt;/a&gt;&lt;/p&gt;</content></entry></feed>
