代码改变世界

[置顶]写在硕士毕业前夕(附个人简历)

2014-11-03 10:45 by stubman, 544 阅读, 0 推荐, 收藏, 编辑
摘要:两年半的研究生生涯已经走到尾声,这两年半实在是有一点忙,上了很多门课,写了很多程序,看了很多论文。。。。以至于到了想找工作的时候,打开过去在智联招聘上的简历才发现原来自己还有一个博客,一直都没有悉心维护。这几天把简历整理了一下,晒晒简历,以后有时间有精力的话还是得多发一些技术相关的博文。 终于... 阅读全文

[置顶]设计模式在软件开发中的应用——2012年 11 月 25 日高级软件工程课程小论文

2014-11-03 10:08 by stubman, 1527 阅读, 0 推荐, 收藏, 编辑
摘要:摘要:设计模式通常是对某一类软件设计问题提出的通用的解决方案,将设计模式引入软件设计和开发过程,目的就在于充分利用已有的软件开发经验,甚至是已有的代码框架。最近一些年,设计模式已经成为软件项目团体中最热门的话题之一,并且经常在社区引起激烈的讨论。本文介绍了设计模式的概念、描述、法则、分类以及程序设计... 阅读全文

Patterns

2012-11-22 11:00 by stubman, 430 阅读, 0 推荐, 收藏, 编辑

 

  1 #region Copyright
  2 /*
  3  File Name(文件名):                      DBFactory.cs
  4  Storage Path(存储路径):                 Core\Ado.Net\
  5  Author(作者):                           Stubman 
  6  File Action describe(文件功能描述):     ADO.NET数据库抽象工厂。
  7  File Memo(备注):
  8  */
  9 #endregion
 10 
 11 using System;
 12 using System.Data;
 13 using System.Reflection;
 14 
 15 namespace Stubman.DBHelper.Ado.Net
 16 {
 17     /// <summary>
 18     /// 数据库抽象工厂摘要说明。
 19     /// </summary>
 20     [Serializable]
 21     public abstract class DBFactory
 22     {
 23         #region 私有字段
 24 
 25         /// <summary>
 26         /// 连接数据库类型
 27         /// </summary>
 28         private DatabaseType _dbType;        //数据库系统类型
 29 
 30         #endregion
 31 
 32         #region 受保护的构造函数
 33         /// <summary>
 34         /// 初始化类型的新实例。
 35         /// </summary>
 36         /// <param name="dbType">数据库系统类型。</param>
 37         protected DBFactory(DatabaseType dbType)
 38         {
 39             this._dbType = dbType;
 40         }
 41         #endregion
 42 
 43         #region 创建具体DataSource的实例
 44 
 45         /// <summary>
 46         /// 创建指定的子类的实例。
 47         /// </summary>
 48         /// <param name="assemblyQualifiedTypeName">子类的完全限定名。</param>
 49         /// <remarks>
 50         /// 应用程序ナイキ ズーム KD 5不直接创建子类的实例,必须调用CreateInstance方法。
 51         /// </remarks>
 52         public static object CreateInstance(string assemblyQualifiedTypeName)
 53         {
 54             Type t = Type.GetType(assemblyQualifiedTypeName, true);
 55             return Activator.CreateInstance(t, true);
 56         }
 57 
 58         #endregion
 59 
 60         /// <summary>
 61         /// 获取此数据源的数据库系统类型。
 62         /// </summary>
 63         public virtual DatabaseType DatabaseType
 64         {
 65             get
 66             {
 67                 return this._dbType;
 68             }
 69         }
 70 
 71         /// <summary>
 72         /// 数据库连接
 73         /// </summary>
 74         /// <param name="connString">数据库连接字符串</param>
 75         /// <remarks>
 76         /// <para>
 77         /// 不同的数据库系统,连接串格式不同:
 78         /// </para>
 79         /// <para>SQL Server数据库:</para>
 80         /// <para>
 81         /// <c>"Data Source=serverName; Initial Catalog=databaseName; User ID=MyUserID; Password=MyPassword;"</c>
 82         /// </para>
 83         /// <para>Oracle数据库:</para>
 84         /// <para>
 85         /// <c>"Data Source=serverName; User ID=MyUserID; Password=MyPassword;"</c>
 86         /// </para>
 87         /// <para>Access数据库:</para>
 88         /// <para>
 89         /// <c>"Data Source=C:\DatabasePath\MmDatabase.mdb; User Id=admin; Password=;"</c>
 90         /// </para>
 91         /// <para>DB2数据库:</para>
 92         /// <para>
 93         /// <c>"Network Transport Library=TCPIP; Network Address=IPAddress; 
 94         ///             Initial Catalog=MyCatalog; Package Collection=MyPackageCollection; Default Schema=MySchema; 
 95         ///             User ID=MyUsername; Password=MyPassword;
 96         /// </c>
 97         /// </para>
 98         /// </remarks>
 99         /// <returns>指定数据源的连接对象</returns>
100         public abstract IDbConnection GetDBConnection(string connString);
101         /// <summary>
102         /// 创建与指定数据源连接相关联的SQL命令对象。
103         /// </summary>
104         /// <param name="dbConn"></param>
105         /// <returns></returns>
106         public abstract IDbCommand GetDBCommand(IDbConnection dbConn);
107         /// <summary>
108         /// 数据库适配器
109         /// </summary>
110         /// <param name="dbCommand"></param>
111         /// <returns></returns>
112         public abstract IDbDataAdapter GetDataAdapter(IDbCommand dbCommand);
113     }
114 }

 

 

 

#region Copyright
/*
 File Name(文件名):                      SqlServerDBFactory.cs
 Storage Path(存储路径):                 Core\Ado.Net\
 Author(作者):                           Stubman 
 File Action describe(文件功能描述):     SqlServer数据库工厂类, 用于定义SqlServer数据库的连接、操作和关闭等。
 File Memo(备注):
 
*/
#endregion

using System;
using System.Data;
using System.Data.SqlClient;
using System.Reflection;

namespace Stubman.DBHelper.Ado.Net
{
    /// <summary>
    
/// SqlServerDBFactory产生SqlServer相关的数据库操作对象。
    
/// </summary>
    [Serializable]
    public sealed class SqlServerDBFactory : DBFactory
    {
        #region 受保护的构造函数
        /// <summary>
        
/// 私有的无参数构造函数。
        
/// </summary>
        private SqlServerDBFactory()
            : base(DatabaseType.DB_SqlServer)
        {
        }
        #endregion

        /// <summary>
        
/// 数据库连接
        
/// </summary>
        
/// <param name="connString">数据库连接字符串</param>
        
/// <returns>指定数据源的连接对象</returns>
        public override IDbConnection GetDBConnection(string connString)
        {
            SqlConnection dbConn = new SqlConnection(connString);
            return (IDbConnection)dbConn;
        }

        /// <summary>
        
/// 创建与指定数据源连接相关联的SQL命令对象。
        
/// </summary>
        
/// <param name="dbConn">数据库连接</param>
        
/// <returns></returns>
        public override IDbCommand GetDBCommand(IDbConnection dbConn)
        {
            try
            {
                if (dbConn.State == ConnectionState.Closed)
                {
                    dbConn.Open();
                }

                return dbConn.CreateCommand();
            }
            catch (SqlException ex)
            {
                throw new ApplicationException(ex.Message, ex);
            }
        }

        /// <summary>
        
/// 数据库适配器
        
/// </summary>
        
/// <param name="dbCommand"></param>
        
/// <returns></returns>
        public override IDbDataAdapter GetDataAdapter(IDbCommand dbCommand)
        {
            return new SqlDataAdapter((SqlCommand)dbCommand);
        }

    }

} 

 

 #region Copyright

/*
 File Name(文件名):                      OracleDBFactory.cs
 Storage Path(存储路径):                 Core\Ado.Net\
 Author(作者):                           Stubman 
 File Action describe(文件功能描述):     Oralce数据库工厂类, 用于定义Oracle数据库的连接、操作和关闭等。
 File Memo(备注):
 
*/
#endregion

using System;
using System.Data;
using System.Data.OracleClient;
using System.Reflection;

namespace Stubman.DBHelper.Ado.Net
{
    /// <summary>
    
/// OracleDBFactory产生Oracle相关的数据库操作对象。
    
/// </summary>
    [Serializable]
    public sealed class OracleDBFactory : DBFactory
    {
        #region 受保护的构造函数

        /// <summary>
        
/// 私有的无参数构造函数。
        
/// </summary>
        private OracleDBFactory()
            : base(DatabaseType.DB_Oracle)
        {
        }

        #endregion

        /// <summary>
        
/// 数据库连接
        
/// </summary>
        
/// <param name="connString">数据库连接字符串</param>
        
/// <returns>指定数据源的连接对象</returns>
        public override IDbConnection GetDBConnection(string connString)
        {
            OracleConnection dbConn = new OracleConnection(connString);
            return (IDbConnection)dbConn;
        }

        /// <summary>
        
/// 创建与指定数据源连接相关联的SQL命令对象。
        
/// </summary>
        
/// <param name="dbConn">数据库连接</param>
        
/// <returns></returns>
        public override IDbCommand GetDBCommand(IDbConnection dbConn)
        {
            try
            {
                if (dbConn.State == ConnectionState.Closed)
                {
                    dbConn.Open();
                }

                return dbConn.CreateCommand();
            }
            catch (OracleException ex)
            {
                throw new ApplicationException(ex.Message, ex);
            }
        }

        /// <summary>
        
/// 数据库适配器
        
/// </summary>
        
/// <param name="dbCommand"></param>
        
/// <returns></returns>
        public override IDbDataAdapter GetDataAdapter(IDbCommand dbCommand)
        {
            return new OracleDataAdapter((OracleCommand)dbCommand);
        }

    }
}

 

 

 /// <summary>

/// 运用template模式实现管理员用户与学生用户的不同登陆动作
/// </summary>
public abstract class Login : Page
{
    protected readonly M_userBo userBo = new M_userBo();
    protected string usrId = string.Empty;
    protected string usrPwd = string.Empty;
   
    /// <summary>
    
/// 绑定用户登陆信息
    
/// </summary>
    
/// <param name="usrid"></param>
    
/// <param name="usrpwd"></param>
    public void BindUserInfo(string usrid, string usrpwd)
    {
        this.usrId = usrid;
        this.usrPwd = usrpwd;
    }
    /// <summary>
    
/// 登陆系统
    
/// </summary>
    
/// <param name="usrid"></param>
    
/// <param name="usrpwd"></param>
    public void LoginIn(string usrid, string usrpwd)
    {
        BindUserInfo(usrid, usrpwd);
        bool loginAdmit = LoginAdmitAndBindSession(usrId, usrPwd);
        Redirect(loginAdmit);
    }
    /// <summary>
    
/// 获得登陆许可,以及绑定相应的Session
    
/// </summary>
    
/// <param name="usrID"></param>
    
/// <param name="usrpwd"></param>
    
/// <returns></returns>
    public abstract bool LoginAdmitAndBindSession(string usrID, string usrpwd);
    /// <summary>
    
/// 跳转到相应的URL
    
/// </summary>
    
/// <param name="loginAdmit"></param>
    public abstract void Redirect(bool loginAdmit);
}
public class AdminLogin : Login
{

    public override bool LoginAdmitAndBindSession(string usrID, string usrpwd)
    {
        PubFunc gongGong = new PubFunc();

        string usrAndPwd = usrId + usrPwd;

        #region 用户名、密码输入合法性判断
        if ((usrAndPwd.IndexOf("'") > 0) || (usrAndPwd.IndexOf("or") > 0))
        {
            gongGong.showMessage("用户名或密码输入不合法.");
            return false;
        }

        if (("" == usrId) || ("" == usrPwd))
        {
            gongGong.showMessage("用户名或密码不能为空.");
            return false;
        }
        #endregion
        
        #region 判断是否获得登陆许可
        ArrayList roleids = new ArrayList();
        M_user usr = new M_user();
        usr.Usr = usrId.ToLower();
        if ("0000" != usrPwd)
        {
            string msg1 = "";
            usr.Userpwd = JiaoYanMa.StrEncrypt(usrPwd, usr.Usr, ref msg1);
        }
        else
        {
            usr.Userpwd = usrPwd;// MD5.GetMd5Code(usrPwd);//加密要用哪个 DES、md5
        }
        Msg msg = new Msg();
        usr = this.userBo.LoadUsr(usr, ref msg);
        if (msg.showMsg != null && msg.showMsg != "")
        {
            gongGong.showMessage(msg.showMsg);
            return false;
        }
        if (usr != null)
        {

            #region 判断角色
            DataTable dtRole = this.userBo.GetUsrRole(usr.Usr, ref msg);

            if (dtRole.Rows.Count < 1)
            {
                gongGong.showMessage("您还未被授任何角色,请与管理员联系!");
                return false;
            }
            else
            {

                foreach (DataRow row in dtRole.Rows)
                {
                    roleids.Add(row["role"].ToString());
                }
               
            }
            #endregion
           
        }
        else
        {
            gongGong.showMessage("用户名或密码输入错误,请重新输入。");

            return false;
        }
        #endregion


        #region 绑定Session值
        Session["Login_Park"] = usr.Park;
        Session["Login_Roleids"] = roleids;
        Session["Login_User"] = usr.Usr;
        Session["Login_UserName"] = usr.Username;
        Session["Login_Skin"] = "blue";
        Session["LoginType"] = "Admin";//管理员身份登陆
        #endregion

        return true;
    }
    public override void Redirect(bool loginAdmit)
    {
        if (loginAdmit)
        {

            System.Web.HttpContext.Current.Response.Redirect("Main.aspx");
        }
    }
}
public class StudentLogin : Login
{
    public override bool LoginAdmitAndBindSession(string usrID, string usrpwd)
    {
        Session["LoginType"] = "Student";//学生身份登陆
        return true;
    }
    public override void Redirect(bool loginAdmit)
    {
        if (loginAdmit)
        {

            System.Web.HttpContext.Current.Response.Redirect("../Main/Letter/Default.aspx");
        }
    }
}

 

 

 

 

   1 using System;

  2 using System.Data;
  3 using System.Configuration;
  4 using System.Web;
  5 using System.Web.Security;
  6 using System.Web.UI;
  7 using System.Web.UI.WebControls;
  8 using System.Web.UI.WebControls.WebParts;
  9 using System.Web.UI.HtmlControls;
 10 using Stubman.Common;
 11 namespace Stubman.Web
 12 {
 13     /// <summary>
 14     /// StaticOptions 的摘要说明
 15     /// </summary>
 16     public class StaticSelectOptions : System.Web.UI.Page
 17     {
 18      
 19         /// <summary>
 20         /// * ********************************************************
 21         /// * 绑定单选下拉框公共方法
 22         /// * 调用示例: 
 23         /// * StaticSelectOptions Option = new StaticSelectOptions();
 24         /// * Option.OptionsBind(selobj, "信件类型");
 25         /// **********************************************************
 26         /// </summary>
 27         public StaticSelectOptions()
 28         {
 29 
 30 
 31         }
 32 
 33 
 34         /// <summary>
 35         /// 根据表名,项名,是否有默认值,是否有空白项,绑定下拉框(HtmlSelect)
 36         /// </summary>
 37         /// <param name="SelObj"></param>
 38         /// <param name="ListName"></param>
 39         /// <param name="ItemName"></param>
 40         public void OptionsBind(HtmlSelect SelObj, string ParamName)
 41         {
 42             SelObj.Items.Clear();
 43             
 44             DataRow[] Rows = LoadParam.GetLoadParam().ParamDT.Select("paramname='" + ParamName + "'""id");
 45             string DEF = string.Empty;//默认值
 46             if (0 == Rows.Length)
 47             {
 48                 return;
 49             }
 50             foreach (DataRow dr in Rows)
 51             {
 52                 if (!dr["DEF"].ToString().Equals("2"))
 53                 {
 54                     SelObj.Items.Add(new ListItem(dr["paramvalue"].ToString(), dr["id"].ToString()));
 55                 }
 56                 if (dr["DEF"].ToString().Equals("1"))
 57                 {
 58                     DEF = dr["id"].ToString();
 59                 }
 60             }
 61             try
 62             {
 63                 if (!string.IsNullOrEmpty(DEF))
 64                 {
 65                     SelObj.Value = DEF;
 66                 }
 67 
 68                 if (Rows[0]["blank"].ToString().Equals("1"))//是否插入空白项
 69                 {
 70                     SelObj.Items.Insert(0new ListItem(""""));
 71                 }
 72             }
 73             catch (Exception)
 74             { }
 75 
 76 
 77         }
 78         /// <summary>
 79         /// 根据表名,项名,是否有默认值,是否有空白项,绑定下拉框(DropDownList)
 80         /// </summary>
 81         /// <param name="SelObj"></param>
 82         /// <param name="ListName"></param>
 83         /// <param name="ItemName"></param>
 84         public void OptionsBind(DropDownList SelObj, string ParamName)
 85         {
 86             SelObj.Items.Clear();
 87             DataRow[] Rows = LoadParam.GetLoadParam().ParamDT.Select("paramname='" + ParamName + "'""id");
 88             string DEF = string.Empty;//默认值
 89             if (0 == Rows.Length)
 90             {
 91                 return;
 92             }
 93             foreach (DataRow dr in Rows)
 94             {
 95                 if (!dr["DEF"].ToString().Equals("2"))
 96                 {
 97                     SelObj.Items.Add(new ListItem(dr["paramvalue"].ToString(), dr["id"].ToString()));
 98                 }
 99                 if (dr["DEF"].ToString().Equals("1"))
100                 {
101                     DEF = dr["id"].ToString();
102                 }
103             }
104             try
105             {
106                 if (!string.IsNullOrEmpty(DEF))
107                 {
108                     SelObj.SelectedValue = DEF;
109                 }
110 
111                 if (Rows[0]["blank"].ToString().Equals("1"))//是否插入空白项
112                 {
113                     SelObj.Items.Insert(0new ListItem(""""));
114                 }
115             }
116             catch (Exception)
117             { }
118         }
119         /// <summary>
120         /// 根据参数名获得该项目参数的数据集
121         /// </summary>
122         /// <param name="ParamName"></param>
123         /// <returns></returns>
124         public DataTable GetOptionsDataByParamName(string ParamName)
125         {
126             if (LoadParam.GetLoadParam().ParamDT != null)
127             {
128                 DataTable dt = LoadParam.GetLoadParam().ParamDT.Clone();
129                 DataRow[] Rows = LoadParam.GetLoadParam().ParamDT.Select("ParamName='" + ParamName + "'""id");
130                 foreach (DataRow dr in Rows)
131                 {
132                     dt.ImportRow(dr);
133                 }
134                 return dt;
135             }
136             else
137             {
138                 return null;
139             }
140         }
141         /// <summary>
142         /// 由id获取paramvalue
143         /// </summary>
144         /// <param name="id"></param>
145         /// <param name="ListName"></param>
146         /// <param name="ItemName"></param>
147         /// <returns></returns>
148         public string GetOptionNameByID(object id, string ParamName)
149         {
150             if (!CanShuPanDuan.ShiFouKong(id))
151             {
152                 DataTable dt = GetOptionsDataByParamName(ParamName);
153                 DataRow[] Rows = dt.Select("id='" + id.ToString() + "'");
154                 if (Rows.Length > 0)
155                 {
156                     return Rows[0]["paramvalue"].ToString();
157                 }
158                 else
159                 {
160                     return "";
161                 }
162             }
163             else
164             {
165                 return "";
166             }
167 
168         }
169         /// <summary>
170         /// 由id获取paramvalue
171         /// </summary>
172         /// <param name="id"></param>
173         /// <param name="ListName"></param>
174         /// <param name="ItemName"></param>
175         /// <returns></returns>
176         public string GetOptionNameByID(object id)
177         {
178             if (!CanShuPanDuan.ShiFouKong(id))
179             {
180 
181                 DataRow[] Rows = LoadParam.GetLoadParam().ParamDT.Select("id='" + id.ToString() + "'");
182                 if (Rows.Length > 0)
183                 {
184                     return Rows[0]["paramvalue"].ToString();
185                 }
186                 else
187                 {
188                     return "";
189                 }
190             }
191             else
192             {
193                 return "";
194             }
195 
196         }
197        
198     }
199 }

 

  1 using System;

 2 using System.Collections.Generic;
 3 using System.Web;
 4 using System.Data;
 5 using System.Threading;
 6 using MailManage.Business;
 7 namespace Stubman.Web
 8 {
 9     /// <summary>
10     ///LoadParam 的摘要说明
11     /// </summary>
12     public class LoadParam
13     {
14         private static LoadParam loadParam;
15         private DataTable _paramDT = new DataTable();
16         public LoadParam()
17         {
18             _paramDT = new M_paramBo().GetDataTable(); 
19         }
20         public static LoadParam GetLoadParam()
21         {
22             if (loadParam == null)
23             {
24                 //通过双检锁模式支持多线程应用
25                 Mutex mutex = new Mutex();
26                 mutex.WaitOne();
27                 if (loadParam == null)
28                 {
29                     loadParam = new LoadParam();
30                 }
31                 mutex.Close();
32             }
33             return loadParam;
34         }
35 
36         public DataTable ParamDT
37         {
38             get
39             { 
40                 return _paramDT;
41             }
42         }
43        
44     }
45 
46 }

个人电子商务网站建设之——整站静态化实现的选择、设计与实现(二):静态页面的实现方式;

2011-09-05 19:07 by stubman, 915 阅读, 0 推荐, 收藏, 编辑
摘要:本系列文章记录近期本人开发过程中与静态化页面有关的内容与心得,整个系列分为,本篇为第二篇,目录如下:个人电子商务网站建设之——整站静态化实现的选择、设计与实现(一):选择静态实现; 个人电子商务网站建设之——整站静态化实现的选择、设计与实现(二):静态页面的实现方式; 个人电子商务网站建设之—... 阅读全文

电子商务网站建设过程中的一次需求分析及开发心得

2011-07-15 09:15 by stubman, 2012 阅读, 5 推荐, 收藏, 编辑
摘要:时间用.NET+MYSQL开发了一个电子商务网站,根据客户(兼朋友)提供的需求,实现最简单的一些功能。产品分类设置,上传产品,网站参数配置,订单处理,邮件配置,静态页面生成,JS实现静态页面购物车功能,以及一系列必须的功能。麻雀虽小五脏俱全,整个系统从无到有,需求分析及编写,数据库结构设计,编码以及... 阅读全文

MetaWeblog API调用

2011-05-17 14:28 by stubman, 3987 阅读, 5 推荐, 收藏, 编辑
摘要:在网上闲逛,突然对博客的接口感兴趣,经考察,多数博客都对metaWeblog Api 提供了支持,虽然windows live writer是好用,不过出于对这个接口的好奇,也想自己做个能发博客的小工具. 到处浏览资料,用了一个下午终于成功发布了一篇简陋版博客:)。其实很简单,方法对了很快就连上了。 MetaWeblog API中文说明 1、什么是MetaWeblog API? MetaWeblog API(MWA)是一个Blog程序接口标准,允许外部程序来获取或者设置Blog的文字和熟悉。他建立在XMLRPC接口之上,并且已经有了很多的实现。 2、基本的函数规范 有三个基本的函数规范: me 阅读全文

【又拍图片相册跨分页下载图片/本地图片】合并及文字水印——淘宝开店过程中的技术应用【提供源代码下载】

2011-04-11 09:27 by stubman, 3490 阅读, 19 推荐, 收藏, 编辑
摘要:淘宝编程相关文章请阅读: 淘宝开店过程中的技术应用——【线程池】实现【图片下载】 开淘宝店的一次大批量宝贝图片替换 闲话不多说,直接进入主题,做淘宝店的过程中,最麻烦的事情,我认为是上传产品图片并且编辑到产品描述中,就拿我拿来做示例的鞋子来说吧,一款鞋有15种配色,每种配色的有大约10张实拍图,那么这意味着有150张图片要等着处理。而这只是一个产品,一个店铺最起码也得几十个产品吧,很是麻烦。有没有比较简单的处理方法呢,我悄悄的告诉你,我已经在用了哈~现在分享给大家,也许您没有开淘宝店,或者目前没有这个需要,不过也可以看看,说不定哪天能用到呢。我的方法是,把所有的图片竖向合并到一张图片上,那样. 阅读全文

淘宝开店过程中的技术应用——【线程池】实现【图片下载】

2011-03-16 09:47 by stubman, 4514 阅读, 15 推荐, 收藏, 编辑
摘要:在开淘宝店过程中需要批量下载图片时,利用【线程池】实现多线程【图片下载】功能,解决问题,这篇文章主要介绍此功能的实现细节。 工具主要可以细分为以下几个子部分: 1、读取excel中数据,提取数据中的图片URL 2、利用【线程池】实现多线程访问URL 3、将提交HTTP请求得到的图片保存到本地硬盘1、读取excel中数据,提取数据中的图片URL将需要进行处理的数据保存到excel文档中,作者为了图方便,就保存在第一列中,程序中访问的时候,直接读取第一列就行。 隐藏行号 复制代码 ? 代码 static DataTable ExcelToDT(string Path, stri... 阅读全文

开淘宝店的一次大批量宝贝图片替换

2011-03-15 10:16 by stubman, 12103 阅读, 18 推荐, 收藏, 编辑
摘要:开淘宝店最基本的要有自己的“宝贝”【店里要经营的商品】,宝贝怎么发,开过淘宝店的朋友应该都知道,没开过这里也说一说,很简单:1、填写商品名称、属性等信息;2、编写宝贝描述;其中,编写宝贝描述可以说是很让人头疼的一件事。。需要有自己的图片还不够,还需要上传到自己的图片空间,然后应用HTML进行排版,最后发布。商品想吸引人当然得把宝贝描述做好,特别是细节图要多,这个就麻烦了,需要上传N多图片,然后一个一个对链接,替换,我的开店过程中就遇到了,被整的半死,最后写程序解决,本文说的就是这么一遭,希望对同志们解决类似问题在思路上有所帮助。 PS:别指望能完全照搬我的代码,一劳永逸,此代码乃量身定制,不多 阅读全文

初探SEO,BSP收录速度测试

2011-03-10 08:50 by stubman, 1077 阅读, 2 推荐, 收藏, 编辑
摘要:最近对SEO很有兴趣,看了一些资料,做了一些小的尝试。昨天突然想看看哪个BSP博客的收录速度快,就做了一个小实验。将去年写的文章:Reminder[短信提示工具]开发碎碎念。。。附带感谢移动[smtp.139.com]提供的免费午餐。。发到百度,搜狐,几个大博客上去。早上起来一看,发到百度空间上的被收录的太快了。。 见图:下午发的,一早起来看,居然16小时前就收录了,感慨一下百度空间果然是主场作战,呵呵。另外还有一个奇怪的现象,上图也打了红圈圈,这篇文章绝对是在博客园首发的,被一些小站转载过去,居然发在博客园的文章排在最后一个。。收录日期居然是2011-2-26。照理来说,博客园的权重应该不至 阅读全文

Reminder[短信提示工具]开发碎碎念。。。附带感谢移动[smtp.139.com]提供的免费午餐。。

2010-08-31 22:31 by stubman, 2958 阅读, 8 推荐, 收藏, 编辑
摘要:Reminder是我最近开发的一个股票行情短信提示软件(刚做完,还是不够稳定。。)。开发这个小东东的想法缘起前段时间在首页看到一篇介绍开放Web Service的文章,其中有个Web Service就是获取实时股票行情的,看到后突然有了做个行情短信提示软件的想法,主要也是由于个人需求驱动,接着。。。革命开始了。。 Reminder的基础功能很简单: 1、实时获取股票行情; 2、根据股票行情判断是否需要进行提示; 3、发送短信提示; 可是做起来也挺花时间。。。。接下来逐一介绍吧,这里主要提供思路,代码比较简单,也完成的比较仓促,就不全发了。 1、获取股票行情 虽然做Reminder的想法缘起W. 阅读全文

腾讯。。。对Linux的支持程度直接扼杀了Linux在国内用户群的增长

2010-07-29 17:58 by stubman, 391 阅读, 0 推荐, 收藏, 编辑
摘要:折腾了半天,想把QQ稍微高点的版本安装到Linux下的Wine下,最后终于宣告放弃,QQ For Linux实在是太不稳定,太低端,太不友好了。。。将就着用吧,5分钟居然崩溃了3次。。。。实在没办法,只好用WebQQ了。最近流行批评腾讯,不过我不是这个意思,我只是希望腾讯能对Linux多一点支持。让选择Linux的人们也可以开开心心的聊天~~ 阅读全文
点击右上角即可分享
微信分享提示