随笔 - 9  文章 - 0  评论 - 0 
  2009年8月10日
触发服务端事件,看上去很简单,直接写事件即可。但是实际上并不是那么简单,在用AJAX,开发时,发现只要ModelPopupExtender中TargetControlID关联“提交”按钮的Id,之后。然后在运行界面时,点击“提交”按钮是不会触发Button的OnClick事件的。这是为什么?
通过查资料发现,原来ajax server control render一个有异步通信功能的代码,并没有在触发这个事件的按钮更改任何的代码,还是原来的__doPostBack('','')回发方式。ajax core part 会托管这个__doPostBack。而对于ajax control toolkit,则是在初始化whole client page时执行一段代码然后动态的给绑定的控件加入触发的代码。所以你也看不到例如一个LinkButton触发事件的变化。(Indexed from http://www.cnblogs.com/RuiLei/archive/2008/03/03/1088929.html

解决方法:

Title    protected void Page_Load(object sender, EventArgs e)
    {
        if (Session["UserName"] == null)
        {
            Response.Redirect("~/LoginPage.aspx");
        }
        else
        {
            Btn_ModalOk.OnClientClick = "__doPostBack('" + this.Btn_ModalOk.UniqueID + "','')";//ModelPopupExtender触发服务器端事件
        }
    }   
    
posted @ 2009-08-10 14:46 henry.hr 阅读(85) 评论(0) 编辑
  2009年7月27日
Because of a new project, I started to use the oracle database since last week. It's a little hard for me to do so now because of some private things. So I need to record some basic methods here in order to show to my co-works how to use it!  All is from MSDN and have been modified a little!
 
此 C# 示例创建一个 Oracle 表并在其中加载数据。运行后面的示例之前必须先运行此示例,后面的示例会阐释如何使用 OracleDataReader 访问使用 OracleType 结构的数据。
using System.Data.OracleClient;
public void Setup(string connectionString)
{
   OracleConnection connection = new OracleConnection(connectionString);
   try
   {
      connection.Open();
      OracleCommand command = connection.CreateCommand();
      command.CommandText ="CREATE TABLE OracleTypesTable (MyVarchar2 varchar2(3000),MyNumber number(28,4) PRIMARY KEY,MyDate date, MyRaw raw(255))";
      command.ExecuteNonQuery();
      command.CommandText ="INSERT INTO OracleTypesTable VALUES ('test', 2, to_date('2000-01-11 12:54:01','yyyy-mm-dd hh24:mi:ss'), '0001020304')";
      command.ExecuteNonQuery();
      command.CommandText="SELECT * FROM OracleTypesTable";
   }
   catch(Exception)
   {
   }
   finally
   {
      connection.Close();
   }
}

此 C# 示例使用 OracleDataReader 访问数据,并使用几个 OracleType 结构显示数据。

public void ReadOracleTypesExample(string connectionString)
{
   OracleConnection connection = new OracleConnection(connectionString);
   connection.Open();
   OracleCommand command = connection.CreateCommand();
   try
   {
      command.CommandText = "SELECT * FROM OracleTypesTable";
      OracleDataReader reader = command.ExecuteReader();
      reader.Read();
      //Using the Oracle specific getters for each type is faster than
      //using GetOracleValue.
      //First column, MyVarchar2, is a VARCHAR2 data type in Oracle Server
      //and maps to OracleString.
      OracleString oraclestring1 = reader.GetOracleString(0);
      Console.WriteLine("OracleString " + oraclestring1.ToString());

      //Second column, MyNumber, is a NUMBER data type in Oracle Server
      //and maps to OracleNumber.
      OracleNumber oraclenumber1 = reader.GetOracleNumber(1);
      Console.WriteLine("OracleNumber " + oraclenumber1.ToString());

      //Third column, MyDate, is a DATA data type in Oracle Server
      //and maps to OracleDateTime.
      OracleDateTime oracledatetime1 = reader.GetOracleDateTime(2);
      Console.WriteLine("OracleDateTime " + oracledatetime1.ToString());

      //Fourth column, MyRaw, is a RAW data type in Oracle Server and
      //maps to OracleBinary.
      OracleBinary oraclebinary1 = reader.GetOracleBinary(3);

      //Calling value on a null OracleBinary throws
      //OracleNullValueException; therefore, check for a null value.
      if (oraclebinary1.IsNull==false)
      {
         foreach(byte b in oraclebinary1.Value)
         {
            Console.WriteLine("byte " + b.ToString());
         }
      }
      reader.Close();
   }
   catch(Exception e)
   {
      Console.WriteLine(e.ToString());
   }
   finally
   {
      connection.Close();
   }
}

下面的示例创建一个 OracleConnection、一个 OracleCommand 和一个 OracleDataReader。该示例读取全部数据,并将这些数据写到控制台。最后,该示例先关闭 OracleDataReader,然后关闭 OracleConnection
public void ReadData(string connectionString)
{
    string queryString = "SELECT EmpNo, EName FROM Emp";
    using (OracleConnection connection = new OracleConnection(connectionString))
    {
        OracleCommand command = new OracleCommand(queryString, connection);
        connection.Open();
        OracleDataReader reader;
        reader = command.ExecuteReader();
        // Always call Read before accessing data.
        while (reader.Read())
        {
            Console.WriteLine(reader.GetInt32(0) + ", " + reader.GetString(1));
        }
        // always call Close when done reading.
        reader.Close();
    }
}

Be aware that, the following is our project code!

       string ConnectionString = "Data Source=;Persist Security Info=True;User ID=;PASSWORD=";
        OracleConnection conn = new OracleConnection(ConnectionString);
        //OracleConnection conn = new OracleConnection(ConfigurationSettings.AppSettings["ConnectionString"]);
        try
        {
            conn.Open();
            OracleCommand cmd = conn.CreateCommand();
            cmd.CommandText = "select * from T_XTGL_CZRY where LOGIN = '" + UserName + "'"; //在这儿写sql语句
            OracleDataReader odr = cmd.ExecuteReader(); //创建一个OracleDateReader对象
            while (odr.Read()) //读取数据,如果odr.Read()返回为false的话,就说明到记录集的尾部了               
            {
                i++;
            }
            odr.Close();
        }
        catch (Exception ee)
        {
            Response.Write(ee.Message); //如果有错误,输出错误信息
        }
        finally
        {
            conn.Close(); //关闭连接
        }

posted @ 2009-07-27 14:31 henry.hr 阅读(228) 评论(0) 编辑
  2009年6月26日

顶级1.     

   1. IJCAI: International Joint Conference on AI

 

2.        AAAI: American Association for AI National Conference

 

3.        COLT: Conference on Learning Theory

 

4.        ICNN/IJCNN: Intl (Joint) Conference on Neural Networks

 

5.        CVPR: IEEE Conf on Comp Vision and Pattern Recognition

 

6.        ICCV: International Conference on Computer Vision

 

7.        ECCV: European Conference on Computer Vision

 

8.        DCC: Data Compression Conference

 

9.        ACM-SIGGRAPH

 

10.    ACM-MM: ACM Multimedia Conference

 

11.    ACM SIGCOM: ACM Conf on Communication Architectures, Protocols & Apps

 

12.    ACM SIGMETRICS

 

13.    ACM SIGMOD: ACM SIGMOD Conf on Management of Data

 

14.    ACM SIGIR: ACM Conference on Information Retrieval

 

15.    IEEE INFOCOM: conference on computer communications

 

16.    IEEE ICC: International conference on communications

 

17.    GLOBECOM:IEEE Global communication conference

 

18.    ACM RECOMB: Int. Conference on Research in Computational Molecular Biology

 

19.    ACM SIGKDD: Knowledge Discovery in Database

 

20.    ICML: International Conference on Machine Learning

 

21.    ISMB: International Society for Computational Biology - Intelligent Systems for Molecular Biology

 

22.    ECCB: European Bioinformatics Institute - the European Conference on Computational Biology

 

 

一级

模式识别,计算机视觉、图像处理,多媒体技术,人机交互

 

23.    IEEE ICIP: International conference on Image Processing (4 pages)

 

24.    IEEE ICASSP: International Conference on Acoustics, Speech and Signal Processing

 

25.    IEEE ICMI: International Conference on Multimodal Interface

 

26.    IEEE ICME: International Conference on Multimedia and Expo

 

27.    FGR: Face & Gesture Recognition

 

28.    ICPR: International Conference on Pattern Recognition

 

29.   PCM: Pacific-Rim Conference on Multimedia

 

30.    ACCV: Asian Conference on Computer Vision

 

31.    IWDW: digital watermarking

posted @ 2009-06-26 10:41 henry.hr 阅读(187) 评论(0) 编辑

在开发学校期刊社办公业务系统的时候,对方要求采用B/S架构,要将其门户平台和办公业务系统整合在一起。经过考察,team选择SubSonic作为快速开发的基础平台架构。

SubSonic最大的优点就是方便,可根据用户框架和代码自动生成DAL,这样在数据库变更的时候就不用操心了。

关于SubSonic的详细信息可以登录其官方网站查询:http://subsonicproject.com/

现将配置方法记录于下:

自动在临时文件夹生成:
(1)修改web.config
    在web.config里configuration节下面加入一下内容:

 <configSections>
         <section name="SubSonicService" type="SubSonic.SubSonicSection, SubSonic" requirePermission="false"/>
     </configSections>
     <appSettings/>
     <connectionStrings>
   <add name="ConnectionString" connectionString="data source=D:\qksoa\App_Data\qksoa.db3" providerName="System.Data.SQLite" />
     </connectionStrings>
     <SubSonicService defaultProvider="aksoa" enableTrace="false" templateDirectory="">
              
<providers>
               
<clear/>
               
<add name="aksoa" type="SubSonic.SQLiteDataProvider, SubSonic" connectionStringName="qksoaConnectionString" generatedNamespace="qksoa.DAL"  removeUnderscores="false" spClassName="SPs"/>
  </
providers>
 </
SubSonicService>

(2)添加对subsonic.dll文件的引用
        右键项目--添加引用--浏览
(3)在app_code文件下加入subsonic.abp文件
        这里subsonic.abp是根据buildProviders配置节里面的extension=".abp"而来, .abp代表application build provider,目的是为了在编译时自动生成数据访问层,这些代码放在了框架的临时文件夹里面。
(4)编译

或者在Visual Studio中添加External Tool.

运行SubsonicTool外部工具
然后菜单-工具下就有一个subsonictool的工具按钮,直接点击,就会弹出:

输入相应的目录,ok就能在generated文件夹下生成一系列数据访问层的类代码。

 

 

 


posted @ 2009-06-26 10:06 henry.hr 阅读(525) 评论(0) 编辑
  2009年6月13日

一看Themes、Skins这2名字就都知道是用来做什么的了吧,下面就说下它是做什么的(怎么都知道了还说,~_~),利用Themes我们可以很容易的更改控件、页面的风格,而不需要修改我们的代码和页面文件。
Themes文件被单独的放在1个App_Themes文件夹下面,与你的程序是完全分开的。
使用themes
1、在1个页面中应用Theme:
      如果想在某1个页面中应用Theme,直接在aspx文件中修改<%@ Page Theme="..." %>,比如你想这个页面应用default2 theme,设置<%@ Page Theme="default2" %>就OK

2、在所有页面应用同1个Theme:
      如果要在所有页面上使用相同的Theme,在web.config中的<system.web>节点下加上句<pages theme="..."/>

3、让控件不应用Theme:
        第1个例子中我们看到了2个Label的风格都变了,就是说.skin文件中的风格在页面上所有Label都起作用了。但有时我们希望某1个Label不应用.skin中的风格,这时你只需设置Label的EnableTheming属性为false的时候就可以了。也许你还想不同的label显示不同的风格,你只需设置label的SkinID属性就可以。

 

前面已经说了在aspx文件头使用 <%@ Page Theme="..." %> 来使用theme,而用这个方法应用theme中的风格将会覆盖你写在aspx中的控件属性style。

 而使用<%@ Page StyleSheetTheme="..." %>应用theme就不会覆盖你在aspx文件中写的属性style:

控件应用style属性的顺序如下:
a、StyleSheetTheme引用的风格
b、代码设定的控件属性(覆盖StyleSheetTheme)
c、Theme引用的风格(覆盖前面2个)

 

 

 

ASP.NET 2.0 中增加了内建的 MasterPage 的支持,这对我们来说是一个很大的便利。然而经过一段时间的使用,我发现 MasterPage 并不是那么完美:嵌套的 MasterPage 不能支持设计时界面,以及下面要提到的Content Page 中增加 CSS 的问题。

通常,在没有 2.0 之前,我们在页面里要增加一个 CSS 引用的语法如下:

<link rel="stylesheet" href="css/test.css" />


原本是很平常的做法。但是在一个 MasterPage 的子页面中,出现了一个很尴尬的局面,就是:我们该把上述代码放到什么位置?
因为 MasterPage 的具体内容页面中,只能定义一个个的 <asp:Content /> 标签的内容。我们按照通常的做法在 aspx 里面无法对页面的 <header/> 内容进行控制。而这个 <link/> 标签又必须放在 <header/> 内。我试验过在 <asp:Content /> 内部加入这行代码,但是会提示出错的。
同时,我们也无法在 MasterPage 的 <header/> 内部放好一个 ContentPlaceHolder 用于将来放入 CSS 的引用代码。
因此我的做法是定义了一个 helper 类如下:

static public class ControlHelper
{
    
static public void AddStyleSheet(Page page, string cssPath)
    {
        HtmlLink link 
= new HtmlLink();
        link.Href 
= cssPath;
        link.Attributes[
"rel"= "stylesheet";
        link.Attributes[
"type"= "text/css";
        page.Header.Controls.Add(link);
    }
}


这样,在具体页面,我们就可以通过如下代码添加 CSS 引用:

protected void Page_Load(object sender, EventArgs e)
{
    ControlHelper.AddStyleSheet(
this.Page, "css/projectPage.css");    
}


并且,这个代码支持在具体内容页面,或者一个嵌套的 Master Page 中使用。

说到这里也许有人会问,为什么要把 CSS 分开成这样来加载呢?有必要吗?我把所有页面的 CSS 定义到几个公共 CSS 文件里岂不是很好?

其实,熟悉 web 标准的 HTML 制作的朋友一定知道,在比较完美的状态下,页面的 html 和用于表现的 CSS 应该彻底分离。而我们基于 web 标准的设计,通常是先做出一个 Master Page 中各个框架 div 的定位代码,以及 header,footer 部分的修饰代码。这些是每个内容页面都要用到的,会放在一个统一的 CSS 里面。其他的具体内容页面,每个页面又会有各自不同的内容的布局,修饰样式,因此我把每个具体页面特定的部分放在它自己的 CSS里。这样就形成了一个按照 Master Page 的实现层次(可嵌套),逐层合并的 CSS 模型。其好处是实现了每个 CSS 文件的职责分离,更容易理解和维护。

posted @ 2009-06-13 22:15 henry.hr 阅读(295) 评论(0) 编辑

国内的

<iframe style="WIDTH: 190px; HEIGHT: 52px" name="weatherreport" marginwidth="0" marginheight="0" 
                src="http://weather.265.com/weather.htm" frameborder="0" scrolling="no"></iframe> 
                
 yahoo!           <iframe marginwidth="0" marginheight="0" height="30" frameborder="0" 
                scrolling="no" width="250" src="http://weather.cn.yahoo.com/cframe.html"></iframe>
            
 sina           <iframe id='ifm2' width='260' HEIGHT='70' align='center' MARGINwidth='0' marginheight='0' HSPACE='0' VSPACE='0' 
                FRAMEBORDER='0' SCROLLING='NO' src="http://news.sina.com.cn/iframe/weather/130101.html"></iframe>
                
  163          <iframe width='240' HEIGHT='110' align='center' MARGINwidth='0' marginheight='0' HSPACE='0' VSPACE='0' 
                FRAMEBORDER='0' SCROLLING='NO' SRC='http://mimg.163.com/tianqi/city/57679.html'></iframe>
                
  sohu          <iframe src="http://web.sogou.com/weather/CN1101.html" width="140" height="70" frameborder="0" 
                marginwidth="0" marginheight="0" scrolling="no" allowtransparency="true"></iframe>

中央气象台  <iframe src="http://www.ttyyy.com/tianqi/tq.html" width="160"     height="60"  frameborder="no" border="0" marginwidth="0" marginheight="0" scrolling="no"></iframe>

posted @ 2009-06-13 22:14 henry.hr 阅读(351) 评论(0) 编辑

一、抽象类:
      抽象类是特殊的类,只是不能被实例化;除此以外,具有类的其他特性;重要的是抽象类可以包括抽象方法,这是普通类所不能的。抽象方法只能声明于抽象类中,且不包含任何实现,派生类必须覆盖它们。另外,抽象类可以派生自一个抽象类,可以覆盖基类的抽象方法也可以不覆盖,如果不覆盖,则其派生类必须覆盖它们。

       二、接口:
      接口是引用类型的,类似于类,和抽象类的相似之处有三点:
       1、不能实例化;
       2、包含未实现的方法声明;
       3、派生类必须实现未实现的方法,抽象类是抽象方法,接口则是所有成员(不仅是方法包括其他成员);

       另外,接口有如下特性:
接口除了可以包含方法之外,还可以包含属性、索引器、事件,而且这些成员都被定义为公有的。除此之外,不能包含任何其他的成员,例如:常量、域、构造函数、析构函数、静态成员。一个类可以直接继承多个接口,但只能直接继承一个类(包括抽象类)。


      三、抽象类和接口的区别:
      1.类是对对象的抽象,可以把抽象类理解为把类当作对象,抽象成的类叫做抽象类.而接口只是一个行为的规范或规定,微软的自定义接口总是后带able字段,证明其是表述一类类“我能做。。。”.抽象类更多的是定义在一系列紧密相关的类间,而接口大多数是关系疏松但都实现某一功能的类中. 
      2.接口基本上不具备继承的任何具体特点,它仅仅承诺了能够调用的方法;     
      3.一个类一次可以实现若干个接口,但是只能扩展一个父类     
      4.接口可以用于支持回调,而继承并不具备这个特点.     
      5.抽象类不能被密封。   
      6.抽象类实现的具体方法默认为虚的,但实现接口的类中的接口方法却默认为非虚的,当然您也可以声明为虚的. 
      7.(接口)与非抽象类类似,抽象类也必须为在该类的基类列表中列出的接口的所有成员提供它自己的实现。但是,允许抽象类将接口方法映射到抽象方法上。   
      8.抽象类实现了oop中的一个原则,把可变的与不可变的分离。抽象类和接口就是定义为不可变的,而把可变的座位子类去实现。   
      9.好的接口定义应该是具有专一功能性的,而不是多功能的,否则造成接口污染。如果一个类只是实现了这个接口的中一个功能,而不得不去实现接口中的其他方法,就叫接口污染。   
     10.尽量避免使用继承来实现组建功能,而是使用黑箱复用,即对象组合。因为继承的层次增多,造成最直接的后果就是当你调用这个类群中某一类,就必须把他们全部加载到栈中!后果可想而知.(结合堆栈原理理解)。同时,有心的朋友可以留意到微软在构建一个类时,很多时候用到了对象组合的方法。比如asp.net中,Page类,有Server Request等属性,但其实他们都是某个类的对象。使用Page类的这个对象来调用另外的类的方法和属性,这个是非常基本的一个设计原则。   
     11.如果抽象类实现接口,则可以把接口中方法映射到抽象类中作为抽象方法而不必实现,而在抽象类的子类中实现接口中方法.
   
      四、抽象类和接口的使用:
      1. 如果预计要创建组件的多个版本,则创建抽象类。抽象类提供简单的方法来控制组件版本。
      2.如果创建的功能将在大范围的全异对象间使用,则使用接口。如果要设计小而简练的功能块,则使用接口。
      3.如果要设计大的功能单元,则使用抽象类.如果要在组件的所有实现间提供通用的已实现功能,则使用抽象类。   
      4.抽象类主要用于关系密切的对象;而接口适合为不相关的类提供通用功能。


 以下是在网上看到的几个形象比喻:
1.飞机会飞,鸟会飞,他们都继承了同一个接口“飞”;但是F22属于飞机抽象类,鸽子属于鸟抽象类。
2. 就像铁门木门都是门(抽象类),你想要个门我给不了(不能实例化),但我可以给你个具体的铁门或木门(多态);而且只能是门,你不能说它是窗(单继承);一个门可以有锁(接口)也可以有门铃(多实现)。 门(抽象类)定义了你是什么,接口(锁)规定了你能做什么(一个接口最好只能做一件事,你不能要求锁也能发出声音吧(接口污染))。

posted @ 2009-06-13 22:12 henry.hr 阅读(37) 评论(0) 编辑

在项目中进行中客户提到,要能够把不同数据库的数据在后台进行互相导入导出的操作。但是又不想加重系统管理员的工作量。所以根据惯例,我采用存储过程进行操作,当前台用户点击提交数据的时候,调用该存储过程,将数据同步导入到其他的数据库中去。

 

set ANSI_NULLS ON

set QUOTED_IDENTIFIER ON

GO

-- =============================================

-- Author: Henry Hu

-- Create date: 2009.03.05

-- Description: Export data from ISDM database 

--                   to Forum database 

-- =============================================

ALTER PROCEDURE [dbo].[ExportData] //ALTER是修改存储过程,新建是CREATE

 

@id char(14) //定义一个输入变量

 

AS //声明其他变量

 

DECLARE @authors varchar(1000)

DECLARE @title varchar(2000)

DECLARE @abstract varchar(2000)

DECLARE @subject int

DECLARE @paperpath varchar(2000)

DECLARE @vediopath varchar(2000)

DECLARE @temp1 int

DECLARE @temp2 int

DECLARE @temp3 int

DECLARE @temp4 datetime

DECLARE @temp5 varchar(max)

 

SELECT @title=a.Aticl_Title_En, @abstract=a.Abstract_En, @authors=dbo.getauthornamestr(a.Aticl_Id),

       @subject=a.Subject, @paperpath=a.Aticl_Path, @vediopath=a.Vedio_Path

FROM dbo.Articl_Info as a

WHERE a.Aticl_Id = @id //从源库的表中取出数据,存放入临时变量中

 

SET @temp1=0

SET @temp2=1

SET @temp3=10000

SET @temp4='1753-1-1 0:00:00'

SET @temp5='<p>Abstract:'+@abstract+'</p><p>Authors:'+@authors+'</p><p><embed src="'+@vediopath+'" type="application/x-shockwave-flash" paly="true" loop="true" menu="true"></embed></p><p><A title="Download Now!" href="'+@vediopath+'">Download this vedio..</A></p><p><A title="Download Now!" href="'+@paperpath+'">Download this paper..</A></p>'

 

INSERT into forum.dbo.tb_Entities(ParentID, EntityType, IntField4, IntField5, IntField6, VarChar2, VarChar3, VarChar4, VarChar6, DateTime1, DateTime2, DateTime3, NText1)//插入目标库

 

VALUES (@temp1, @temp2, @temp1, @temp3, @temp3, 'Detail', 'admin', 'admin', @title, getdate(), getdate(), @temp4, @temp5) //插入的值

 

go

 

注意:该存储过程的不同数据库均位于同一台服务器上。如果数据库位于不同的服务器,那么在执行存储过程之前应该建立数据库连接,

  启用发布服务器/订阅服务器  下例将服务器设置为发布服务器/订阅服务器的组合。   

    
  USE   master //此处为数据库名  
  EXEC   sp_serveroption   'srv_lnk'',   'dpub',   'TRUE' 

 

或者采用SQL Management

在企业管理器中-->数据库-->安全-->链接数据库-->点击你需要配置的链接数据库-->属性页-->"server   Options"-->勾选RPC和RPC   Out  

posted @ 2009-06-13 22:11 henry.hr 阅读(21) 评论(0) 编辑

从一年前就说要开个博,把平时学的一些东西记录下来,既u能给自己提个醒,也能和大家交流一下!但总是由于各种各样的原因耽搁了。

今天终于下定决心,过来开了个博,希望能够发挥一些些作用!

posted @ 2009-06-13 22:02 henry.hr 阅读(127) 评论(0) 编辑