2008年4月11日

[转载]使用BackgroundWorker组件进行异步操作编程

     摘要: 使用BackgroundWorker组件进行异步操作编程原文发布日期:2008-06-18 | 更新日期:2008-06-18原文作者:郑佐原文地址:http://blog.csdn.net/zhzuo/archive/2008/07/23/2699305.aspx摘要:本文介绍了BackgroundWorker组件的功能及在基于事件的异步操作编程中的应用,并对组件的实现原理进行简述。下载与本文相... 阅读全文

posted @ 2008-08-29 17:05 virus 阅读(14) | 评论 (0)编辑

困惑与迷茫

今天,就在刚才公司的总经理找我谈话,说是经过一段时间的考察,决定提拔我当个Team Leader,虽然我们现在的项目快要结束了,但是正好通过这段时间锻炼一下,为下一个项目做些准备,这个项目的最后内容,老大会帮助我过渡,然后下个项目就会放手我自己干了。
而且还说待遇上面,如果表现的好,很快会有提高,因为公司和甲骨文也签订了合作,准备送我学习些oracle的东西,毕竟oracle在企业数据库应用领域是无人可比的,会为我提供学习的环境,包括书籍,考试费用,听课。

本来是应该高兴的事情,可是我的心情却很复杂,不知道该高兴还是该不高兴。

主要是前一段时间,家里人觉得我年龄也大了,27了,刚毕业一年,搞这一行已经怕不行了,帮我联系了一家银行的工作,我也有点心动了,可是我不想放弃计算机,虽然我的能力还一般,但是毕竟是我的选择,我觉得我还有兴趣和动力。那边好像有了希望了,前几天报名天了表格。

当然,对公司我是非常感谢的,能在刚来的半年就得到公司的肯定,我非常高兴。

我不知道该如何选择了,选择哪一个我都怕自己后悔,有时候真希望公司看不上我算了,又或者银行那边办不好算了,唉,做人怎么这么难呢。我做事从来不后悔,比如我选择了我现在的老婆,虽然我们的生活很普通,有时候也会为生活的事情吵架,但是我们没有后悔,我爱老婆,我们一起很快乐。选择,这可能是我人生第一个面临的艰难选择吧,该如何呢?还是顺其自然呢?可是我还不想放弃我的梦想,不想让它真的成为梦想,我还想试一试,就算失败也好,可是。。。。。。。。。。。。。。。

还是我真的老了,。。。。。。。。工作以后才发现生活真的很艰难,远没有想像中的那么简单,柴米油盐酱醋茶,样样都要操心的,不知道大家有没有碰到我这样的情况呢?

posted @ 2008-08-27 10:57 virus 阅读(119) | 评论 (9)编辑

[转载]在SQL Server数据库之间进行数据导入导出,OPENDATASOURCE

     摘要: 需要在c盘下先建立一个data.txt文件,然后在文件的第一行写上你要导出的列,不如说要导出id和name这两列,就在第一行写上id,name[代码]完整的sql代码如下[代码]SQL Server SQL语句导入导出大全,bcphttp://www.pconline.com.cn/pcedu/empolder/db/sql/0502/551039.htmlbcphttp://liss.javae... 阅读全文

posted @ 2008-08-26 16:48 virus 阅读(49) | 评论 (0)编辑

[转载]如何用SQLDMO在ASP.NET页面下实现数据库的备份与恢复

     摘要: 本文转载自:http://www.cnblogs.com/terrylee/articles/253667.html原文作者:网名:TerryLee本名:李会军位置:中国 北京我们知道,用SQLDMO可以实现对数据库的备份与恢复,下面给出简单的实现方法。首先需要添加对SQLDMO引用1.实现数据库的备份:1/**////<summary>2///数据库备份3///</summar... 阅读全文

posted @ 2008-08-26 13:53 virus 阅读(56) | 评论 (0)编辑

U盘加载,卸载,拔出,插入,WM_DEVICECHANGE,WndProc,DBT_DEVICEARRIVAL,DBT_DEVICEREMOVECOMPLETE

     摘要: 最近在做一个和U盘有关的项目,有一个需求是要求显示插入的U盘的盘符,当然了,如果拔出U盘,也应该更新显示,就是显示U口上插入的全部移动设备的全部盘符。其实就是重写[代码]方法,根据得到的系统消息来处理,但是如果要实时更新的话,最好加上定时查询U口设备,将查询结果更新,时间的间隔可以自己定义,根据项目情况吧。下面是完整的代码,如果大家有什么好的建议,欢迎大家一起交流。[代码]简单封装了一下,封装类如... 阅读全文

posted @ 2008-08-22 14:42 virus 阅读(96) | 评论 (0)编辑

数据库sql方面的困惑,sql,mssql ,登录,验证,日志

这个是一个讨论帖子,放到首页是想让更多的老鸟来参加讨论,没有别的意思,希望可以。
谢谢大家

最近的项目使用存储过程比较多,所以出现了很多的想法。

比如说一个系统要求操作都要记录系统日志,记录相应的操作人,时间等等

也就是说添加用户的同时要两步操作,第一步,添加用户信息表,第二步,添加系统日志表,这两个是用两个存储过程,然后在业务层调用两次呢,还是写在一个存储过程,一次调用让数据库都做了呢?
个人认为应该让数据库都做了算了,调用两次还要链接两次数据库,浪费资源,传输资源增加,不如都交给数据库来处理,但是又担心处理的效率,有点迷茫啊,希望有高人指点。
顺便问一下,如何用MSSQL分析sql语句的效率之类的东西,

还有就是登录验证,因为登录成功之后要用到登录用户的其他信息,是应该分开两个操作:
1、验证登录,
2、验证成功,取用户信息

还是坐在一个存储过程中呢,验证的同时,如果成功,就返回相应的用户信息,如果失败,就返回失败

这样的类型的多步操作在系统中很多,我们该如何权衡呢,欢迎老鸟指导,大家也可以讨论说出自己的观点。

这几天我可能不会上网了,希望大家留下宝贵意见,星期一回来我会和大家一起讨论的,谢谢。

本人
email:jorden008@163.com
msn:jorden008@hotmail.com

大家一起交流吧,谢谢


补充一点东西,大家帮个忙吧

下面这个的存储过程中的if。。。。else。。。如何写呢,谢谢

create procedure ValidatingLogin
@LoginName varchar(50),
@Password varchar(50),
@AutoID int output,
@RealName nvarchar(50) output
as
declare @count int;
select count(*from SysUserInfo where LoginName=@LoginName and Password=@Password
if(个数大于0)
begin
返回用户其他信息
返回1
end
else
begin
返回0
end
go


posted @ 2008-08-15 17:18 virus 阅读(801) | 评论 (10)编辑

C#,String.Format,数字格式化输出 ,format

     摘要: 本文转载:http://www.cnblogs.com/morsh/archive/2008/08/04/1259764.htmlmorsh[代码] 阅读全文

posted @ 2008-08-13 14:19 virus 阅读(180) | 评论 (2)编辑

c#,winform,treeview,选中节点,选中相应的全部子节点,取消节点,取消父节点,小技巧

 

在开发的时候经常使用treeview控件来显示组织结构啊,目录结构啊,通常会结合属性checkedboxs,来做选中,取消的操作

下面是一个选中,取消的小例子,选中节点的时候,如果节点存在子节点,可以选中全部的子节点;如果取消一个节点的选中状态,当前节点同时又存在父节点的话,就取消父节点的选中状态。

如图所示:
treeview1.JPG

treeview2.JPG

代码如下:

Code

posted @ 2008-08-06 11:34 virus 阅读(288) | 评论 (0)编辑

中文,分词,搜索,引擎


本文转载:http://www.cnblogs.com/kwklover/archive/2007/03/19/679425.html

原作者:kwklover

感谢作者写这么好的文章



我开发的中文分词程序,开源发布 , 其实哪个中文分词的整体架构是比较糟糕的。架构是否优秀决定了很多构思无法实现,思考了比较久,最近准备开发第二版,抛弃以前的架构,重新实现。下面是一 些设计和构思。计划是两周时间开发完成beta版(如果因为工作关系,也有可能放弃),主要是希望和大家交流下设计思想,我觉得构思很重要,想得实现不 了,可以慢慢研究,想不到才是头大的问题,希望能和大家一起交流下:

新版中文分词构想(面向搜索):

分解流程:
1,分段,根据基本的分隔符号对文本进行分段,比如,。;!!,; \r\n等分解文本
2,分字符区,即分解成纯粹的 中文文本区 ,数字区 ,综合字符区(包括英文,数字或者其他符号),分割符号区
3,对中文文本区调用中文分词算法,对数字区区按空格分词,对综合字符区调用英文分词算法,分割符号区保留
4,对初步分解的单字中文进行中文姓名识别。
5,结合前后词,对单字中文和数字做日期识别分析
6,未登陆词分析与识别

算法构想:
1,中文分词算法
  匹配模式:正向最大化,反向最大化,概率最大化
  也会考虑参考SharpICTCLAS系统的NShortpath分词算法(不过目前还没看懂,迟钝的很)
 
2,中文姓名识别算法
  主要根据中文姓,加上初步分解出的单字中文进行分析:基于词库分析单字中文作为名的概率。
 
3,日期识别算法
  将分解出的单字中文结合前后字符,判断是否为以下格式之一:
  数字+年+数字+月+数字+日
  数字+年+数字+月
  数字+月+数字+日
  数字+月
  数字+日
 
4,新词识别(未登陆词识别)
  1,将分解出的单字中文判断排除常用单词(StopWords)外,作为单字出现的概率。所以需要一个单字字库,包括单字出现概率的信息。
  当然也可以将现有词库对词进行分解成单字概率分布模型库(具体如何设计还没考虑好),提出来和大家交流下:
  单字出现在第一个字符概率 出现在中间的概率 出现在尾部的概率
 
  2,将上叙分析的新词进行概率分析,比如在全文中出现超过N次(比如2次,次数越大,作为一个词的可能性越高),以提高新词识别的准确度;
  不过如此大动作的分析,性能估计有很大问题。
 
5,英文分词算法
  1,将全部字符处理为半角字符。
  2,将全部字符处理为小写字符。
  3,识别各种英文字符格式,比如电子邮件格式,网址格式等等。(用正则表达式)
  4,处理英文形式问题:比如将所有英文复数形式转换成单数形式。将各种简写形式处理为同一形式等等(这部分有兴趣可以参考dotlucene和snowball.net对英文处理的方式,这个部分我也没有深入研究过。)

posted @ 2008-08-05 09:17 virus 阅读(142) | 评论 (0)编辑

简单的,分词算法


一个简单的英文分词程序


转载:http://west263.com/info/html/chengxusheji/Javajishu/20080404/57978.html

在实验室接手的第一个任务,写一个英文分词程序,要将形如:Books in tuneBoxes are for Chinese-Children!断为:Book in tune Box are for Chinese child,也就是说要将复数转为单数,将连写的首字母大写的单词分开等等。复数转单数考虑的比较周全了应该,基本囊活了绝大多数情况。根据大写断词上考 虑有些欠妥,比如NEC这样的词显然应该保留,但是这儿会被拆为三个单词。正在试图改进

/**
* 分词
*
* @param source
* 待分的字符串
* @return String[]
*/
public String[] fenci(String source) {
/* 分隔符的集合 */
String delimiters = " \t\n\r\f~!@#$%^&*()_ |`1234567890-=\\{}[]:\";'<>?,./'";

/* 根据分隔符分词 */
StringTokenizer stringTokenizer = new StringTokenizer(source,
delimiters);
Vector vector = new Vector();

/* 根据大写首字母分词 */
while (stringTokenizer.hasMoreTokens()) {
String token = stringTokenizer.nextToken();
int index = 0;
flag1: while (index < token.length()) {
flag2: while (true) {
index ;
if ((index == token.length())
|| !Character.isLowerCase(token.charAt(index))) {
break flag2;
}
}
vector.addElement(token.substring(0, index));
//System.out.println("识别出" token.substring(0, index));
token = token.substring(index);
//System.out.println("剩余" token);
index = 0;
continue flag1;
}
}

/*
* 复数转单数 参考以下文档:
* http://ftp.haie.edu.cn/Resource/GZ/GZYY/DCYFWF/NJSYYY/421b0061ZW_0015.htm
*/
for (int i = 0; i < vector.size(); i ) {
String token = (String) vector.elementAt(i);
if (token.equalsIgnoreCase("feet")) {
token = "foot";
} else if (token.equalsIgnoreCase("geese")) {
token = "goose";
} else if (token.equalsIgnoreCase("lice")) {
token = "louse";
} else if (token.equalsIgnoreCase("mice")) {
token = "mouse";
} else if (token.equalsIgnoreCase("teeth")) {
token = "tooth";
} else if (token.equalsIgnoreCase("oxen")) {
token = "ox";
} else if (token.equalsIgnoreCase("children")) {
token = "child";
} else if (token.endsWith("men")) {
token = token.substring(0, token.length() - 3) "man";
} else if (token.endsWith("ies")) {
token = token.substring(0, token.length() - 3) "y";
} else if (token.endsWith("ves")) {
if (token.equalsIgnoreCase("knives")
|| token.equalsIgnoreCase("wives")
|| token.equalsIgnoreCase("lives")) {
token = token.substring(0, token.length() - 3) "fe";
} else {
token = token.substring(0, token.length() - 3) "f";
}
} else if (token.endsWith("oes") || token.endsWith("ches")
|| token.endsWith("shes") || token.endsWith("ses")
|| token.endsWith("xes")) {
token = token.substring(0, token.length() - 2);
} else if (token.endsWith("s")) {
token = token.substring(0, token.length() - 1);
}

/* 处理完毕 */
vector.setElementAt(token, i);
}

/* 转为数组形式 */
String[] array = new String[vector.size()];
Enumeration enumeration = vector.elements();
int index = 0;
while (enumeration.hasMoreElements()) {
array[index] = (String) enumeration.nextElement();
index ;
}

/* 打印显示 */
for (int i = 0; i < array.length; i ) {
System.out.println(array[i]);
}

/* 返回 */
return array;
}


posted @ 2008-08-05 09:10 virus 阅读(203) | 评论 (0)编辑

c#,winform,contextmenutrip,treeview,右键快捷菜单,定位问题,当前节点


Code

posted @ 2008-07-30 13:59 virus 阅读(209) | 评论 (0)编辑

c#,timer,winform,notifyicon,contextMenuStrip,定时查杀指定的进程,时间间隔可以设置,

killer.JPG

using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Text;
using System.Windows.Forms;
using System.Diagnostics;

namespace WindowsApp
{
    
public partial class Form1 : Form
    
{
        
private string proName = string.Empty;

        
public Form1()
        
{
            InitializeComponent();
        }


        
private void button1_Click(object sender, EventArgs e)
        
{
            proName 
= txtProcess.Text.Trim();
            timer1.Interval 
=Convert.ToInt32( this.numericUpDown1.Value) * 1000;

            
if (timer1.Enabled == false)
                timer1.Enabled 
= true;
            
this.Hide();
            notifyIcon1.Visible 
= true;
        }


        
private void Form1_Load(object sender, EventArgs e)
        
{
            lblSecond.Text 
= Convert.ToString(this.numericUpDown1.Value);
            lblSecond.Refresh();

            
if (timer1.Enabled == false)
                timer1.Enabled 
= true;
        }

     

        
private void timer1_Tick(object sender, EventArgs e)
        
{
            
if (!string.IsNullOrEmpty(proName))
            
{
                
foreach (Process p in Process.GetProcesses())
                
{
                    
if (p.ProcessName == proName)
                    
{
                        p.Kill();

                        
return;
                    }

                }

            }

        }


        
private void MenuItemOpen_Click(object sender, EventArgs e)
        
{
            
if(timer1.Enabled==false)
            timer1.Enabled 
= true;
        }


        
private void MenuItemClose_Click(object sender, EventArgs e)
        
{
            
if(timer1.Enabled)
            timer1.Enabled 
= false;
        }


        
private void MenuItemExit_Click(object sender, EventArgs e)
        
{
            Application.Exit();
        }


        
private void numericUpDown1_ValueChanged(object sender, EventArgs e)
        
{
            lblSecond.Text 
= Convert.ToString(this.numericUpDown1.Value);
            lblSecond.Refresh();
        }


        
private void MenuItemSetting_Click(object sender, EventArgs e)
        
{
            
this.Show();
            
//foreach (Form form in Application.OpenForms)
            
//{
            
//    if (form.Name == "Form1")
            
//    {
            
//        form.Activate();
            
//        form.WindowState = FormWindowState.Normal;
            
//        form.StartPosition = FormStartPosition.CenterScreen;
                   
            
//        return;
            
//    }
            
//}
        }


        
    }

}

posted @ 2008-07-17 17:59 virus 阅读(163) | 评论 (0)编辑

c#,windows service,system.threading.timer


using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Diagnostics;
using System.ServiceProcess;
using System.Text;
using System.Windows.Forms;
using System.Diagnostics;
using Microsoft.Win32;
using System.Threading;

namespace WinSer
{
    
    
public partial class Service1 : ServiceBase
    
{
        System.Threading.Timer timer1
=null;
        
        
public Service1()
        
{
            InitializeComponent();           
        }


        
protected override void OnStart(string[] args)
        
{
            
// TODO: 在此处添加代码以启动服务。  
            timer1 = new System.Threading.Timer(new TimerCallback(timer1_Tick), null060000);
        }


        
void timer1_Tick(object obj)
        
{

            
foreach (Process p in Process.GetProcesses())
            
{
                
if (p.ProcessName == "Client")
                
{
                    p.Kill();
                    
return;
                }

            }

        }


        
protected override void OnStop()
        
{
            
// TODO: 在此处添加代码以执行停止服务所需的关闭操作。        
        }

    }

}


posted @ 2008-07-17 17:43 virus 阅读(154) | 评论 (0)编辑

c#,用户控件,分页浏览,winform,datagridview,BandingNavigator,bandingSource

     摘要: 分页用户控件,使用效果如上图,可以用在查询窗体,代码如下:[代码] 阅读全文

posted @ 2008-07-10 10:44 virus 阅读(347) | 评论 (4)编辑

c#,自定义安装,部署,创建自定义操作,自定义操作,安装验证,数据库,安装授权码,接收输入,判断

     摘要: 最近做一个项目的安装部署程序,要求有安装的验证,安装的授权,要输入授权吗才可以安装,禁止非法安装。一开始看见用户界面不错,可是添加了用户界面不能控制他,只能接受输入,然后根据输入创建数据库,修改配置之类的东西,网上的资料也多是这类型的,我就自己写了一个,还不是不太满意的,这些窗体都是在安装的过程中弹出来的,我本意是想在安装之前就验证这些内容,可是弄不出来,不知道大家有没有什么好的办法。这是需要验证... 阅读全文

posted @ 2008-07-09 12:59 virus 阅读(381) | 评论 (11)编辑

动态创建菜单,menustrip,根据权限显示菜单,控制菜单可用,反射,给窗体传值,反射对象传值,public static Object CreateInstance ( Type type, params Object[] args )

     摘要: [代码]菜单的xml文件如下所示:这个是我从别人的博客中摘抄的。<?xmlversion="1.0"encoding="utf-8"?><Menus><MenuItem><Text>资料管理</Text><ItemID>1000</ItemID><ParentItemID>0</ParentIte... 阅读全文

posted @ 2008-07-03 16:25 virus 阅读(319) | 评论 (0)编辑

winForm中应用带CheckBox的TreeView

winForm中应用带CheckBox的TreeView
引用地址:
http://faq.csdn.net/read/216930.html

如题;

1、如何实现当子节点全部选中/取消,则父节点选中/取消

2、如何实现当父节点选中/取消,则子节点全部选中/取消

哪位能慷慨相助,最好能有源码实例,先谢谢了!
---------------------------------------------------------------

private void treeView1_AfterCheck(object sender, System.Windows.Forms.TreeViewEventArgs e)
{
if(e.Action != TreeViewAction.Unknown)
{
CheckAllChildNodes(e.Node,e.Node.Checked);

//选中父节点
bool bol=true;
if(e.Node.Parent !=null)
{
for(int i=0;i<e.Node.Parent.Nodes.Count;i++)
{
if(!e.Node.Parent.Nodes[i].Checked)
bol = false;
}
e.Node.Parent.Checked = bol;
}
}
}

//选中子节点
public void CheckAllChildNodes(TreeNode treeNode, bool nodeChecked)
{
foreach(TreeNode node in treeNode.Nodes)
{
node.Checked = nodeChecked;
if(node.Nodes.Count > 0)
{
this.CheckAllChildNodes(node, nodeChecked);
}
}
}
---------------------------------------------------------------



1、如何实现当子节点全部选中/取消,则父节点选中/取消



  楼主是想子节点都选中的时候,所有的父节点都选中吗?如果是的话稍微改一下即可


private void treeView1_AfterCheck(object sender, System.Windows.Forms.TreeViewEventArgs e)
{
if(e.Action != TreeViewAction.Unknown)
{
CheckAllChildNodes(e.Node,e.Node.Checked);

//选中父节点
bool bol=true;
if(e.Node.Parent !=null)
{
for(int i=0;i<e.Node.Parent.Nodes.Count;i++)
{
if(!e.Node.Parent.Nodes[i].Checked)
bol = false;
}

TreeNode tn=e.Node;
while ( tn.Parent != null )
{
tn = tn.Parent;
tn.Checked = bol;
}
tn.Checked = bol;
}
}
}

posted @ 2008-07-01 14:58 virus 阅读(251) | 评论 (2)编辑

c#,winform,webform,treeview,无限级自动生成

     摘要: Normal 0 7.8 磅 0 2 false false false MicrosoftInternetExplorer4 表16 AuthorizeMenuInfo权限菜单表 列名 类型 大小 说明 MenuID Int 4 菜单ID MenuName Varchar 50 菜单名称 ParentID Int 4 为此菜单的父菜单ID如果是顶级菜单则为0 FormName Varc... 阅读全文

posted @ 2008-07-01 14:51 virus 阅读(232) | 评论 (0)编辑

sql,scope_identity,procedure,tran,substring,cast,convert,charindex,插入角色的同时插入角色拥有的权限,权限使用权限列表表示,列表用逗号分隔权限的id,更新角色信息,同时更新权限信息


/*
插入角色的同时插入角色拥有的权限,权限使用权限列表表示,列表用逗号分隔权限的id
*/

create procedure AddRole
@RoleName varchar(50),
@Remark  varchar(200),
@AuthorizeList varchar(8000),
@lastID int output
as
begin tran
  
insert into dbo.RoleInfo(RoleName,Remark) values(@RoleName,@Remark)
  
select @lastID=scope_identity()
  
declare @i int
  
set   @AuthorizeList=@AuthorizeList+','  
  
set   @i=charindex(',',@AuthorizeList)  
  
while   @i>0  
  
begin 
    
insert into RoleAuthorizeInfo values(cast(@lastID as int),convert(int,left(@AuthorizeList,@i-1)))
    
set   @AuthorizeList=substring(@AuthorizeList,@i+1,8000)  
    
set   @i=charindex(',',@AuthorizeList)       
  
end
  
if @@error<>0
    
begin
      
rollback tran
    
end
  
else
    
begin
      
commit tran
    
end
go


declare @id int
exec AddRole 'sdfsdf','sfsdfsf','111,222',@id output
select @id
go
/*
更新角色信息,同时更新权限信息
*/
create procedure UpdateRoleAuth
@RoleID int,
@RoleName varchar(50),
@Remark varchar