空间 微博 公众号 博客一个都不能少

mikel阅读(983)

要想在互联网上做自媒体不要指望一个平台就能有效果,尽管你有每天写日志不懈努力的心,可是总是无法逃脱你是个网络没有归属感的人的命运。就这么飘在网上简称网飘儿!

要想有归属感还是建自己的网站吧!最起码一亩三分地儿自己说了算,大家都在建公众号然后刷订阅,可是到头来微信一则严打规则还不是让昔日的梦想成了一场黄粱美梦!最近空间就是个例子,不断的被封禁,不断的被屏蔽日志! 我也是醉了!自己想发出点儿声音就那么难吗?!

到底是世界在变得开放,还是变得壁垒重重,让人无处发声?!不知道互联网怎么了?!各种社会化媒体纷纷亮相的同时,背后却是多少人被禁声的血泪史?!

危机来临!社会化媒体全部沦陷,营销正在失效

mikel阅读(1141)

原文《危机来临!社会化媒体全部沦陷,营销正在失效》,原文摘要:

在05、06年的时候,在论坛里写一篇软文做一次植入营销是一件很容易的事情。因为,那时候,论坛里氛围还是比较单纯的,很多企业远还未意识到论坛里的口 碑营销的价值。而到了07、08年之后,越来越多的水军侵入到论坛,网站管理员和版主艰苦的跟“水军”做着斗争,不过在企业做社会化营销的强烈需求的推动 下,大量的马甲在论坛里成批的出现,一些自动发帖软件被开发出来。于是,论坛里垃圾的广告贴越来越多,论坛生态被破坏,人们开始逃离,论坛开始走向衰落。

在2009年8月,新浪成为国内第一家开放微博服务的门户网站,由此开启了微博为主导的社会化营销的时代。就在很多用户发愁一个月长不了10个粉丝的时候,在淘宝上花10块钱就能直接涨1万个僵尸粉。而在新浪微博的大力推功和支持下,更多的企业账号涌入微博, 并将其作为社会化营销的主流阵地,大量的早安晚安心灵鸡汤和企业的产品消息,通过专门的微博运营人员每天持续的被制造,并定时推送给他们的粉丝们。微博开 始被企业、媒体、政府、营销等账号彻底占领,微博生态被破坏,人们开始陆续逃离。

而在今天,正如日中天的微信似乎似乎也正走在老路上。在很多人关注到微商的泛滥对微信朋友圈生态的破坏时,事实上目前对微信朋友圈这个社会化媒体平台的生态破坏最为严重的却是越来越多的企业将微信作为营销的阵地,并将精力逐步从微博转移到了微信上。

在今天,论坛已经渐渐无人问津,微博的衰落已是事实,而微信的疲态已经开始显现,但是新的平台级的社会化媒体平台还没有开始出现,目前的社会化营销时代看起来正在遭遇断层。

1、没有人再大红大紫

而在微信上,除了很多没有性格的自媒体文摘号或垂直圈子里的知名自媒体人外,并没有真正的红遍全网的红人出现。

2、没有品牌赖以成名

而在微信时代,尽管不少企业通过微信公众号的运营和推广,吸引了众多的品牌粉丝,但目力所及,还没有看到有一个品牌能够像小米或杜蕾斯那样在微博风行的时代受益如此之多。

3、没有产品因此畅销

不可否认的是,在微信这个社会化营销平台上,成功的面膜微商案例大多只是包裹着传销性质的销售神话。而一些做其他如农产品、土特产、手工艺品等产品的微商,面临的困境却是在消费完有效的微信好友资源之后,无法进一步扩大自己到社交范围从而打开更大的市场。

显而易见的是,当越来越多的企业投入到社会化营销的大潮中,社会化营销的各项手段就已经开始慢慢失效。一个个的热点被制造出来,又迅速消失。当热点越来越 多,目不暇接,然后人们就开始对于营销热点越来越麻木,也越来难以被打动直至兴奋尖叫。而如果你一直在关注社会化营销的发展的话,你会发现,已经很久没有 听到或看到一个真正成功的营销案例了。

当营销成为生活的常态,当我们的世界随时随地被营销事件所包围,到处都是包装过的故事或报道,你越来越看不清楚这个世界本真的模样,就意味着人们越来越难以被营销故事所打动。

于是,我们看到,雾霾来了,企业的公关和文案忙碌起来,开始借势刷屏;沙尘暴来了。企业的公关和文案又忙碌起来,开始借势刷屏;坠机事件发生,各类新闻平 台和app准备文案,忙着借势;春节、元宵节、情人节、五一劳动节、端午节、中秋节、母亲节、儿童节等等中外大小节日,无论是传统佳节还是舶来的洋节,统 统都是营销的节点,刷屏!刷屏!刷屏!没有创意和新意,不管品牌与节日搭还是不搭,全部一哄而上。这些传统的把戏,甚至连普通的用户都熟知一二。而被营销 刷屏惯了的用户,早已审美疲劳,只是默默的掠过。

观点:

社会化媒体的营销越来越让用户免疫了,很多营销手段也让久病成医的用户更加熟知得同时,也让用户们越来越怀疑网络的真实性,所以如此恶性循环让社会化媒体嫣然成了一个独角戏的场所,用户龟缩在自己熟知的小圈子里,发现有潜伏的无间道商家账号直接就给屏蔽和拉黑处理,可见用户已经见广告色变的地步。

可各种以小礼物赠送为诱饵的营销更加让用户变得精灵老练,那些曲线救国般的游戏规则用户都要认真的读读,反倒是那些简单直接的发红包类的方式更容易让人接受,所以说用户不再是那么好忽悠的和愚弄的,为什么说社会化媒体出不了过去的红人就是这个原因,只要传播出来的火爆的言论冷却时间也是惊人的短暂几分钟就完事儿了。

别再为了营销而营销,披着任何伪装外衣的营销都会在最后那一刻被用户所拆穿,然后被无情的抛弃。

 

[转载]反射操作工具类 - 扯 - 博客园

mikel阅读(1174)

[转载]反射操作工具类 – 扯 – 博客园.

 

复制代码

using System;
using System.Collections.Generic;
using System.Data;
using System.Reflection;

namespace Framework.Utility
{
    /// <summary>
    /// 反射操作工具类
    /// </summary>
    public class ReflectionUtil
    {
        #region 根据反射机制将dataTable中指定行的数据赋给obj对象

        /// <summary>
        /// 根据反射机制将dataTable中指定行的数据赋给obj对象
        /// </summary>
        /// <param name="obj">obj对象</param>
        /// <param name="dataTable">dataTable</param>
        /// <param name="rowIndex">指定行</param>
        public static void ConvertDataRowToModel(object obj, DataTable dataTable, int rowIndex)
        {
            //指定行不存在
            if (dataTable.Rows.Count < (rowIndex + 1))
            {
                throw new Exception("指定行不存在!");
            }

            //DataTable列为空!
            if (dataTable.Columns.Count < 1)
            {
                throw new Exception("DataTable列为空!");
            }

            Type type = obj.GetType();
            PropertyInfo[] pInfos = type.GetProperties();

            try
            {
                for (int i = 0; i < dataTable.Columns.Count; i++)
                {
                    for (int j = 0; j < pInfos.Length; j++)
                    {
                        //全部转换为小写的作用是防止数据库列名的大小写和属性的大小写不一致
                        if (dataTable.Columns[i].ColumnName.ToLower() == pInfos[j].Name.ToLower())
                        {
                            PropertyInfo pInfo = type.GetProperty(pInfos[j].Name);  //obj某一属性对象

                            object colValue = dataTable.Rows[rowIndex][i]; //DataTable 列值

                            #region 将列值赋给object属性

                            if (!ObjectIsNull(colValue))
                            {
                                if (pInfos[j].PropertyType.FullName == "System.String")
                                {
                                    pInfo.SetValue(obj, Convert.ToString(colValue), null);
                                }
                                else if (pInfos[j].PropertyType.FullName == "System.Int32")
                                {
                                    pInfo.SetValue(obj, Convert.ToInt32(colValue), null);
                                }
                                else if (pInfos[j].PropertyType.FullName == "System.Int64")
                                {
                                    pInfo.SetValue(obj, Convert.ToInt64(colValue), null);
                                }
                                else if (pInfos[j].PropertyType.FullName == "System.Single")
                                {
                                    pInfo.SetValue(obj, Convert.ToSingle(colValue), null);
                                }
                                else if (pInfos[j].PropertyType.FullName == "System.Double")
                                {
                                    pInfo.SetValue(obj, Convert.ToDouble(colValue), null);
                                }
                                else if (pInfos[j].PropertyType.FullName == "System.Decimal")
                                {
                                    pInfo.SetValue(obj, Convert.ToDecimal(colValue), null);
                                }
                                else if (pInfos[j].PropertyType.FullName == "System.Char")
                                {
                                    pInfo.SetValue(obj, Convert.ToChar(colValue), null);
                                }
                                else if (pInfos[j].PropertyType.FullName == "System.Boolean")
                                {
                                    pInfo.SetValue(obj, Convert.ToBoolean(colValue), null);
                                }
                                else if (pInfos[j].PropertyType.FullName == "System.DateTime")
                                {
                                    pInfo.SetValue(obj, Convert.ToDateTime(colValue), null);
                                }
                                //可空类型
                                else if (pInfos[j].PropertyType.FullName == "System.Nullable`1[[System.DateTime, mscorlib, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089]]")
                                {
                                    pInfo.SetValue(obj, Convert.ToDateTime(colValue), null);
                                }
                                else if (pInfos[j].PropertyType.FullName == "System.Nullable`1[[System.DateTime, mscorlib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089]]")
                                {
                                    pInfo.SetValue(obj, Convert.ToDateTime(colValue), null);
                                }
                                else if (pInfos[j].PropertyType.FullName == "System.Nullable`1[[System.Int32, mscorlib, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089]]")
                                {
                                    pInfo.SetValue(obj, Convert.ToInt32(colValue), null);
                                }
                                else if (pInfos[j].PropertyType.FullName == "System.Nullable`1[[System.Int32, mscorlib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089]]")
                                {
                                    pInfo.SetValue(obj, Convert.ToInt32(colValue), null);
                                }
                                else if (pInfos[j].PropertyType.FullName == "System.Nullable`1[[System.Int64, mscorlib, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089]]")
                                {
                                    pInfo.SetValue(obj, Convert.ToInt64(colValue), null);
                                }
                                else if (pInfos[j].PropertyType.FullName == "System.Nullable`1[[System.Int64, mscorlib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089]]")
                                {
                                    pInfo.SetValue(obj, Convert.ToInt64(colValue), null);
                                }
                                else if (pInfos[j].PropertyType.FullName == "System.Nullable`1[[System.Decimal, mscorlib, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089]]")
                                {
                                    pInfo.SetValue(obj, Convert.ToDecimal(colValue), null);
                                }
                                else if (pInfos[j].PropertyType.FullName == "System.Nullable`1[[System.Decimal, mscorlib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089]]")
                                {
                                    pInfo.SetValue(obj, Convert.ToDecimal(colValue), null);
                                }
                                else if (pInfos[j].PropertyType.FullName == "System.Nullable`1[[System.Boolean, mscorlib, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089]]")
                                {
                                    pInfo.SetValue(obj, Convert.ToBoolean(colValue), null);
                                }
                                else if (pInfos[j].PropertyType.FullName == "System.Nullable`1[[System.Boolean, mscorlib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089]]")
                                {
                                    pInfo.SetValue(obj, Convert.ToBoolean(colValue), null);
                                }
                                else
                                {
                                    throw new Exception("属性包含不支持的数据类型!");
                                }
                            }
                            else
                            {
                                pInfo.SetValue(obj, null, null);
                            }

                            #endregion 将列值赋给object属性

                            break;
                        }
                    }
                }
            }
            catch (Exception ex)
            {
                //LogTxt.LogException(ex.Message + "\r\n" + ex.Source + "\r\n" + ex.TargetSite + "\r\n" + ex.StackTrace + "\r\n");
                throw ex;
            }
        }

        #endregion 根据反射机制将dataTable中指定行的数据赋给obj对象

        #region 根据反射机制从obj对象取值并用该值添加datatable行

        /// <summary>
        /// 根据反射机制从obj对象取值并用该值添加datatable行
        /// </summary>
        /// <param name="obj">obj对象</param>
        /// <param name="dataTable">dataTable</param>
        /// <param name="rowIndex">指定行</param>
        public static void ConvertModelToNewDataRow(object obj, DataTable dataTable, int rowIndex)
        {
            //DataTable列为空!
            if (dataTable.Columns.Count < 1)
            {
                throw new Exception("DataTable列为空!");
            }

            DataRow dr = dataTable.NewRow();
            Type type = obj.GetType();
            PropertyInfo[] pInfos = type.GetProperties();

            try
            {
                for (int i = 0; i < dataTable.Columns.Count; i++)
                {
                    for (int j = 0; j < pInfos.Length; j++)
                    {
                        //全部转换为小写的作用是防止数据库列名的大小写和属性的大小写不一致
                        if (dataTable.Columns[i].ColumnName.ToLower() == pInfos[j].Name.ToLower())
                        {
                            PropertyInfo pInfo = type.GetProperty(pInfos[j].Name);

                            object beanValue = pInfo.GetValue(obj, null);

                            //将bean中属性值赋给datarow
                            if (!ObjectIsNull(beanValue))
                            {
                                dr[i] = beanValue;
                            }
                            else
                            {
                                dr[i] = DBNull.Value;
                            }
                            break;
                        }
                    }
                }

                dataTable.Rows.InsertAt(dr, rowIndex);
                dataTable.AcceptChanges();
            }
            catch (Exception ex)
            {
                //LogTxt.LogException(ex.Message + "\r\n" + ex.Source + "\r\n" + ex.TargetSite + "\r\n" + ex.StackTrace + "\r\n");
                throw ex;
            }
        }

        #endregion 根据反射机制从obj对象取值并用该值添加datatable行

        #region 根据反射机制从obj对象取值并赋给datatable的指定行

        /// <summary>
        /// 根据反射机制从obj对象取值并赋给datatable的指定行
        /// </summary>
        /// <param name="obj">obj对象</param>
        /// <param name="dataTable">dataTable</param>
        /// <param name="rowIndex">指定行</param>
        public static void ConvertModelToSpecDataRow(object obj, DataTable dataTable, int rowIndex)
        {
            //指定行不存在
            if (dataTable.Rows.Count < (rowIndex + 1))
            {
                throw new Exception("指定行不存在!");
            }

            //DataTable列为空!
            if (dataTable.Columns.Count < 1)
            {
                throw new Exception("DataTable列为空!");
            }

            Type type = obj.GetType();
            PropertyInfo[] pInfos = type.GetProperties();

            try
            {
                for (int i = 0; i < dataTable.Columns.Count; i++)
                {
                    for (int j = 0; j < pInfos.Length; j++)
                    {
                        //全部转换为小写的作用是防止数据库列名的大小写和属性的大小写不一致

                        if (dataTable.Columns[i].ColumnName.ToLower() == pInfos[j].Name.ToLower())
                        {
                            PropertyInfo pInfo = type.GetProperty(pInfos[j].Name);
                            object beanValue = pInfo.GetValue(obj, null);

                            //将bean中属性值赋给datarow
                            if (!ObjectIsNull(beanValue))
                            {
                                dataTable.Rows[rowIndex][i] = beanValue;
                            }
                            else
                            {
                                dataTable.Rows[rowIndex][i] = DBNull.Value;
                            }
                            break;
                        }
                    }
                }
                dataTable.AcceptChanges();
            }
            catch (Exception ex)
            {
                //LogTxt.LogException(ex.Message + "\r\n" + ex.Source + "\r\n" + ex.TargetSite + "\r\n" + ex.StackTrace + "\r\n");
                throw ex;
            }
        }

        #endregion 根据反射机制从obj对象取值并赋给datatable的指定行

        #region 根据对象名返回类实例

        /// <summary>
        /// 根据对象名返回类实例
        /// </summary>
        /// <param name="parObjectName">对象名称</param>
        /// <returns>对象实例(可强制转换为对象实例)</returns>
        public static object GetObjectByObjectName(string parObjectName)
        {
            Type t = Type.GetType(parObjectName); //找到对象
            return System.Activator.CreateInstance(t);         //实例化对象
        }

        #endregion 根据对象名返回类实例

        #region 判断对象是否为空

        /// <summary>
        /// 判断对象是否为空
        /// </summary>
        /// <param name="obj">对象</param>
        /// <returns></returns>
        static public bool ObjectIsNull(Object obj)
        {
            //如果对象引用为null 或者 对象值为null 或者对象值为空
            if (obj == null || obj == DBNull.Value || obj.ToString().Equals("") || obj.ToString() == "")
            {
                return true;
            }
            return false;
        }

        #endregion 判断对象是否为空

        #region 根据反射机制将DataTable转换为实体集合。

        /// <summary>
        /// 根据反射机制将DataTable转换为实体集合。
        /// </summary>
        /// <typeparam name="T">实体类型。</typeparam>
        /// <param name="dt">DataTable。</param>
        /// <returns>实体集合。</returns>
        public static List<T> ConvertDataTableToModelList<T>(DataTable dt)
        {
            if (dt == null)
            {
                return null;
            }
            List<T> result = new List<T>();
            for (int i = 0; i < dt.Rows.Count; i++)
            {
                T t = Activator.CreateInstance<T>();
                ConvertDataRowToModel(t, dt, i);
                result.Add(t);
            }
            return result;
        }

        #endregion 根据反射机制将DataTable转换为实体集合。

        /// <summary>
        /// 通用(调用对象方法前先new一遍对象,故对象的状态无法保留;无用有无参构造函数,并调用无参方法),
        /// </summary>
        /// <typeparam name="T"></typeparam>
        /// <param name="methodName"></param>
        public static void InvokeMethod<T>(string methodName, object[] param = null) where T : new()
        {
            T instance = new T();
            MethodInfo method = typeof(T).GetMethod(methodName);
            method.Invoke(instance, param);
        }

        /// <summary>
        /// 调用一个具体实例对象的方法,会保留对象状态
        /// </summary>
        /// <param name="o"></param>
        /// <param name="methodName"></param>
        public static void InvokeMethod(object o, string methodName, object[] param = null)
        {
            o.GetType().GetMethod(methodName).Invoke(o, param);
        }
    }
}

[转载]无法将 NULL 转换成“System.DateTime”,因为它是一种值类型 - 我心飞翔 - BlogJava

mikel阅读(1377)

[转载]无法将 NULL 转换成“System.DateTime”,因为它是一种值类型 – 我心飞翔 – BlogJava.

C# 2.0里面的数据类型中,分为值类型和引用类型,引用类型可以初始化为null,可是值类型是不可以的。

比如经常用到的System.Guid类型,要么赋值为Guid.NewId,要么赋值为Guid.Empty。
再比如System.DateTime,默认初始化为DateTime.MinValue。

强行给值类型赋null值,编译就不会通过,会报出类似下面的异常:
错误 1 无法将 NULL 转换成“System.DateTime”,因为它是一种值类型
这个时候就要借助Nullable<T>结构体了。

拿DateTime举例,完整的写法:
Nullable<DateTime> now = DateTime.Now;
Nullable<DateTime> now = null;
当然也可以缩写:
DateTime? now = DateTime.Now;
DateTime? now = null;
我们可以直接对now赋值,但实际上是给now.Value赋值。

既然可以为空,就涉及到判断了,以下两种方式都是可行的:
if (now != null) {}
if (now.HasValue()) {}
有一点需要注意的是,值类型可以通过这种方法变成引用类型,但是引用类型不可以哟。比如下面这段代码:
Nullable<string> test = “ddd”;
这段代码编译无法通过,会报出以下异常:
错误 1 类型“string”必须是不可为空的值类型才能用作泛型类型或方法“System.Nullable<T>”中的参数“T”

做自媒体应该有自己的根据地

mikel阅读(1072)

最近QQ空间频繁被禁止的日志让很多人很郁闷,就像想说话被别人给堵住了嘴那么难受!很多人都已经养成了坚持写日志的习惯,可万万没想到腾讯审查如此严格,结果被错杀的有很多,甚至微博都发不出去了!又有多少人不得不一声叹息下改投其他平台?

所以说做自媒体总是依赖别人的平台终究不是长久之计,怎么也得有个自己的独立博客才行,其实很多人都证明了这一点儿,并做得很好,网赚圈里面就很流行自己的独立博客写网赚操作项目的日志等等方式,这就很好没有限制想写啥就写啥,也显得很真实不至于因为迎合什么审查规则,将一篇好好的文章改的面目全非,结果读者读的都一头雾水。

从程序员的角度也应该有自己的独立博客来积累自己日常开发中的经验总结之类的,以备自己日后查阅,毕竟每次解决问题的经验都是宝贵的,所以说要有自己的根据地!

[转载]ASP.NET MVC 系列:使用Flurl制作可复用的分页组件 - >>王刚 - 博客园

mikel阅读(1139)

[转载]ASP.NET MVC 系列:使用Flurl制作可复用的分页组件 – >>王刚 – 博客园.

使用ASP.NET MVC查询时,一直使用MvcPaging组件,虽然需要自定义MvcPaging.Pager才能达到我想要的效果,但在没有较好的URL库时,还是这么用。分页的逻辑本来就不复杂,更重要的是最近发现了Flurl这个开源库,所以采用Flurl制作一个DIY的分页组件,核心是PagingModel文件,算法可能不是最优,但包含了主要的逻辑和实现关键点。由于在查询方面,我使用以下实践:

1.使用ViewModel封装查询参数

2.使用ViewModel作为View的Model类型

3.采用表单的GET方式提交查询到Action

4.直接设置Url的参数提交查询到Action

因此自制的分页组件也在上述环境下应用。本来计算将查询和分页写在一起,但是为了便于独立演示分页还是将分页部分独立出来。

1.首先使用String扩展方法包装Flurl中的方法,便于以后更换其他库。

2.自定义继承自IHtmlString的对象PagingModel,这样可以不依赖MVC的程序库。同时实现了IvalidatableObject接口,检查PageSize异常。一些默认的参数可以配置成从配置文件(在ASP.NET MVC 系列:文件上传的Demo有相关的代码)或配置数据库中读取。

3.在ASP.NET MVC Razor中直接使用或使用HtmlHelper扩展方法包装调用。可以对类库再次保证,引用ASP.NET MVC,这样可以直接返回SelectList对象。

Action:

View:

4.可以不使用继承自PagingModel的方式,直接在View中new 一个PagingModel方式,如:

5.效果演示:

(1)靠近首页和末页的链接数不足时,会向中间补全。博客园的导航就只处理了靠近首页部分,没有正确处理末页部分。

(2)默认PageIndex和PageSize不会添加参数。Url中参数为空时会自动过滤掉。

Demo:点击下载

如果这篇博客内容对您稍有帮助或略有借鉴,请您推荐它帮助更多的人。

[转载]C# 微信 生活助手 空气质量 天气预报等 效果展示 数据抓取 (一) - 开心生活助手 - 博客园

mikel阅读(1293)

[转载]C# 微信 生活助手 空气质量 天气预报等 效果展示 数据抓取 (一) – 开心生活助手 – 博客园.

第一次在博客园写博客写的不好,大家见谅。最近工作辞了,然后感冒发烧输了一个星期的液,感觉很烦躁,心情不是很好,在帝都感觉压力大,废话不说了开始正题把!

还没有完全完成,后续考虑开源!

可以关注微信公众帐号体验一下先看下 效果把

 

先介绍下工具 我用的有 httpwatch,fiddler

 

国家环保部的数据链接 http://datacenter.mep.gov.cn/report/air_daily/airDairyCityHour.jsp

原以为直接get请求就可以了 试了下 发现没有获取了 然后看了下代码 发现

<script type="text/javascript">// <![CDATA[
    function submitForm(){
        document.citydayform.submit();
    }
// ]]></script>

<form style="margin: 0px auto 0px auto;" action="http://datacenter.mep.gov.cn:80/report/air_daily/airDairyCityHour.jsp" method="post" name="citydayform">
<table class="font" border="1" width="95%" cellspacing="0" cellpadding="0" align="center">
<tbody>
<tr>
<td class="STYLE1" align="right" bgcolor="#FFFFEF" width="5%" height="30">城市:</td>
<td bgcolor="#FFFFFF" width="8%">
<input name="city" type="text" value="" /></td>
<td class="STYLE1 STYLE1" align="right" bgcolor="#FFFFEF" width="5%" height="30">时间:</td>
<td bgcolor="#FFFFFF" width="30%">  从:
<input id="startdate" class="Wdate" style="text-align: center; cursor: pointer; width: 160px; height: 21px; margin-top: 0px;" name="startdate" readonly="readonly" type="text" value="2015-04-16 22:00" />
到:
<input id="enddate" class="Wdate" style="text-align: center; cursor: pointer; width: 160px; height: 21px; margin-top: 0px;" name="enddate" readonly="readonly" type="text" value="2015-04-16 22:00" /></td>
<td bgcolor="#FFFFFF" width="8%">
<div align="center"><input height="19" src="/report/main/images/search.gif" type="image" width="83" /></div></td>
</tr>
</tbody>
</table>
</form>

模型

复制代码

public partial class AirQuality
{
public int Id { get; set; }
public System.DateTime Time { get; set; }
public int AQI { get; set; }
public int CityCode { get; set; }
public string Level { get; set; }
public string PrimaryPollutant { get; set; }
}

抓取代码,通过正则匹配数据

复制代码

while (true)
{
string param = string.Format("city=&amp;startdate={0}&amp;enddate={1}&amp;page={2}", lastGrabHBTime.AddHours(1).ToString("yyyy-MM-dd HH:mm"), currentTime.ToString("yyyy-MM-dd HH:mm"), pageIndex);
#region 数据抓取
while (true)
{
try
{
res = HttpHelper.PostRequest(Constant.HBUrl, param, Encoding.GetEncoding("GB2312"));
break;
}
catch (Exception)
{
Thread.Sleep(1000);
}
}
#endregion
res = Regex.Replace(res, "[\r\n|\t]", "").Replace(" ", " ");
var matches = regex.Matches(res);
if (matches.Count == 0)
break;
foreach (Match match in matches)
{
var group = match.Groups;
if (group.Count == 10)
{
var air = new AirQuality()
{
Time = DateTime.Parse(group[3].Value),
AQI = int.Parse(group[5].Value),
Level = group[7].Value,
PrimaryPollutant = group[9].Value,
CityCode = cityConfigs.FirstOrDefault(p =&gt; p.City == group[1].Value).Code
};
airQualities.Add(air);
}
}
pageIndex++;
Thread.Sleep(100);
}

POST请求代码

public static string PostRequest(string url, string param, string cookie = "")
{
return PostRequest(url, param, Encoding.UTF8, cookie);
}
public static string PostRequest(string url, string param, Encoding encoding, string cookie = "")
{
HttpWebRequest request = (HttpWebRequest)WebRequest.Create(new Uri(url));
request.ContentType = "application/x-www-form-urlencoded";
request.UserAgent = "Mozilla/5.0 (MSIE 9.0; Windows NT 6.3; WOW64; Trident/7.0; rv:11.0) like Gecko";
request.Method = "post";
request.Timeout = 30000;
request.KeepAlive = false;
if (!string.IsNullOrEmpty(cookie))
{
request.Headers[HttpRequestHeader.Cookie] = cookie;
}
byte[] bytes = encoding.GetBytes(param);
request.ContentLength = bytes.Length;
using (Stream stream = request.GetRequestStream())
{
stream.Write(bytes, 0, bytes.Length);
}
HttpWebResponse response = (HttpWebResponse)request.GetResponse();
using (Stream stream = response.GetResponseStream())
{
StreamReader reader = new StreamReader(stream, encoding);
return reader.ReadToEnd();
}
}

微信公众帐号获取最新更新微信号kxshzsQQ:519872449 QQ群:77877965开心编程交流群

58和赶集要在一起 剩者为王?!

mikel阅读(1051)

各大媒体都在报道这个消息,58同城和赶集网合并的新闻一下子让58的股价飙升,

“赶集网的用户是我们用户的子集,商户也是我们的子集,产品也是copy我们的,收购这样一家公司没有任何意义。”(详见钛媒体文章《姚劲波谈收购赶集:我们不会收购一个没有意义的公司》)。

过去曾经嗤之以鼻的姚劲波为何要和赶集在一起?

“在两边同时下注和投资了的老虎基金,目前正在积极推动此事。”这一句基本上道破了玄机,资本运作的世界里是没有胜负,只有利润,看来分类信息的大格局基本上已定,老虎基金是最大的赢家,至于分类信息面对BAT的O2O攻势是怎么布局的,就看58以后的动作了,从目前收购了多家O2O的公司来看,基本上都在挖掘本地需求为寻找引爆资本找故事。

对于消费者合并是好事儿,不用发愁哪家的信息全,哪家商家多了,反正都是一家数据共享吧!至于商家来说各有利弊,收费永远都是商家不能言说的痛,尽管合并了可是钱是一分钱都不能少的,想要占据本地分类信息的一角,那就掏腰包吧!从团购的剩者为王的前车之鉴就可以看出来,最终不管谁留下,都少不了要盈利这个不变的主题,说实在的窝窝团我真不知道和美团有什么差别,他俩儿为什么不能走到一起呢?!

 

ORM存储过程和实体类代码生成工具

mikel阅读(1022)

ORM存储过程和实体类生成工具

自己写的一个ORM框架的存储过程和实体类生成工具,具体界面如下:

orm

操作步骤:

1.设置数据库连接:

2.选择要生成的表或视图:

3.选择要生成的存储过程类型:

4.如果是视图需要输入主键名和操作的表:

5.点击生成存储过程,自动创建存储过程到数据库中

6.生成实体类需要输入类名和命名空间:

7.点击生成实体类,可以生成实体类复制文本框中的代码到项目的类文件中保存

 

下载地址:ORMTools

源码下载:http://pan.baidu.com/s/1i37YiIp

 

[转载]如何从SQL Server 中取得字段说明 - Goodspeed - 博客园

mikel阅读(1255)

[转载]如何从SQL Server 中取得字段说明 – Goodspeed – 博客园.

SQL Server 2000

你可以在企业管理器中增加字段说明,也可以使用下面的代码:

EXEC sp_addextendedproperty
MS_Description,
some description,
user,
dbo,
table,
table_name,
column,
column_name

现在,你就可以得到通过下面的代码得到字段说明:

SELECT
[Table Name] = i_s.TABLE_NAME,
[Column Name] = i_s.COLUMN_NAME,
[Description] = s.value
FROM
INFORMATION_SCHEMA.COLUMNS i_s
LEFT OUTER JOIN
sysproperties s
ON
s.id 
= OBJECT_ID(i_s.TABLE_SCHEMA+.+i_s.TABLE_NAME)
AND s.smallid = i_s.ORDINAL_POSITION
AND s.name = MS_Description
WHERE
OBJECTPROPERTY(OBJECT_ID(i_s.TABLE_SCHEMA+.+i_s.TABLE_NAME), IsMsShipped)=0
 AND i_s.TABLE_NAME = ‘table_name’ 
ORDER BY
i_s.TABLE_NAME, i_s.ORDINAL_POSITION

如果你只关心某一张表,那么上面的TSQL中的注释部份对你就非常有帮助。反过来就会给你所有表中的所有字段。

如果你只需要所有有说明的表,你可以把out join 改成 inner join

SELECT
[Table Name] = i_s.TABLE_NAME,
[Column Name] = i_s.COLUMN_NAME,
[Description] = s.value
FROM
INFORMATION_SCHEMA.COLUMNS i_s
INNER JOIN
sysproperties s
ON
s.id 
= OBJECT_ID(i_s.TABLE_SCHEMA+.+i_s.TABLE_NAME)
AND s.smallid = i_s.ORDINAL_POSITION
AND s.name = MS_Description
WHERE
OBJECTPROPERTY(OBJECT_ID(i_s.TABLE_SCHEMA+.+i_s.TABLE_NAME), IsMsShipped)=0
ORDER BY
i_s.TABLE_NAME, i_s.ORDINAL_POSITION

 

SQL Server 2005

在SQL Server 2005 中 sysproperties 表已被废弃,所以上面的代码都不能用。幸运的是他们还是增加了一个系统表给我们 sys.extended_properties,这张表和 sysproperties基本上相似。

SELECT
[Table Name] = OBJECT_NAME(c.object_id),
[Column Name] = c.name,
[Description] = ex.value
FROM
sys.columns c
LEFT OUTER JOIN
sys.extended_properties ex
ON
ex.major_id 
= c.object_id
AND ex.minor_id = c.column_id
AND ex.name = MS_Description
WHERE
OBJECTPROPERTY(c.object_idIsMsShipped)=0
 AND OBJECT_NAME(c.object_id) = ‘your_table’ 
ORDER
BY OBJECT_NAME(c.object_id), c.column_id

和SQL Server 2000一样,你可以使用注释部份来返回某一张表。

Microsoft Access

在Access中,你可以使用下面的ASP代码来得到某一个字段的说明

<%
on error resume next
Set Catalog = CreateObject(ADOX.Catalog)
Catalog.ActiveConnection 
= Provider=Microsoft.Jet.OLEDB.4.0; & _
Data Source=<path>\<file>.mdb

dsc = Catalog.Tables(table_name).Columns(column_name).Properties(Description).Value

if err.number <> 0 then
Response.Write 
&lt; & err.description & &gt;
else
Response.Write 
Description =  & dsc
end if
Set Catalog = nothing
%
>