ant's profilemicroantPhotosBlogListsMore Tools Help

Blog


    March 03

    换博客喽

    看着baidu的空间不错,欢迎大家来踩
    http://hi.baidu.com/microanty

    September 14

    无题

    岁月匆匆无情,虽说没有催人老的这种感慨,时间却也不知不觉从指尖悄悄溜走。

    一直在想,自己 抓住了什么,自己得到了什么,是不是自己想要的,是不是自己喜欢的。

    自己失去了什么,是不是不再需要的,或许是不是现在紧缺的。

    人在轻松自在的时候很难去思考,难怪苏格拉底会成为哲学家,压力之下,人总是要思考的。"假如你的妻子是善良的,你就是一个幸运儿……"。很显然,我是不会成为哲学家的了。但是老苏给了我们一个很豁达的想法,一种大度,也是一种情怀。

    过一些时间,总想驻足一下,回头看看自己或深或浅的脚印,记录一下,聊以自慰。

    论论国家大事,银行调息了,猪肉降价了,安倍辞职了,老帕西游了,马上毕业了,学校开学了,食堂涨价了……请务必记住,这是一个大环境,大环境下的个人行动,总会有联系的吧。

    最近,周围的兄弟都在发飙,偶是这么认为滴。老杨终于买了自行车,chao哥在学校与广大MM打成一片,P哥也开始沐浴了不一样的阳光,我呢,则是中规中矩,一个哗哗响却没铃铛的自行车,"奔波"在校园里。

    首先,祝福P哥,以及P哥滴那位一直没看见尊容滴嫂子。说句心里话,就这么过就行了,哈哈。不过这个重色轻友滴老哥,到现在都没见个图呢都。我建议发动一批再烟滴同志,在老杨滴带领下,掀起一波跟踪+偷拍滴狗仔高潮,充分显示人民群众是不可战胜地。玩笑归玩笑,希望能有时间聚聚。

    老杨,要啥自行车啊,不知道上周那个20公里是不是让你放弃了单车去拉萨滴想法。但是,骑车到这来这一步时务必要实施滴,来了请你米西,8过D40要拿来爽爽,还没玩过单反呢。建议再上个长焦镜头,哈哈。其实,挺想骑车去西行滴,无奈兄弟我是一俗人,理想之前现实更重要一点。现在不骑,以后估计也就没有耐力和体力了。So,又做了一个梦,等咱有了大米,咱就整个陆虎开到伊拉克去,暂且叫理想吧,呵呵。

    Chao哥,汉子,爷们,兄弟,啥都不说了。你小日子挺滋润,上次到我家没能够让你进门,哈哈。暑假又没能去看看你,8过,兄弟有空一定去吃你一顿,看看你的安乐窝。

    又开学了,又交钱了,有一批新生入学了。没曾想,暑期居然要起了电费,faint,这群人总能制造出点事端出来,忍了。老规矩,偶很不舍得滴祭出自己的零钱罐,狠狠心把近乎所有的钢蹦拿了出来。这次楼下阿姨似乎很不乐意,why,数钱难道不好玩吗。

    前天,被神秘招聘,号称薪水不菲。没曾想,要做waigua,我滴神,的确很好玩啊。8过,精力不够,时间不够,8是长期,最重要滴,在咨询偶滴法律顾问后,偶觉得不妥,不妥。waigua滴不做。热身滴目的达到了,路在远方,不在此时,此地。

    洋洋洒洒,松松散散,看的累的就批一句,看不惯的就说一声,总之,有人捧场就行了。

    这几天,在三叶的花中无意之间找到了四个叶,难不成就是传说中的四叶草,希望她能带来运气,能让她顺利通过明后天的司考,真诚祈愿……

    September 07

    九月

    在这个九月的阴郁的下午
    我想要离开这浮躁的城市
    我决定去海边看一看落日
    让秋日的海风使我清醒

    我想到昨天风吹动的夜晚
    坐在我身边我所有的朋友
    岁月让我们已变得沉默
    没有人再会谈论明天

    有一些希望和理想
    总在心里是最美的旋律
    可如今这真实的生活
    却演奏着那纷乱的节奏

    就好像战争这对手是自己
    至少我现在已决不会逃避
    那理想的彼岸也许不存在
    我依然会走在那旅途上

    有一些希望和理想
    总在心里是最美的旋律
    可如今这真实的生活
    却演奏着那纷乱的节奏
    有一些希望和理想
    总在心里是最美的旋律
    到如今它再一次响起
    又飘荡着在我心里

    August 25

    gridview存储过程分页(二)

    在服务器端主要是初始化gridview,也就是第一页。然后就是页码按钮的处理事件,代码如下:
    protected void Page_Load(object sender, EventArgs e)
        
    {
            
    if (!IsPostBack)
            
    {
                BindGV(
    this.gvTest, "A101"5,11"CID""CID"null);

                
    this.lbtnPrev.Enabled = false;
                
    this.lblCurrentInfo.Text = "1";
                
    this.lblCount.Text =  getPageNum("A101"5).ToString() ;
            }

        }


        
    public int getPageNum(string tableName, int pagesize)
        
    {
            
    using (SqlDataObject sodo = new SqlDataObject())
            
    {
                
    string strSql = "select count(*) from " + tableName;
                
    int count =Convert.ToInt32(sodo.ExecuteScalar(strSql));

                
    int pagenum =Convert.ToInt32(Math.Ceiling(Convert.ToDouble(count/pagesize)));

                
    return pagenum;
            }

        }


        
    /**//// <summary>
        
    /// 按钮处理事件
        
    /// </summary>
        
    /// <param name="sender"></param>
        
    /// <param name="e"></param>

        public void PageIndex_Changed(object sender, EventArgs e)
        
    {
            LinkButton linkbtn 
    = (LinkButton)sender;
            
    switch (linkbtn.ID.Trim())
            
    {
                
    case "lbtnFirst":
                    BindGV(
    this.gvTest, "A101"511"CID""CID"null);

                    
    this.lblCurrentInfo.Text = "1";

                    
    break;
                
    case "lbtnPrev":

                    BindGV(
    this.gvTest, "A101"5, Convert.ToInt32(this.lblCurrentInfo.Text) - 11"CID""CID"null);

                    
    this.lblCurrentInfo.Text = (Convert.ToInt32(this.lblCurrentInfo.Text) - 1).ToString();


                    
    break;
                
    case "lbtnNext":

                    BindGV(
    this.gvTest, "A101"5, Convert.ToInt32(this.lblCurrentInfo.Text) + 11"CID""CID"null);

                    
    this.lblCurrentInfo.Text = (Convert.ToInt32(this.lblCurrentInfo.Text) + 1).ToString();



                    
    break;
                
    case "lbtnLast":
                    BindGV(
    this.gvTest, "A101"5, Convert.ToInt32(this.lblCount.Text), 1"CID""CID"null);

                    
    this.lblCurrentInfo.Text = this.lblCount.Text;

                    
    break;
            }

            
    if (Convert.ToInt32(this.lblCurrentInfo.Text) >= Convert.ToInt32(this.lblCount.Text) && Convert.ToInt32(this.lblCurrentInfo.Text) <=1)
            
    {
                
    this.lbtnPrev.Enabled = false;
                
    this.lbtnNext.Enabled = false;
                
    this.lbtnFirst.Enabled = false;
                
    this.lbtnLast.Enabled = false;
            }

            
    else if (Convert.ToInt32(this.lblCurrentInfo.Text) >= Convert.ToInt32(this.lblCount.Text))
            
    {
                
    this.lbtnPrev.Enabled = true;
                
    this.lbtnNext.Enabled = false;
                
    this.lbtnFirst.Enabled = true;
                
    this.lbtnLast.Enabled = false;
            }

            
    else if (Convert.ToInt32(this.lblCurrentInfo.Text) <= 1)
            
    {
                
    this.lbtnPrev.Enabled = false;
                
    this.lbtnNext.Enabled = true;
                
    this.lbtnFirst.Enabled = false;
                
    this.lbtnLast.Enabled = true;
            }

            
    else
            
    {
                
    this.lbtnPrev.Enabled = true;
                
    this.lbtnNext.Enabled = true;
                
    this.lbtnFirst.Enabled = true;
                
    this.lbtnLast.Enabled = true;
            }

                    
            
        }


        
    /**//// <summary>
        
    /// 绑定到gridview
        
    /// </summary>
        
    /// <param name="gv">gridview</param>
        
    /// <param name="tableName">分页的表名</param>
        
    /// <param name="size">页码大小</param>
        
    /// <param name="pageindex">第几页</param>
        
    /// <param name="isAsc">升降序</param>
        
    /// <param name="OderColumName">排序的列</param>
        
    /// <param name="KeyID">主键</param>
        
    /// <param name="condictions">查询条件</param>

        private void BindGV(GridView gv, string tableName, int size, int pageindex, int isAsc, string OderColumName,string KeyID, string condictions)
        
    {
            
    using (SqlDataObject sodo = new SqlDataObject())
            
    {
                SqlParameter[] sps 
    = new SqlParameter[7];
                sps[
    0= new SqlParameter("@TableName", tableName);
                sps[
    1= new SqlParameter("@PageSize", size);
                sps[
    2= new SqlParameter("@PageIndex", pageindex);
                sps[
    3= new SqlParameter("@IsAsc"1);
                sps[
    4= new SqlParameter("@OderColumName", OderColumName);
                sps[
    5= new SqlParameter("@KeyID", KeyID);
                sps[
    6= new SqlParameter("@Conditions", condictions);
     
       
               DataTable dt = sodo.getDataTable("sp""sp_CTE", sps);
                gv.DataSource 
    = dt.DefaultView;
                gv.DataBind();
            }

        }
     

    gridview存储过程分页(一)

         抽空写一下自己用的关于GridView存储过程分页的代码,优点就不用多说了,主要是用于数据库端分页,解决数据量过大的分页问题。存储过程还是以前写的CTE方法的分页,还是在这里贴一下代码吧,具体请见存储过程分页实现代码,2005 T-SQL新增功能一文。
    USE [WGSMSDbase]
    GO
    /**//****** 对象:  StoredProcedure [dbo].[sp_CTE]    脚本日期: 08/25/2007 11:39:01 ******/
    SET ANSI_NULLS ON
    GO
    SET QUOTED_IDENTIFIER ON
    GO


    -- =============================================
    --
     Author:        <Author,,microant>
    --
     Create date: <Create Date,,20070705>
    --
     Description:    <Description,,CTE分页>
    --
     =============================================
    CREATE PROCEDURE [dbo].[sp_CTE]
        
    -- Add the parameters for the stored procedure here
        @TableName nvarchar(200= 'testTable',    --表名
        @PageSize int = 15,        --页面大小
        @PageIndex int =2    ,    --页面的序号
        --@IsCountNull bit =1,    --返回记录是否为空
        @IsAsc bit = 1    ,    --是否卫升序,升序为1,降序为0
        @OderColumName nvarchar(200= null,        --排序字段名
        @KeyID nvarchar(50= 'id',        --主键
        @Conditions nvarchar(500= null --查询条件
    )
    AS

        
    -- SET NOCOUNT ON added to prevent extra result sets from
        -- interfering with SELECT statements.
        SET NOCOUNT ON;

        
    declare @strSql nvarchar(1000)
        
    declare @tempstr nvarchar(1000)
        
    declare @orderstr nvarchar(400)
        
    declare @ctestr nvarchar(400)
        
        
    --判断排序方式,@IsAsc =1 升序, 0降序,设置排序语句
        if @IsAsc = 1
        
    begin
            
    if(@OderColumName is null or @OderColumName = '')
                
    set @orderstr = ' order by ' + @KeyID + ' asc'
            
    else
                
    set @orderstr = ' order by ' + @OderColumName + ' asc'
        
    end
        
    else
        
    begin
            
    if(@OderColumName is null or @OderColumName = '')
                
    set @orderstr = ' order by ' + @KeyID + ' desc'
            
    else
                
    set @orderstr = ' order by ' + @OderColumName + ' desc'
        
    end
        
        
    --CTE
        set @ctestr ='with Table_CET
        as
        (
            select 
                CEILING((ROW_NUMBER() OVER (
    ' + @orderstr + '))/' + str(@PageSize+ ') as page_num, * 
            from 
    ' + @TableName +
        
    ')' ;
        
    begin
        
    if(@Conditions is null or @Conditions = '')
            
    set @strSql = @ctestr + 'select * from Table_CET where page_num = ' + str(@PageIndex);
        
    else
            
    set @strSql = @ctestr + 'select * from Table_CET where page_num = ' + str(@PageIndex)+ ' and ' + @Conditions;
        
    print @strSql
    end    
        
    begin
            
    exec sp_executesql  @strSql
        
    end



    客户端代码如下,主要包含首页,末页,上一页,下一页,当前页码,总页码等一些必要信息,最主要的就是给按钮添加处理事件OnClick。
    August 23

    关于updatepanel中注册执行javascript

        好些天都在糊里糊涂,最近也比较懒,居然看到了个留言,永远不更新的博客一等奖,相当尴尬,哈哈。写一些最近自己或别人遇到的小问题吧。
        1、关于updatepanel注册js
          最近在项目里需要用到altas,本人也是新手,老用最简单的updatepanel,在注册脚本时也遇到了困难,无法注册。本来是在updatepanel中放了一个gridview,偶想在girdview中一个模板列点击弹出一个窗体,注册 window.open()来解决问题。本来不是在updatepanel中,所以用 ClientScript.RegisterStartupScript直接注册挺好使。
          在拖入updatepanel后发现无法注册脚本,想想RegisterStartupScript本来是在页面加载时启动js的,在updatepanel中部分刷新,肯定是无法注册的。
        后来发现了ScriptManager.RegisterStartupScript方法,挺好使,呵呵。
         ScriptManager.RegisterClientScriptBlock(UpdatePanelName, typeof(UpdatePanel), "标识key", "脚本", true);
        下面是一个demo,模板列定义如下:


    protected void gvClientInfo_RowCommand(object sender, GridViewCommandEventArgs e)
        {
    & nbsp;       
    //如果是linkButton被点击
            if(e.CommandName.Equals("linkbtnCID"))
            {
                LinkButton lbtn 
    = (LinkButton)e.CommandSource;
                GridViewRow dgRow 
    = (GridViewRow)lbtn.Parent.Parent;
                
    string tmpText = lbtn.Text.ToString();          
                tmpText 
    ="window.open('customerDetailsInfo.aspx?CID=" + tmpText + "' ,'newwindow','height=550,
                    width=700, menubar=no ')
    ";
                ScriptManager.RegisterStartupScript(
    this.UpdatePanel2, this.GetType(), "click", tmpText, true);      
          
            }
        }


        2、关于RegisterStartupScript,RegisterClientScriptBlock 

          RegisterStartupScript 将 js嵌入到页面的底部,</form> 的前面< br />         RegisterClientScriptBlock 将 js嵌入到页面中开启元素 <form> 后面

        3、关于“该行已经属于另一个表”错误
           这个问是出现在不同dataTable之间的行复制出现的问题。
           看这个代码:

     DataTable tmpdt = sodo.getDataTable("text", strSql, sp);             
     dt.Rows.Add(tmpdt.Rows[
    0]);
         
           这个明显的错误就是tmpdt的行是一个对象引用,相当于一个指针,错误是难免的,可有以下解决办法:< br />
    DataTable tmpdt = sodo.getDataTable("text", strSql, sp);             
    1、 dt.Rows.Add(tmpdt.Rows[
    0].ItemArray);
    2、 dt.ImportRow(tmpdt.Rows[0]);

    July 02

    搬家了

        亲爱的兄弟姐妹们,感谢这些时间来对偶blog的支持。
        偶现在在博客园安了一个新家,暂时不再space混了,欢迎来访。
    June 29

    传说中微软EPG老大让秘书发给所有员工的邮件[转]


      思考1 : 大局上面仍然有另一个大局

      思考2 : 公平永远有不同角度的公平

      思考3 : 这个游戏只有站在切换器旁边的人可以决定结果
     
      有一群小朋友在外面玩 而那个地方有两条铁轨

      一条还在使用, 一条已经停用

      只有一个小朋友选择在停用的铁轨上玩

      其它的小朋友全都在仍在使用的铁轨上玩

      很不巧,火车来了(而且理所当然的往上面有很多小孩的,仍在使用的铁轨上行驶)

      而你正站在铁轨的切换器旁,因此你能让火车转往停用的铁轨

      这样的话你就可以救了大多数的小朋友; 但是那名在停用铁轨上的小朋友将被牺牲

      你会怎么办?

      据说大多数人会选择救多一些的人,换句话说,牺牲那名在停用铁轨上玩的小孩...

      但是这又引出另一个问题

      那一名选择停用铁轨的小孩显然是做出正确决定

      脱离了他的朋友而选择了安全的地方

      而他的朋友们则是无知或任性的选择在不该玩耍的地方玩

      为什么做出正确抉择的人要为了大多数人的无知而牺牲呢?

      [响应与挑战]

      这篇文章蛮发人深省的,看完了感触很深!

      我们常被教育要顾全大局,但公平吗?

      似乎当大家都做的理所当然的时候,

      我们就必须随波逐流,否则就会被放逐而不容于世,

      如渔父中那位老翁劝屈原所说的:

      世人皆浊,何不淈其泥而扬其波?

      众人皆醉,何不餔其糟而歠其醨?

      何故深思高举,自令放为?

      当一个人太坚持自己是"对"的,

      最后的下场可能就是被牺牲的可怜鬼!

      又有谁会为他掬一把同情之泪? 只会嘲笑他的愚蠢!

      我们已经进了社会,学习的就是圆滑的做人,

      当你是主管, 就像文章中那位切换轨道的人,

      内心的正义与现实冲突时, 你会如何抉择呢?

      不过- 换另一个角度,如不选择切换轨道

      因为,那群小朋友一定知道那是活的轨道

      所以,当他们听到火车的声音时,就会知道要跑!

      但若,将轨道切换后那个乖小孩必定惨死,

      因为,他从来没想过火车还会开到废轨道上

      所以,你认为呢?

       或许这样的想法与理念,

      到了人老时才会发现

      自己成为一个不断被牺牲的可怜鬼,

      但这个社会又为什么要把是与非颠倒来又颠倒去呢?

      另外,再想想,一条铁道会被停止使用,自由它的道理。

      是否代表着这个铁道本身有问题,未经验证就使用它会遇到潜藏的危机呢?

      如果切过去之后,被牺牲的就不只是一个或一群小孩了,

      而是整车的乘客呢?

    June 09

    雁儿落带过得胜令

    雁儿落带过得胜令


    [作者]无名氏

    一年老一年,一日没一日,一秋又一秋,一辈催一辈.

    一聚一离别,一喜一伤悲。

    一榻一身卧,一生一梦里。

    寻一夥相识,他一会咱一会,都一般相知,吹一回,唱一回。

    曲牌名。《雁儿落》较少单独使用,一般与《得胜令》或《清江引》连成带过曲。《得胜令》可以单独使用,也可与《雁儿落》连成带过曲。《雁儿落》又称为《平沙落雁》,《得胜令》又称为《阵阵赢》、《凯歌曲》。《雁儿落》四句,句式为四个五字句,押四平仄韵。《得胜令》八句,句式为四个五字句,两个二、五句。押七个平仄韵。

    曲 谱

      平平仄平平。平平仄平,仄平平
      仄仄平仄仄平仄平平仄,平平仄仄。平仄平平。平,平平仄去

    May 29

    五月印象

           松松散散,零零落落,忙忙碌碌,昏昏的五月马上就要过去。说起今年五月的印象很特别,特别的恍惚。
           临海的原因让原本可以提前的春天都滞留在了五月,五月的初期都在赞叹春天的魅力,自然的呼唤让娇嫩的花儿悄悄的开放,继而争奇斗妍。
           五月,飘香的季节,回味回味这个印象……
    五月印象之婚宴——
           喜事当头,总要先提起的,呵呵。
           五月好似天天都是好日子,结婚的好日子。
           自己没结过什么婚(说的很谦虚,但的确事实如此哈),不知道结婚什么感觉,但是通过参加的婚宴也至少品出点什么东西来。师姐师兄的婚宴都去串了串,能帮忙的就帮点忙。感觉结婚真不是一件很容易的事,婚前忙活那么多,家里家外,两个人晕头转向的为了那仪式的几个小时。过后呢,该上班上班,该工作工作。
           一个仪式承受了太多的期待,父母、亲人、朋友、领导、同事,在宣称一对有情人的结合。仪式之后就好像更成熟了,师姐师兄对偶的感觉至少是这个样子的。倒突然想起来偶在他入大学的校门就感觉自己已经不是小孩子了一样,类比类比。
           人生就是一场旅途,婚姻可是一个不小的站点。说到旅途,我们都在路上……
    五月印象之差旅——
           第一次出差,也就是第一次拿着不是自己的钱出远门。
           记得小时候老爸出差,临走之前总是穿得有模有样的,记忆里老是在我睡眼朦胧里回到家里来,基本上都会带回一些小零食,糖块或什么的,让睡意一扫而光。时间总是过得那么快,转眼间而已。小时的记忆都是老爸手里的皮包,总是迫不及待的去拉开包上的拉链,现在想想,老爸那种疲惫的眼神去越来越深刻。
           这次去的地方不远,却也不近。早早起了床,上来总是兴致勃勃,上车之后的旅程让这种兴致慢慢消磨。上来还和王老师一直在聊,聊他那时的大学,聊现在的大学,感觉到是一代不如一代。慢慢的,两人脸对着脸也不愿说一句话了,呵呵,宁愿去看窗外一成不变的风景。
           到了目的地,匆匆的吃了点饭,没有什么休憩直奔单位,直奔主题。发现在一个陌生的环境里更容易融入到自己的角色。迅速的寻找自己想要的东西,聚焦关键点,一下午下来到没什么感觉。从那个庞然大物里走出来时候,居然下了一点点地小雨,让昏昏沉沉的天空至少有了一点清凉的感觉。看到老师都坐在了大楼前的石阶上才感觉自己的双腿也已经发胀,双脚也有了沉沉的感觉。
           本来晚上想出去走走的,顺便看一下这里的亲戚,无奈中国式接待总是那么好客,总是那么周到。又去直奔下一个主题——吃饭,说是吃饭,也只能说吃饭只是其中的一部分,好在我把它当作了主要部分。不过天南地北倒也学到不少的东西,也锻炼了口才,锻炼了思维,也是不错的学习机会。
           一顿饭吃了四个多小时,饭后就是休息了。非常惭愧自己住了个单间,洗个澡之后开窗看着这个城市的夜景,说实话不是太喜欢,不是我喜欢的特别吵,也不是我喜欢的特别静。都不记得自己是怎么睡着的了,总之,醒来已经是第二天清晨了,赶快踏上了归程。
           当双脚落地的时候,感觉到现在这个小城的环境还是那么好,那么清新。生活又在继续,差旅宣告结束。
           有意思的是记得路过淄博证券交易所,前面不小的广场上塞满了自行车,密密麻麻,看着多赛一只脚都困难。身旁的王老师笑称看到这就知道中国的股市炙手可热,的确热,专业术语叫牛市……
    五月印象之牛市——
           晓知牛市熊市之类的词语是在十多年前了,当时中国股市刚刚起步。
           中间不知什么时候看了一部好像叫做《股市人生》的电视剧,从中学到了短线,散户,大户,绩优股等一系列名词,也慢慢了解了什么A股,B股,ST板块什么的名词(注:仅限于名词),但至今也搞不懂什么是什么。
           好像前几年接触到了基金这个名词,后来姐夫去了华夏工作,一直没搞明白基金是什么东西,只知道肯定和钱有关,金融上的东西谁又能搞得明白呢。现在才知道基金可以分很多种类,并且现在最热的基金叫做证券投资基金。
           中国股票基金都在大热,不知道为什么,我也不学经济,大道理明白,具体倒搞不懂,并且理论和现实还拖了节,不知道现在到底是不是有所说的泡沫。
    偶被教育着基金是一种理财方式,看基金要看本身的价值,长期投资,长期获利。现实中偶却看到大家都在用一天赚了多少来衡量,现在都在指着股票和基金能帮忙大赚一笔。前些天看杨百万在电视里说他们这种老股民没在这次大潮中赚到多少,中国财经报道中大批基金经理也在那红着眼睛说最怕牛市,一些专家都在呼吁着不要让基金经理短期化,竞争机制不正确,等等等。
    偶这些都搞不明白,但是比较现实的就是所有的价值都是通过生产产生的,在中国经济人物中东部沿海的都在搞资本操作(献丑了,请专业人士指正)。钱能生出钱,钱也生不出钱,希望GDP和大便联系不那么密切。也衷心希望股市能一直平稳的牛下去。
    赚钱不是我们的梦想,却是我们实现梦想的阶梯。我们今天挤公交车,是因为明天不再想挤公交车……
    五月印象之工作日半晌的公交车——
           今天特殊原因,大晌午的就出去帮人整东西,感觉做工程的人真不容易,当然作研发更不容易。
           回来的时候本想着工作日,又不是饭点,公交车不会太挤,结果发现自己想错了。然后自己又想错了,车上大部分不是悠闲的老年人,而是年龄相仿的年轻人。每个人都在拎着自己公司的纸带,或者文件夹,或静静的等待着站点,或忙碌的打着电话。
           自己的年轻时代,都在憧憬着未来,我们有能力不再需要公交车的时候,我们还会不会重新回到公交车上……
    五月印象之梁从诫——
           这个名字以前对我很陌生,很偶然的机会昨天看到了阳光卫视的《人生在线》,记住了梁从诫这个名字。
           如果你觉得陌生的话可以加上如下头衔,梁启超之孙,梁思成林徽因之子,名门之后。这样可能让人印象重重,但如果说是一个纯民间组织“自然之友”创办人,你也许不太在意。而我在意的却不是梁先生显赫的家族,这方面你可以搜出梁氏家族种种的光辉历史。但是有一点令人敬佩的是在这个家族里,个人都在做个人的事情,每个人都没有依附在家族的光环下,而是每个人各自的光辉照亮着整个家族。
           纯民间环保组织,梁先生夫妇身体力行,从废纸作的名片,到随身携带的筷子。夫妇强调的是一种环保的理念,不以事小而不为。的确,按梁老的话“如果所有的人都不愿意去做,那就一步也无法迈出,只要有一个人去做,即使是跨出了很小的一步,那也是在前进。国人缺的就是一种精神。”
           不仅是环保的精神,还有梁老对生活的态度,让我重新思考生命的意义到底是什么。梁老夫妇一直在不停的去做明知不太可能的事情,各处在宣扬一种理念,可以说,他们是布道者,精神的布道者,环保的苦行僧。他们在去可可西里曾遭遇车祸,梁老夫人含蓄而又平静的在镜头前说,在中国,你必须防着点什么似的,防着你背后什么似的。大家心里可能都明白,要防着什么,天大的困难,比不上轻描淡写的一句话。
           也许,我们缺的就是这种精神,在这种精神面前汗颜。
           节目的后半段,梁先生方夫人在一起唱一首不知名的歌,肯定很老,但是很动人,可能是他们年轻时的歌吧。没有心情去记歌词,一直沉迷在合唱的声音和眼神里面,我感确定那是一段无悔的青春……
           最后,夫妇在播放CD,是一段哀乐,但是很动听,很抱歉我拙劣的耳朵和学识不知道是哪位大师的作品。梁先生娴熟的陈举着从肖邦到贝多芬的各位大师的哀乐曲目。丰富的学识,流利的英语。并在笑称在他们被别人怀念的时候要播放他们自己选的哀乐。
           淡然而充实的人生,含蓄而又光芒的轨迹,让我一再的去思考,人怎样能活得有意义,有价值,有贡献。
           家事国事天下事,愤青的我总有关心不完的事情,最关心这些的,是胡coresir他们……
    五月印象之胡coresir——
           每天都有事情发生,关系到国计民生。
           今天股市疯狂,明天肉蛋大热,李登辉访日,反渎职,六一就要到……
           看到温sir在陕西视察,关心猪肉问题,看望农村留守儿童,在翻阅小孩子的作业时让我感动。本子很破,肯定是突击检查,不是在做秀,这种工作作风让我们折服。确实人民公仆,感谢。
     
    五月印象之校门搬迁——
           老校门正在拆除,还记得六年前走进学校是跨过的门,现在正在拆除,心里说不上什么感觉,怀念一下。
     
    May 13

    母亲节的记号

        这些天状态一直不太好,前些天有一次还特想回家吃一顿饭,来一顿再普通不过的家常饭,必须是我妈做的。这只是一个愿望罢了,呵呵,感激的话都是假的,只希望自己好好努力,让我妈我爸能获得轻松一些,努力......
        五一也没有抽出时间来歇一会儿,好像老是脱不开身的样子,一直有事一直有事,缠绵不绝的样子。到现在变得很疲倦,每天睡的也不少,总觉得歇不过来,可能就是所谓的身心俱疲吧。前两天还出现了性情的异常现象,变得浮躁,易冲动。感谢我的她及时提出这个问题,并对偶作了循循善诱滴教导和建议,^_^。还记得那天下午打一个市局回来,吃饭的时候不知不觉地在那发牢骚,其实我自己并没有想去斥责什么或者说可以想去说明什么,心里不由自主地在那挑刺,现在想想自己的确在那时是一个很危险的状态,说白了,在牢骚的同时,也证明自己是一个失败者,一个无法及时调解自己的失败者。
        心里一直期待休息,但是琐事总是无法妥当处理,所以就一直无法调节好自己,久而久之,从内而外,感觉比较危险,一定注意一定注意。嘿嘿,所以呐,今天下午一定要去打球,哈哈。发现其实自己调解的手段很单一,这一点不是太好,无非就是打球,睡觉,洗澡,洗衣服之类的。还要开发自己的兴趣。这一点挺佩服偶老板,在我看来他那才叫琐事缠身,但是他在各方面的表现让我汗颜哈,呵呵。感谢板板,教我怎样去做人,怎样去处理事务。
        五一也没出去玩,本来是安排和大学那帮子去一趟城山头去看看阿可的,可惜那天真的是没有条件,看着他们真爽啊,羡慕ing。接着见了一趟鹏哥,也没说两句话就匆匆而过,现在总是这个样子,都在为着各自的生活而奔波着,大家都好运哈。不过感觉怎么都一点没有变呢,除了自个,呵呵,越来越老了,出校也没人觉得出来是个学生了, 哎......
        还好,五一前也凑出去办事的空档逛了逛,见缝插针,呵呵。
        昨天师兄结婚,去凑了凑热闹,感觉人长大的太快,也就一会功夫,这些师兄师姐都差不多成家了。回来的时候和一群一工作的师兄,谈论的都是工作、房子、婚姻等一系列问题,也不大能插上话,苦啊,苦啊,马上要到这道坎了。
        刚刚小弟打来电话,老舅刚打北京回来,又在关心偶滴前途问题。开句玩笑,偶老舅是一个有政治抱负滴人,人民公仆作了一辈子,一直想能让后一代继续着光荣使命,呵呵,可是公务员考试哪是那么好考的啊,希望吧,呵呵。老弟明天集体去青岛,号称实习,希望能一路顺风,吃好玩好休息好。
        刚看了看太阳与马刺的比分,感觉太阳还是比较悬啊,马刺实力更胜一筹感觉。很喜欢两队的打球风格,可是可是,看不着啊,最后总决赛我一定要看,一定......本来能指望火箭走的远一些,可惜输了,不过看过一场比赛,感觉输倒在意料之中,不是很意外。外表看起来火箭比较文明,其实是实力所致,火箭优势明显,劣势同样明显。偶认为姚麦和巴蒂尔在各个位置相当好,但是后卫和大前的位置太弱了,如果要是换成比卢普斯滴话那是相当不错哈,大前,嘿嘿,估计也没有钱再去买了吧。姚去湖人肯定比现在好,毕竟麦迪太软了,科比在这方面要强他不知多少倍,一切皆有可能,呵呵,看看今夏吧。
                     

                                                                  (偶也为五一留个爪)
    May 05

    T-SQL

    *******************Transact_SQL********************

    --语 句                                功 能
    --数据操作
    SELECT      --从数据库表中检索数据行和列
    INSERT      --向数据库表添加新数据行
    DELETE      --从数据库表中删除数据行
    UPDATE      --更新数据库表中的数据
    --数据定义
    CREATE TABLE    --创建一个数据库表
    DROP TABLE     --从数据库中删除表
    ALTER TABLE     --修改数据库表结构
    CREATE VIEW     --创建一个视图
    DROP VIEW     --从数据库中删除视图
    CREATE INDEX    --为数据库表创建一个索引
    DROP INDEX     --从数据库中删除索引
    CREATE PROCEDURE   --创建一个存储过程
    DROP PROCEDURE    --从数据库中删除存储过程
    CREATE TRIGGER    --创建一个触发器
    DROP TRIGGER    --从数据库中删除触发器
    CREATE SCHEMA    --向数据库添加一个新模式
    DROP SCHEMA     --从数据库中删除一个模式
    CREATE DOMAIN    --创建一个数据值域
    ALTER DOMAIN    --改变域定义
    DROP DOMAIN     --从数据库中删除一个域
    --数据控制
    GRANT      --授予用户访问权限
    DENY      --拒绝用户访问
    REVOKE      --解除用户访问权限
    --事务控制
    COMMIT      --结束当前事务
    ROLLBACK     --中止当前事务
    SET TRANSACTION    --定义当前事务数据访问特征
    --程序化SQL
    DECLARE      --为查询设定游标
    EXPLAN      --为查询描述数据访问计划
    OPEN      --检索查询结果打开一个游标
    FETCH      --检索一行查询结果
    CLOSE      --关闭游标
    PREPARE      --为动态执行准备SQL 语句
    EXECUTE      --动态地执行SQL 语句
    DESCRIBE     --描述准备好的查询

    ---局部变量
    declare @id char(10)
    --set @id = '10010001'
    select @id = '10010001'

    ---全局变量
    ---必须以@@开头

    --IF ELSE
    declare @x int @y int @z int
    select @x = 1 @y = 2 @z=3
    if @x > @y
     print 'x > y' --打印字符串'x > y'
    else if @y > @z
     print 'y > z'
    else print 'z > y'

    --CASE
    use pangu
    update employee
    set e_wage =
     case
      when job_level = ’1’ then e_wage*1.08
      when job_level = ’2’ then e_wage*1.07
      when job_level = ’3’ then e_wage*1.06
      else e_wage*1.05
     end

    --WHILE CONTINUE BREAK
    declare @x int @y int @c int
    select @x = 1 @y=1
    while @x < 3
     begin
      print @x --打印变量x 的值
      while @y < 3
       begin
        select @c = 100*@x + @y
        print @c --打印变量c 的值
        select @y = @y + 1
       end
      select @x = @x + 1
      select @y = 1
     end

    --WAITFOR
    --例 等待1 小时2 分零3 秒后才执行SELECT 语句
    waitfor delay ’01:02:03’
    select * from employee
    --例 等到晚上11 点零8 分后才执行SELECT 语句
    waitfor time ’23:08:00’
    select * from employee

     

    ***SELECT***

       select *(列名) from table_name(表名) where column_name operator value
       ex:(宿主)
      select * from stock_information where stockid   = str(nid)
         stockname = 'str_name'
         stockname like '% find this %'
         stockname like '[a-zA-Z]%' --------- ([]指定值的范围)
         stockname like '[^F-M]%'   --------- (^排除指定范围)
         --------- 只能在使用like关键字的where子句中使用通配符)
         or stockpath = 'stock_path'
         or stocknumber < 1000
         and stockindex = 24
         not stocksex = 'man'
         stocknumber between 20 and 100
         stocknumber in(10,20,30)
         order by stockid desc(asc) --------- 排序,desc-降序,asc-升序
         order by 1,2 --------- by列号
         stockname = (select stockname from stock_information  where stockid  = 4)
         --------- 子查询
         --------- 除非能确保内层select只返回一个行的值,
         --------- 否则应在外层where子句中用一个in限定符
      select distinct column_name form table_name --------- distinct指定检索独有的列值,不重复
      select stocknumber ,"stocknumber + 10" = stocknumber + 10 from table_name
      select stockname , "stocknumber" = count(*) from table_name group by stockname
                                          --------- group by 将表按行分组,指定列中有相同的值
              having count(*) = 2  ---------  having选定指定的组
           
      select *
      from table1, table2                 
      where table1.id *= table2.id -------- 左外部连接,table1中有的而table2中没有得以null表示
         table1.id =* table2.id -------- 右外部连接

      select stockname from table1
      union [all]  -----  union合并查询结果集,all-保留重复行
      select stockname from table2

    ***insert***

      insert into table_name (Stock_name,Stock_number) value ("xxx","xxxx")
                  value (select Stockname , Stocknumber from Stock_table2)---value为select语句

    ***update***

      update table_name set Stockname = "xxx" [where Stockid = 3]
             Stockname = default
             Stockname = null
             Stocknumber = Stockname + 4

    ***delete***

      delete from table_name where Stockid = 3
      truncate table_name ----------- 删除表中所有行,仍保持表的完整性
      drop table table_name --------------- 完全删除表

    ***alter table*** --- 修改数据库表结构

      alter table database.owner.table_name add column_name char(2) null .....
      sp_help table_name ---- 显示表已有特征
      create table table_name (name char(20), age smallint, lname varchar(30))
      insert into table_name select ......... ----- 实现删除列的方法(创建新表)
      alter table table_name drop constraint Stockname_default ---- 删除Stockname的default约束
       
    ***function(/*常用函数*/)***

    ----统计函数----
    AVG    --求平均值
    COUNT   --统计数目
    MAX    --求最大值
    MIN    --求最小值
    SUM    --求和

    --AVG
    use pangu
    select avg(e_wage) as dept_avgWage
    from employee
    group by dept_id

    --MAX
    --求工资最高的员工姓名
    use pangu
    select e_name
    from employee
    where e_wage =
     (select max(e_wage)
      from employee)

    --STDEV()
    --STDEV()函数返回表达式中所有数据的标准差

    --STDEVP()
    --STDEVP()函数返回总体标准差

    --VAR()
    --VAR()函数返回表达式中所有值的统计变异数

    --VARP()
    --VARP()函数返回总体变异数

    ----算术函数----

    /***三角函数***/
    SIN(float_expression) --返回以弧度表示的角的正弦
    COS(float_expression) --返回以弧度表示的角的余弦
    TAN(float_expression) --返回以弧度表示的角的正切
    COT(float_expression) --返回以弧度表示的角的余切
    /***反三角函数***/
    ASIN(float_expression) --返回正弦是FLOAT 值的以弧度表示的角
    ACOS(float_expression) --返回余弦是FLOAT 值的以弧度表示的角
    ATAN(float_expression) --返回正切是FLOAT 值的以弧度表示的角
    ATAN2(float_expression1,float_expression2)
            --返回正切是float_expression1 /float_expres-sion2的以弧度表示的角
    DEGREES(numeric_expression)
                           --把弧度转换为角度返回与表达式相同的数据类型可为
            --INTEGER/MONEY/REAL/FLOAT 类型
    RADIANS(numeric_expression) --把角度转换为弧度返回与表达式相同的数据类型可为
            --INTEGER/MONEY/REAL/FLOAT 类型
    EXP(float_expression)  --返回表达式的指数值
    LOG(float_expression)  --返回表达式的自然对数值
    LOG10(float_expression)--返回表达式的以10 为底的对数值
    SQRT(float_expression) --返回表达式的平方根
    /***取近似值函数***/
    CEILING(numeric_expression)  --返回>=表达式的最小整数返回的数据类型与表达式相同可为
            --INTEGER/MONEY/REAL/FLOAT 类型
    FLOOR(numeric_expression)    --返回<=表达式的最小整数返回的数据类型与表达式相同可为
            --INTEGER/MONEY/REAL/FLOAT 类型
    ROUND(numeric_expression)    --返回以integer_expression 为精度的四舍五入值返回的数据
            --类型与表达式相同可为INTEGER/MONEY/REAL/FLOAT 类型
    ABS(numeric_expression)      --返回表达式的绝对值返回的数据类型与表达式相同可为
            --INTEGER/MONEY/REAL/FLOAT 类型
    SIGN(numeric_expression)     --测试参数的正负号返回0 零值1 正数或-1 负数返回的数据类型
            --与表达式相同可为INTEGER/MONEY/REAL/FLOAT 类型
    PI()       --返回值为π 即3.1415926535897936
    RAND([integer_expression])   --用任选的[integer_expression]做种子值得出0-1 间的随机浮点数


    ----字符串函数----
    ASCII()         --函数返回字符表达式最左端字符的ASCII 码值
    CHAR()   --函数用于将ASCII 码转换为字符
        --如果没有输入0 ~ 255 之间的ASCII 码值CHAR 函数会返回一个NULL 值
    LOWER()   --函数把字符串全部转换为小写
    UPPER()   --函数把字符串全部转换为大写
    STR()   --函数把数值型数据转换为字符型数据
    LTRIM()   --函数把字符串头部的空格去掉
    RTRIM()   --函数把字符串尾部的空格去掉
    LEFT(),RIGHT(),SUBSTRING()  --函数返回部分字符串
    CHARINDEX(),PATINDEX()  --函数返回字符串中某个指定的子串出现的开始位置
    SOUNDEX()  --函数返回一个四位字符码
        --SOUNDEX函数可用来查找声音相似的字符串但SOUNDEX函数对数字和汉字均只返回0 值    
    DIFFERENCE()    --函数返回由SOUNDEX 函数返回的两个字符表达式的值的差异
        --0 两个SOUNDEX 函数返回值的第一个字符不同
        --1 两个SOUNDEX 函数返回值的第一个字符相同
        --2 两个SOUNDEX 函数返回值的第一二个字符相同
        --3 两个SOUNDEX 函数返回值的第一二三个字符相同
        --4 两个SOUNDEX 函数返回值完全相同
                                          

    QUOTENAME()  --函数返回被特定字符括起来的字符串
    /*select quotename('abc', '{') quotename('abc')
    运行结果如下
    ----------------------------------{
    {abc} [abc]*/

    REPLICATE()     --函数返回一个重复character_expression 指定次数的字符串
    /*select replicate('abc', 3) replicate( 'abc', -2)
    运行结果如下
    ----------- -----------
    abcabcabc NULL*/

    REVERSE()       --函数将指定的字符串的字符排列顺序颠倒
    REPLACE()       --函数返回被替换了指定子串的字符串
    /*select replace('abc123g', '123', 'def')
    运行结果如下
    ----------- -----------
    abcdefg*/

    SPACE()   --函数返回一个有指定长度的空白字符串
    STUFF()   --函数用另一子串替换字符串指定位置长度的子串


    ----数据类型转换函数----
    CAST() 函数语法如下
    CAST() (<expression> AS <data_ type>[ length ])
    CONVERT() 函数语法如下
    CONVERT() (<data_ type>[ length ], <expression> [, style])

    select cast(100+99 as char) convert(varchar(12), getdate())
    运行结果如下
    ------------------------------ ------------
    199   Jan 15 2000

    ----日期函数----
    DAY()   --函数返回date_expression 中的日期值
    MONTH()   --函数返回date_expression 中的月份值
    YEAR()   --函数返回date_expression 中的年份值
    DATEADD(<datepart> ,<number> ,<date>)
        --函数返回指定日期date 加上指定的额外日期间隔number 产生的新日期
    DATEDIFF(<datepart> ,<number> ,<date>)
        --函数返回两个指定日期在datepart 方面的不同之处
    DATENAME(<datepart> , <date>)  --函数以字符串的形式返回日期的指定部分
    DATEPART(<datepart> , <date>)  --函数以整数值的形式返回日期的指定部分
    GETDATE()  --函数以DATETIME 的缺省格式返回系统当前的日期和时间

    ----系统函数----
    APP_NAME()      --函数返回当前执行的应用程序的名称
    COALESCE()  --函数返回众多表达式中第一个非NULL 表达式的值
    COL_LENGTH(<'table_name'>, <'column_name'>) --函数返回表中指定字段的长度值
    COL_NAME(<table_id>, <column_id>)   --函数返回表中指定字段的名称即列名
    DATALENGTH() --函数返回数据表达式的数据的实际长度
    DB_ID(['database_name']) --函数返回数据库的编号
    DB_NAME(database_id)  --函数返回数据库的名称
    HOST_ID()     --函数返回服务器端计算机的名称
    HOST_NAME()     --函数返回服务器端计算机的名称
    IDENTITY(<data_type>[, seed increment]) [AS column_name])
     --IDENTITY() 函数只在SELECT INTO 语句中使用用于插入一个identity column列到新表中
    /*select identity(int, 1, 1) as column_name
     into newtable
     from oldtable*/
    ISDATE()  --函数判断所给定的表达式是否为合理日期
    ISNULL(<check_expression>, <replacement_value>) --函数将表达式中的NULL 值用指定值替换
    ISNUMERIC()  --函数判断所给定的表达式是否为合理的数值
    NEWID()   --函数返回一个UNIQUEIDENTIFIER 类型的数值
    NULLIF(<expression1>, <expression2>)
     --NULLIF 函数在expression1 与expression2 相等时返回NULL 值若不相等时则返回expression1 的值

    April 21

    在云端

        本来天挺不错,结果就在我换衣服去打球的那个刹那,风就莫名其妙的起来了。
        在球场上已经看不到后面的山了,一切都包裹在看似淡淡的,却是能遮颜一切的雾气里面。
        打了一会,结果接到老师电话,本以为是通知明天开题的事情,木有想到电话那头问我在哪。心里一惊,结果不出所料,一会要开题,速速赶回。没顾那么多,直奔目的地。先去了趟实验室,好久没去了,进去一师姐居然冲我来了句“下雨了?!”,一脸狐疑,无语......
        还不错,老板居然也是一身运动装扮,见我第一句就问我穿得那么休闲,嘿嘿,与领导保持一致呗。还好,挺顺利,只是报告里居然落了一个词。最后争论了一会题目怎么定,就这么过去了,呵呵,轻松简单哈。不过偶心里知道自己的题目有难度啊,希望能做出来。
        明天说啥也得瞅一眼季后赛,哈哈,拼了。
        洗完澡那叫一个舒服,天气变得可爱无比。有点烟雨朦胧的感觉,却感觉要比那种感觉来的要柔,要细,要温暖。漂在脸上那种凉凉的却又温暖的感觉,居然在春天颇有凉意的夜里感觉到清爽,当你伸出收取摸的时候却有什么都摸不到,若即若离,若有若无......明明是雨,却有种清风抚过的错觉。突然想到,在云端是不是就是这种感觉呢,自己又是不是在云端呢?

    PlayOffs come again

            不知不觉又是一年的春暖花开,看到窗外懒洋洋的日光和充满生机的一切有生命的东西心底就有一种莫名的向上的力量。
            一直都在努力,一直都没停顿,有时候就觉得人生像一片无穷无尽的荒漠,由不得你,你要一直走下去,只有走下去才有你需要的补给和你渴望的成功。在此怀念一位已离我们远去的女孩,平时没有太多交往,但是以前一眼就记住了她,或者说记住了她背上的格瓦拉。我想她也一定想格瓦拉那样坚强,但是车祸的面前人总是显得那么脆弱。希望她的家人能走出悲伤,愿她能走好。相信在很多人的心里都不会忘记不远处那个象精灵一样跳动的格瓦拉......
                                         
            生命既然如此脆弱,就我们拥有一颗坚强的心吧。有不由得想起这两天发生VTU的枪击案,当面临灾难的时候,生命又怎能承受如此之重。我们的命还有有的选,我们的未来掌握在自己手里......
     
    --------------------------------------------------------------------------------------------------------------------
     
             一年一度的季后赛提醒着人们光阴如梭,时间易逝。不知道火箭能走多远,但是已经非常感谢姚明了,偶非姚蜜姚黑,五年前,Yao进入NBA,那时候我还上大二,可以说他的成长伴随着我的成长,一个从毛胚的定型过程,都在努力,都在进步。
           
           
    April 15

    textcopy:数据库读写任意类型文件

       前几天要把flash文件写入数据库并读取,上来想尝试以二进制流的方式,偶然发现textcopy,何乐而不为呢。
       介绍一下,字段肯定是image类型,不多说了。
       1、首先建立textcopy存储过程,如下:
          CREATE   PROCEDURE   sp_textcopy   (    
          @srvname         varchar   (30),    
          @login             varchar   (30),    
          @password         varchar   (30),    
          @dbname             varchar   (30),    
          @tbname             varchar   (30),    
          @colname         varchar   (30),    
          @filename         varchar   (30),    
          @whereclause   varchar   (40),    
          @direction     char(1))    
      AS    
      DECLARE   @exec_str   varchar   (255)    
      SELECT   @exec_str   =    
                      'textcopy   /S   '   +   @srvname   +    
                      '   /U   '   +   @login   +    
                      '   /P   '   +   @password   +    
                      '   /D   '   +   @dbname   +    
                      '   /T   '   +   @tbname   +    
                      '   /C   '   +   @colname   +    
                      '   /W   "'   +   @whereclause   +    
                      '"   /F   '   +   @filename   +    
                      '   /'   +   @direction    
      EXEC   master..xp_cmdshell   @exec_str 
    2、建好之后即可使用了,使用方法如下:
    读入文件:
    sp_textcopy  '数据库服务器', '用户名','密码','数据库名', '表名','文件字段名','源文件名(包含路径)','where 查询条件','I'
    读出文件到指定文件名:
    sp_textcopy  '数据库服务器', '用户名','密码','数据库名', '表名','文件字段名','目的文件名(包含路径)','where 查询条件','O'
    3、拷贝你的MS SQL server安装路径下的textcopy.exe到C盘binn下
    例如:D:\Program Files\Microsoft SQL Server\MSSQL\Binn下拷贝textcopy.exe
    到目录C:\Program Files\Microsoft SQL Server\80\Tools\Binn
    当然,读写仅限于本地路径。我需要用到远程读写,BS下实现的确容易,但是CS下只能另辟蹊径了,呵呵。偶为了加快进度,采了混合模式,哈哈,就不多说了。不过个人认为做成sourcesafe那样才是正解,局域网内好做点,广域下可使用webservice实现。
    April 01

    烟花三月, 梦无扬州

        看到一哥们的窝在惊叹春天,好像觉得不过瘾,洋洋洒洒整了大半篇幅朱自清的《春》。早不记得是么时候学过这篇美得让人无法自拔的文字,也很难以想象在吹面不寒杨柳风这些句子的由来。此时我却突然醒悟,春天到了,悄无声息.......
        海滨小城的初春不只是太过隐蔽,还是自己越来越缺少发现的眼睛。想到春,总忘不掉最简单的“烟花三月”,言仅数字,越让人遐想联翩,淡淡的雾气,濛濛的细雨,一切都在悄无声息的散发着新生的活力,甚至听得到花开的声音,感觉到新芽舒展的惬意。收回柔顺如丝的思绪,张开朦胧的双眼,抛开那些梦中江南的画卷,寻找身边的春天。这里的一切确实隐蔽,但是我的确发现了寒意略存中撑开的迎春花,突兀枝干中抽出的新芽。海风让这里的的一切变得坚强,不知道外表还依然稚嫩的自己也是否能够透漏出这里的春的英气。
        (任务实在繁忙,心里确实痒痒,略略摆弄笔墨,不知能否待续......)
    March 27

    为人民公仆服务

        题目小小调侃一下,没有别的意思,^_^.
        说一下最近的一个小项目......
     
        扫兴,没意思
    March 11

    [转]C#中TreeView组件使用方法初步

    [转]C#中TreeView组件使用方法初步

    TreeView组件是由多个类来定义的,TreeView组件是由命名空间"System.Windows.Forms"中的"TreeView"类来定义的,而其中的节点(即Node),是由命名空间"System.Windows.Forms"中的"TreeNode"来定义的。所以当在程序中创建一个TreeView对象,其实只是创建了一个可以放置节点的"容器"。而在这个容器中加入一个节点,其实就是加入了从"TreeNode"类中创建的一个节点对象;同样删除一个节点,也就是删除一个"TreeNode"节点对象。

      一. 本文中介绍的程序设计及运行环境

       (1).微软视窗2000 服务器版

       (2)..Net Framework SDK 正式版

      二. C#操作TreeView组件中的一些常用方法以及具体实现:

      TreeView组件虽然是一个操作起来比较麻烦的组件,但归根到底,可以总结为三种基本操作:加入子节点、加入兄弟节点和删除节点。掌握了这三种常用操作,对于在编程中灵活运用TreeView组件是十分必要的。下面就分别来加以介绍。

      (1).加入子节点:

      所谓子节点,就是处于选定节点的下一级节点。加入子节点的具体过程是:首先要在TreeView组件中定位要加入的子节点的位置,然后创建一个节点对象,然后利用TreeVeiw类中对节点的加入方法(即:Add ( )方法),加入此节点对象。下面就是在treeView1组件中加入一个子节点的具体代码:

    //首先判断是否选定组件中的位置
    if ( treeView1.SelectedNode == null )
    {
    MessageBox.Show ( "请选择一个节点" , "提示信息" , MessageBoxButtons.OK , MessageBoxIcon.Information ) ;
    }
    else
    {
    //创建一个节点对象,并初始化
    TreeNode tmp ;
    tmp = new TreeNode ( "节点名称" ) ;
    //在TreeView组件中加入子节点
    treeView1.SelectedNode.Nodes.Add ( tmp ) ;
    treeView1.SelectedNode = tmp ;
    treeView1.ExpandAll ( ) ;
    }

      (2).加入兄弟节点:

      所谓兄弟节点,就是在选定的节点的平级的节点。加入兄弟节点的方法和加入子节点的方法基本一致,只是在最后的实现方法上有着略微的区别。加入兄弟节点的具体步骤,首先也是要确定要加入的兄弟节点所处的位置,接着定义一个节点对象,最后调用TreeView类中对兄弟节点加入的方法,加入此节点对象。加入兄弟节点和加入子节点的最大区别就在于这最后一步。希望读者能够注意。下面是在TreeView组件加入一个兄弟节点的具体代码:

    //首先判断是否选定组件中节点的位置
    if ( treeView1.SelectedNode == null )
    {
    MessageBox.Show ( "请选择一个节点" , "提示信息" , MessageBoxButtons.OK , MessageBoxIcon.Information ) ;
    }
    else
    {
    //创建一个节点对象,并初始化
    TreeNode tmp ;
    tmp = new TreeNode ( textBox1.Text ) ;
    //在TreeView组件中加入兄弟节点
    treeView1.SelectedNode.Parent.Nodes.Add ( tmp ) ;
    treeView1.ExpandAll ( ) ;
    }

      (3).删除节点:

      删除节点就是删除TreeView组件中选定的节点,删除节点可以是子节点,也可以是兄弟节点,但无论节点的性质如何,必须保证要删除的节点没有下一级节点,否则必须先删除此节点中的所有下一级节点,然后再删除此节点。删除节点比起上面的二个操作要显得略微简单,具体方法是:首先判断要删除的节点是否存在下一级节点,如果不存在,就调用TreeView类中的Remove ( )方法,就可以删除节点了。下面是删除TreeView组件中节点的具体代码:

    //判断选定的节点是否存在下一级节点
    if ( treeView1.SelectedNode.Nodes.Count == 0 )
    //删除节点
    treeView1.SelectedNode.Remove ( ) ;
    else
    MessageBox.Show ( "请先删除此节点中的子节点!" , "提示信息" , MessageBoxButtons.OK , MessageBoxIcon.Information ) ;

      (4).TreeView组件的一些其他常用操作:

      其他的一些常用操作比起上面的三种操作,在具体实现上要显得简单许多。这些常用操作无非是,展开所有节点,展开指定的节点、和折叠所有节点。下面就来具体介绍一下:

      < I > .展开所有节点:

      要展开TreeView组件中的所有节点,首先就要把选定的节点指针定位在TreeView组件的根节点上,然后调用选定组件的ExpandAll方法就可以了,下面是具体代码:

    //定位根节点
    treeView1.SelectedNode = treeView1.Nodes [ 0 ] ;
    //展开组件中的所有节点
    treeView1.SelectedNode.ExpandAll ( ) ;

      < II > .展开选定节点的下一级节点:

      由于只是展开下一级节点,所以就没有必要用ExpandAll ( )方法了。展开下一级节点只需要调用Expand ( )方法就可以了,下面是具体的实现代码:

    treeView1.SelectedNode.Expand ( ) ;

      < III > .折叠所有节点:

      折叠所有节点和展开所有节点是一组互操作,具体实现的思路也大致相同,折叠所有节点也是首先要把选定的节点指针定位在根节点上,然后调用选定组件的Collapse ( )就可以了,下面是具体的实现代码:

    //定位根节点
    treeView1.SelectedNode = treeView1.Nodes [ 0 ] ;
    //折叠组件中所有节点
    treeView1.SelectedNode.Collapse ( ) ;

      至此已经把在C#操作TreeView组件的常用方法和一般方法基本都介绍完了。
    三. C#编写的一个完整操作TreeView组件的例子:

      下面是C#编写一个的关于TreeView组件的例子,在这个例子中,结合以上介绍的常用方法和一般方法,基本覆盖来TreeView组件的一些最常用的操作。譬如可以灵活的程序中的TreeView组件中,进行加入子节点、兄弟节点、删除节点、折叠、展开等操作。其中前三种基本操作是通过程序中弹出菜单中的功能来实现的,后面操作是通过程序中的按钮来实现的。下面是此程序的代码节略(TreeView.cs):

    using System ;
    using System.Drawing ;
    using System.Collections ;
    using System.ComponentModel ;
    using System.Windows.Forms ;
    using System.Data ;
    namespace 全面掌握TreeView组件的使用方法
    {
    /// Form1 的摘要说明。
    public class Form1 : Form
    {
    private TreeView treeView1 ;
    private Button button1 ;
    private Button button2 ;
    private Button button3 ;
    private MenuItem menuItem2 ;
    private MenuItem menuItem3 ;
    private MenuItem menuItem4 ;
    private ContextMenu contextMenu1 ;
    private TextBox textBox1 ;
    private Label label1 ;
    /// 必需的设计器变量。
    private System.ComponentModel.Container components = null ;
    public Form1 ( )
    {
    //初始化窗体中的组件
    InitializeComponent ( ) ;
    }
    /// 清理所有正在使用的资源。
    protected override void Dispose ( bool disposing )
    {
    if ( disposing )
    {
    if ( components != null )
    {
    components.Dispose ( ) ;
    }
    }
    base.Dispose ( disposing ) ;
    }
    private void InitializeComponent ( )
    {
      //初始化代码(略)
    }
    [ STAThread ]
    static void Main ( )
    {
    Application.Run ( new Form1 ( ) ) ;
    }
    private void AddChildNode ( )
    {
    //首先判断是否选定组件中的位置
    if ( treeView1.SelectedNode == null )
    {
    MessageBox.Show ( "请选择一个节点" , "提示信息" , MessageBoxButtons.OK , MessageBoxIcon.Information ) ;
    }
    else
    {
    if ( textBox1.Text != "" )
    {
    //创建一个节点对象,并初始化
    TreeNode tmp ;
    tmp = new TreeNode ( textBox1.Text ) ;
    //在TreeView组件中加入子节点
    treeView1.SelectedNode.Nodes.Add ( tmp ) ;
    treeView1.SelectedNode = tmp ;
    treeView1.ExpandAll ( ) ;
    }
    else
    {
    MessageBox.Show ( "TextBox组件必须填入节点名称!" , "提示信息" , MessageBoxButtons.OK , MessageBoxIcon.Information ) ;
    return ;
    }
    }
    }
    private void AddParent ( )
    {
    //首先判断是否选定组件中节点的位置
    if ( treeView1.SelectedNode == null )
    {
    MessageBox.Show ( "请选择一个节点" , "提示信息" , MessageBoxButtons.OK , MessageBoxIcon.Information ) ;
    }
    else
    {
    if ( textBox1.Text != "" )
    {
    //创建一个节点对象,并初始化
    TreeNode tmp ;
    tmp = new TreeNode ( textBox1.Text ) ;
    //在TreeView组件中加入兄弟节点
    treeView1.SelectedNode.Parent.Nodes.Add ( tmp ) ;
    treeView1.ExpandAll ( ) ;
    }
    else
    {
    MessageBox.Show ( "TextBox组件必须填入节点名称!" , "提示信息" , MessageBoxButtons.OK , MessageBoxIcon.Information ) ;
    return ;
    }
    }
    TreeNode tnode = new TreeNode ( textBox1.Text ) ;
    }
    private void treeView1_MouseDown ( object sender , MouseEventArgs e )
    {
    if ( e.Button == MouseButtons.Right )
    contextMenu1.Show ( this , new Point ( e.X , e.Y ) ) ;
    }
    private void button1_Click ( object sender , System.EventArgs e )
    {
    treeView1.SelectedNode.Expand ( ) ;
    }
    private void menuItem2_Click ( object sender , System.EventArgs e )
    {
    AddChildNode ( ) ;
    }
    private void menuItem3_Click ( object sender , System.EventArgs e )
    {
    AddParent ( ) ;
    }
    private void menuItem4_Click ( object sender , System.EventArgs e )
    {
    //判断选定的节点是否存在下一级节点
    if ( treeView1.SelectedNode.Nodes.Count == 0 )
    //删除节点
    treeView1.SelectedNode.Remove ( ) ;
    else
    MessageBox.Show ( "请先删除此节点中的子节点!" , "提示信息" , MessageBoxButtons.OK , MessageBoxIcon.Information ) ;
    }
    private void button2_Click ( object sender , System.EventArgs e )
    {
    //定位根节点
    treeView1.SelectedNode = treeView1.Nodes [ 0 ] ;
    //展开组件中的所有节点
    treeView1.SelectedNode.ExpandAll ( ) ;
    }
    private void button3_Click ( object sender , System.EventArgs e )
    {
    //定位根节点
    treeView1.SelectedNode = treeView1.Nodes [ 0 ] ;
    //折叠组件中所有节点
    treeView1.SelectedNode.Collapse ( ) ;
    }
    }
    }


      在成功编译TreeView.cs后,运行的程序界面如下:


    图01:C#编写的操作TreeView组件的程序运行界面

      四. 总结:

      TreeView组件是一个既令程序员头痛,又令程序员难以割舍的组件。这是因为TreeView组件使用非常灵活,显示内容有层次,并且"容量"相对又比较大。但同时在实际的编程比起其他组件又相对麻烦。掌握了本文介绍的这些用C#操作TreeView组件的基本方法后,我想对于在使用TreeView组件中的一般的问题,应该都能够克服了吧。
    February 06

    dll文件访问被拒绝

    这个问题是在用 win2003 后碰到的,在2003系统下,用vs.net 开发 运行项目的时候经常碰到
    "组件 访问被拒绝 --“/”应用程序中的服务器错.."
    以前重新启动 IIS , 注销系统都没有,一定要重新启动电脑,一直没找到答案,今天总算解决了
    解决方法:
    解决方法一:

    1.开始 -- 管理工具 -- 计算机管理(Win2003的位置,其他操作系统类似)打开计算机管理
    --展开计算机管理左边树中“服务和应用程序”节点,再在其下展开“索引服务”节点,停止服务,最好最快的方法

    解决方法二:

    2.1、开始 -- 管理工具 -- 计算机管理(Win2003的位置,其他操作系统类似)打开计算机管理
    2.2、展开计算机管理左边树中“服务和应用程序”节点,再在其下展开“索引服务”节点,再在其下展开“System”节点,再在其下展开“目录”节点。
    2.3、在计算机管理的右边我们可以看到配置的索引服务目录。
    2.4、在“目录”节点上右击鼠标,选择“新建”--“目录”
    2.5、在“添加目录”对话框中,路经输入框中输入 ASP.net 的临时文件目录。默认应该是:
    c:\<WINDIR>\Microsoft.NET\Framework\<Version Number>\Temporary ASP.NET Files  目录。
    <Version Number> 指你要处理的.net版本。
    2.6、在“包含在索引中吗?”选项中,选择“否”
    2.7、单击“确定”按钮
    2.8、在“索引服务”节点上右键单击,重起索引服务即可。

    解决方法三:
       1. 可以删除 bin\XX.pdb

    January 26

    有家不能回

        在自己的脑海里家的概念越来越淡,却又越来越浓。
        淡的是很难说我现在是个什么数量级的单位,家到底在哪里,在宿舍里也算是家,到爸妈身旁也算是家,但好像却失去了一个真正意义的家。首先,宿舍是个休息的地方,不是个人空间,却要在里面住上一年中的多半时间。父母身旁一切都还是那样自由,还能那样懒散,但是住的却越来越少。浓的是自己越来越想能有一个自己维持的家,具体不便偷漏,
        可怜的是学校很残酷滴把我藏身之地,偶的猪窝一样的宿舍也给剥夺了。本来是该回家的,结果今年的转换出了点差错,暂时回不去了。还好还好,路路那觅得一藏身之地,也算是不幸中的万幸了。
        偌大的学校没了人,突然就变得死寂死寂的,没有了一点生气。让人感觉以前很熟悉的地方也感到十分陌生,为解决吃方问题也不得不到处去跟打猎似的,到了点就出去看看哪有吃的。感觉吃饭成了一天最艰巨的任务,中午吃过饭回来看到一只在觅食的小黑猫,我看它的时候小家伙就眼巴巴地望着我。机械的在坐兜里掏出了一包纸巾,右兜里掏出了一串钥匙,没有点可以喂这小家伙的东西,没有办法。真难以想象它是准备怎么样熬过这个冬天的。
        PS:在老板办公室就是这么滴不自由,刚才只好装了装样子,现在继续。说到这,老板今天一天没过来,估计到四点来钟再过来,真被他的时间钟搞败了,打早上7点到晚上11点都要时刻准备着,非常之写意。8过,哈哈,还好每次过来都打个招呼,谁叫俺拿着钥匙,掌管着开门大权涅。
        今天不露面肯定和今天早上的大雪是密不可分滴,今个腊八,在别人msn上签名看到滴,真伪性没法证实,估计99%以上的正确率。腊八迎来了2007年的第一场雪,虽然来得晚些,来势倒是挺猛。今个早晨醒来就一只懒被窝里不想出来,主要是被窝外面和里面的温度差距,初步保守估计也就是二十七八度。最要命的是那个风,此处引用一句让我咬牙切齿的签名“腊八的风就应该这么刮”,这位师兄工作住宿不用出楼,看着窗外雪停着风唱歌倒也无可厚非。不过这可害惨了我,顶着海风,脸上砸着雪花,倒也自在。看着白茫茫的沙滩,衬着冲向沙滩的那一堆堆雪似的浪花,真正体会到啥叫“卷起千堆雪”。
        风的确够大,耳边就是呼呼的响。毛主席教导我们:与天斗、与地斗、与人斗,其乐无穷!偶感觉他老人家教导的对偶来说是不太适用了,偶感觉与啥斗也别与天斗啊,整不了,整不了。当时我就突然想起F1来,偶没体验过F1,哪怕是时速超过100的时候也没体验过,不过今个早上倒真是一点不比超过300的f1的体验差到哪去,暂且就当半小时的车程吧(当然是F1赛车啦,)。
        时间不短了,该歇歇笔了,诸位看官且看下回分解吧。