博文

ASP.NET中动态修改web.config中的设置项目(CS页代码) (2006-05-18 17:41:00)

摘要:   1 using System;
  2 using System.Collections;
  3 using System.ComponentModel;
  4 using System.Data;
  5 using System.Drawing;
  6 using System.Web;
  7 using System.Web.SessionState;
  8 using System.Web.UI;
  9 using System.Web.UI.WebControls;
 10 using System.Web.UI.HtmlControls;
 11 using System.Xml ;
 12 
 13 
 14 namespace WebApplication1
 15 {
 16 /// <summary>
 17 /// Summary description for WebForm1.
 18 /// </summary>
 19 public class WebForm1 : System.Web.UI.Page
 20 {
 21 protected System.Web.UI.WebControls.TextBox TextBo......

阅读全文(3502) | 评论:0

这几天一直在研究Enterprise Library的Configuration(2006-05-18 17:38:00)

摘要:首先 ConfigurationManager类实际上是对一些基本的操作配置数据方法的集合。这个类没有什么具体的用途。

最重要的类是ConfigurationBuilder类,它是建立配置最初的类。
还有就是ConfigurationFile类,它的用途是解析Xml格式的配置文件,还有就是对Xml文件内的节点进行添加、删除、更新的操作。
这个类微软把它写的太复杂了,具体的配置数据和元数据都由它解析。真复杂。

下面说一下当使用
ConfigurationManager.GetConfiguration("配置名称")
的时候,配置系统的操作流程。

首先,他使用ConfigurationManager.Current 内部属性来检查是否已经新建了ConfigurationBuilder类,如果已经建立则调用已经建立的ConfigurationBuilder类。很明显,这是一个典型的单件模式。
然后它调用ConfigurationBuilder类中的ReadConfiguration()方法,参数就是我们输入的那个配置名称。

当建立一个新的ConfigurationBuilder类实例的时候,它通过
System.AppDomain.CurrentDomain.SetupInformation.ConfigurationFile
属性获取应用程序主配置文件(WinForm是App.config,WebForm是web.config)的完整路径,然后新建一个ConfigurationFile的实例,通过它解析配置文件中“enterpriselibrary.configurationSettings”节点的内容,把所有内容生成一个ConfigurationSettings类的实例,这个实例包含了一个ConfigurationSectionDataCollection集合类实例,他的内容是ConfigurationSectionData。

这个ConfigurationSectionData类和ConfigurationSectionDataCollection类实例就是保存在应用程序配置文件中enterpriselibrary.configu......

阅读全文(3697) | 评论:0

为ASP.NET封装的SQL数据库访问类(2006-05-18 17:33:00)

摘要:using System;
using System.Configuration;
using System.Data;
using System.Data.SqlClient;
using System.Collections;

namespace MyCorporation.DepartMent.DataBase
{
/// <summary>
/// 通用数据库类
/// </summary>
public class DataBase
{

private string ConnStr = null;

public DataBase()
{
ConnStr = ConfigurationSettings.AppSettings["ConnStr"];
}
public DataBase(string Str)
{
try
{
this.ConnStr = Str;

}
catch(Exception ex)
{
throw ex;
}
}

/// <summary>
/// 返回connection对象
/// </summary>
/// <returns></returns>
public SqlConnection ReturnConn()
{
SqlConnection Conn = new SqlConnection(ConnStr);
Conn.Open();
return Conn;
}
public void Dispose(SqlConnection Conn)
{
if(Conn!=null)
{
Conn.Close();
Conn.Dispose();
}
GC.Collect();
}
/// <summary>
/// 运行SQL语句......

阅读全文(2166) | 评论:1

正则表达式的原理和介绍,应用(概念篇)(2006-05-18 17:32:00)

摘要:极小元的概念
定义:对于任何的集合S1与S2,当S1∈S2且S1∩S2=空(没有空这个符号,我用中文字空代替)时,则称S1为S2的一极小元。
OK说完了定义,我们来说说关于正则匹配的东东,可以把要寻找的那个字符串看成一个集合S1,而要寻找的是一个极小元,也就是一个子集
而离散的正则定理:每个不空的集合,都有一极小元,明确的说出了,正则匹配的道理,我们要去寻找的是一个子集,也就是把大的字符串进行了分割,而其元素为一个个小的字符串子集
正则公理的数学表达式:A≠空 推出 (存在x)(x∈A∧x∩A=空)

现在是编译原理篇,编译原理是根据离散的内容而来的
首先是要说正规文法和有限自动机
正规文法(Chomsky 3型文法)
正规式(Regular Expression):
定义:设A是非空的有限字母表,则:
1)任意,空,全集都是正规式
2)若α,β是正则,则α|β,α·β,α*,β*也是正则(关于这个是涉及到文法的问题了,也就是大家常用的w+之类的东东了)
3)正则只能通过有限次使用1,2规则而获得

写点儿正规式大家都熟悉的α=a+b+c+所代表的正规集为L(α),它可以写作
L(α)={abc,aabc,abc,abcc,aaabc…}看到这里大家如果用过正则的话,可以很明白的看出来联系了
关于正规集的一些数学方面的东东我就不多说了,比如交换率,结合率之类的
而关于多个一个一长串的比如用或语句进行的东西还需要进行方程组的运算,不过说了
其实这里还有一个概念就是当你用while之类的语句的时候其实就是底层在用正则公式,而js或vbs用正则之所以慢是因为多重的正则寻找,就是正则下的正则,可以看看木狐狸的一个寻找的最优公式的贴子,在多重寻找之后速度自然就慢了

现在用VBS写一下,简单的事例
<html> <head> <meta http-equiv="Content-Type" content="text/html; charset=gb2312">
<title>新建网页 3</title>
</head>
<script langua......

阅读全文(2382) | 评论:0

我对C#中事件委托的通俗看法 (2006-05-18 17:30:00)

摘要:这是我对C#中事件的通俗看法,比较适合初学者(其实我也是初学者)对C#事件的理解,本人因为刚入门,在学习C#的事件原理时,发现很多书上写得很不好理解,不适合初学者,所以我想在这里谈谈我对它的看法,可能不是很准确,如果说得对的,请大家鼓鼓掌,不对的或是不规范的地方,还请高手帮忙更正一下,谢谢了。

        在学C#之前,我看过《JAVA编程思想》,还有一些JAVA的入门级的书籍,其中对事件的讲解,总是用事件监听,事件适配器来举例, 所以我就一直认为,在C#中,RUNTIMING会一直监测每个控件的状态,如果有控件的状态发生改变和话,就会触发事件。         后来仔细看了一些例题之后,发现这个想法真的是很傻的。         其实,理解C#的事件原理,必须明白以下一点:         控件属性的改变,在它的类中,是由set来改变的,可以理解为由方法(method)来改变的,而不是简单的赋值。
     
        举个例子来说明:
class shape
{
   private int cvalue;
   public shape()
   {cvalue = 0;}
   public int colorvalue
      {
          set{cvalue = value;}
          get{return cvalue;}

阅读全文(1724) | 评论:0

xml的四种解析器原理及性能比较 (2006-05-18 17:30:00)

摘要:1: DOM
DOM 是用与平台和语言无关的方式表示 XML 文档的官方 W3C 标准。DOM 是以层次结构组织的节点或信息片断的集合。这个层次结构允许开发人员在树中寻找特定信息。分析该结构通常需要加载整个文档和构造层次结构,然后才能做任何工作。由于它是基于信息层次的,因而 DOM 被认为是基于树或基于对象的。DOM 以及广义的基于树的处理具有几个优点。首先,由于树在内存中是持久的,因此可以修改它以便应用程序能对数据和结构作出更改。它还可以在任何时候在树中上下导航,而不是像 SAX 那样是一次性的处理。DOM 使用起来也要简单得多。
  另一方面,对于特别大的文档,解析和加载整个文档可能很慢且很耗资源,因此使用其他手段来处理这样的数据会更好。这些基于事件的模型,比如 SAX。 2:SAX
  这种处理的优点非常类似于流媒体的优点。分析能够立即开始,而不是等待所有的数据被处理。而且,由于应用程序只是在读取数据时检查数据,因此不需要将数据存储在内存中。这对于大型文档来说是个巨大的优点。事实上,应用程序甚至不必解析整个文档;它可以在某个条件得到满足时停止解析。一般来说,SAX 还比它的替代者 DOM 快许多。 3: 选择 DOM 还是选择 SAX ?
  对于需要自己编写代码来处理 XML 文档的开发人员来说,选择 DOM 还是 SAX 解析模型是一个非常重要的设计决策。
  DOM 采用建立树形结构的方式访问 XML 文档,而 SAX 采用的事件模型。
  DOM 解析器把 XML 文档转化为一个包含其内容的树,并可以对树进行遍历。用 DOM 解析模型的优点是编程容易,开发人员只需要调用建树的指令,然后利用navigation APIs访问所需的树节点来完成任务。可以很容易的添加和修改树中的元素。然而由于使用 DOM 解析器的时候需要处理整个 XML 文档,所以对性能和内存的要求比较高,尤其是遇到很大的 XML 文件的时候。由于它的遍历能力,DOM 解析器常用于 XML 文档需要频繁的改变的服务中。
  SAX 解析器采用了基于事件的模型,它在解析 XML 文档的时候可以触发一系列的事件,当发现给定的tag的时候,它可以激活一个回调方法,告诉该方法制定的标签已经找到。SAX 对内存的要求通常会比较低,因为它让开发人员自......

阅读全文(4847) | 评论:0

ASP.NET提供文件下载函数(支持大文件、续传、速度限制、资源占用小)(2006-05-18 17:29:00)

摘要:// 输出硬盘文件,提供下载
  // 输入参数 _Request: Page.Request对象,  _Response: Page.Response对象, _fileName: 下载文件名, _fullPath: 带文件名下载路径, _speed 每秒允许下载的字节数
  // 返回是否成功
  public static bool ResponseFile(HttpRequest _Request,HttpResponse _Response,string _fileName,string _fullPath, long _speed)
  {
   try
   {
    FileStream myFile = new FileStream(_fullPath, FileMode.Open, FileAccess.Read, FileShare.ReadWrite);
    BinaryReader br = new BinaryReader(myFile);
    try
    {
     _Response.AddHeader("Accept-Ranges", "bytes");
     _Response.Buffer = false;
     long fileLength = myFile.Length;
     long startBytes = 0;
     
     int pack = 10240; //10K bytes

阅读全文(2463) | 评论:0

C#写的UBB代码类(2006-05-11 17:37:00)

摘要:参考了一些文章,整理了一下,大家可以直接拿去用吧,其实自从有了FreeTextBox这样的东东出现,UBB已经渐渐淡出江湖了。 using System; using System.Text; using System.Text.RegularExpressions; namespace Test.Com { /// /// 功能:UBB代码 /// 作者:Rexsp /// 日期:2004-4-6 /// public class UBB { #region 构造函数 public UBB() { // // TODO: 在此处添加构造函数逻辑 // } #endregion #region 公共静态方法 /// /// UBB代码处理函数 /// /// 输入字符串 /// 输出字符串 public static string UBBToHTML(string sDetail) { Regex r; Match m; #region 处理空格 sDetail = sDetail.Replace(" "," "); #endregion #region html标记符 sDetail = sDetail.Replace("<","<"); sDetail = sDetail.Replace(">",">"); #endregion #region 处[b][/b]标记 r = new Regex(@"(\[b\])([ \S\t]*?)(\[\/b\])",RegexOptions.IgnoreCase); for (m = r.Match(sDetail); m.Success; m = m.NextMatch()) { sDetail = sDetail.Replace(m.Groups[0].ToString(),"" + m.Groups[2].ToString() + ""); } #endregion #region 处[i][/i]标记 r = new Regex(@"(\[i\])([ \S\t]*?)(\[\/i\])",RegexOptions.IgnoreCase); for (m = r.Match(sDetail); m.Success; m = m.NextMatch()) { sDetail = sD......

阅读全文(2389) | 评论:0

ASP.NET中设计带事件定制控件(2006-05-11 17:29:00)

摘要: 在试图为客户开发一个在网络上运行的应用程序时,我发现有关正确使用.NET Web控件的讨论非常少。下面是使用.NET Web控件的常见问题:   1、如何使这些控件间相互通讯?   2、如何使这些控件保持状态?   3、如何将多个控件有效地联接在一个网页上?   我是一名ASP开发人员,发现转向ASP.NET并非是件轻而易举的事。我最初的想法是通过Session对象或使用查询语句保持状态,但发现这二种方法都太邋遢,而且,当试图对网页上的所有Web控件进行同步时就会出现问题。我在偶然间发现了一篇有关在Web控件中创建事件的文章,但在实践中仍然吃足了苦头,因此,我认为提供一个有关正确地创建Web控件并同时创建定制事件的实例是非常重要的。   讨论将按照下面的顺序进行:   1、创建一个Web控件   2、创建控件的定制事件和事件参数   3、在网页上正确地使用Web控件   在讨论期间,我还会向读者提供一些小技巧,使读者能够更精确和快速地开发应用程序。   我们在这里创建的Web控件是一个定制的下拉选择框,它基于标准版本的SQL Server或MSDE的pubs数据库中的stores表。在开发中我们使用了Visual Studio .NET 2003开发工具和C#编程语言。   在创建Pubs Web项目后,第一个任务(至少对于我是如此)是将WebForm1.aspx文件改名为Default.aspx,并修改类,使之与名字相符。然后是在IDE环境中创建一个文件夹结构,方便对象的查找。 (图1)   我创建了Controls目录存储所有创建的控件,以更方便地访问它们。根据创建控件时的粒度,我们可以进一步地细分Controls目录。   我将把控件命名为StoreSelector.ascx。第一步是在表单上添加DropDownList控件。 (图1)   我创建了Controls目录存储所有创建的控件,以更方便地访问它们。根据创建控件时的粒度,我们可以进一步地细分Controls目录。   我将把控件命名为StoreSelector.ascx。第一步是在表单上添加DropDownList控件。 (图2)   现在就该为该控件“布线”了。创建一个Dataset类的对象: #code private DataSet data; #end code   创建向下拉列表......

阅读全文(2024) | 评论:0

打包的时候 把数据库也打到里边(2006-05-11 17:12:00)

摘要:重点介绍如何在安装包中自动为客户创建数据库 步骤: 1、添加一个新项目->选择类库模板->命名为DBCustomAction 2、单击项目右键->添加新项->选择安装程序类(命名为DBCustomAction.cs) 3、在服务器资源管理器中添加->连接到数据库->指定用户密码(选择允许保存密码)->数据库选择master 4、切换到DBCustomAction.cs的视图状态->将服务器资源管理器数据库连接中的master.dbo拖动到designer中 5、添加一个新项sql.txt(注意要使用小写),输入下列sql代码 CREATE TABLE [dbo].[MK_Employees] ( [Name] [char] (30) COLLATE SQL_Latin1_General_CP1_CI_AS NOT NULL , [Rsvp] [int] NULL , [Requests] [nvarchar] (4000) COLLATE SQL_Latin1_General_CP1_CI_AS NULL ) ON [PRIMARY]; ALTER TABLE [dbo].[MK_Employees] WITH NOCHECK ADD CONSTRAINT [PK_MK_Employees] PRIMARY KEY CLUSTERED ( [Name] ) ON [PRIMARY]; (P.S:也可以直接用SqlServer导出) 6、在sql.txt的右键属性中->生成操作->嵌入的资源 7、将DBCustomAction.cs切换到代码视图,添加下列代码 private string GetSql(string Name) { try { Assembly Asm = Assembly.GetExecutingAssembly(); Stream strm = Asm.GetManifestResourceStream(Asm.GetName().Name + "."+Name); StreamReader reader = new StreamReader(strm); return reader.ReadToEnd(); } catch (Exception ex) { Console.Write(......

阅读全文(1662) | 评论:0