对于企业信息化的一点感悟

1、对于很多企业,已经实现办公无纸化,大部分的工作都是通过word和excel等办公软件实现。很多企业在此基础上提出信息化建设,实现办公自动化、网络化,也就是通常所说的建立业务系统。总结多个企业信息系统的建设,其实要实现的功能无非就是保留原有工作人员所熟悉的操作方式,如word和excel等,这样原来的表形式(表结构)还都能就继续使用,工作人员很容易适应系统。而这个过程的实质就是实现xls、doc这样的非结构化数据的结构化。达到:数据可以复用,减少冗余工作,很多冗余表的制作就变成了多样化的select。而这个过程矛盾的转化就在于:将工作人员的繁琐工作转化为计算机和开发人员的处理

2、在软件系统的开发中,先将功能原型抽象出来并进行实现是非常有用的:第一,不必首先理会繁杂的业务逻辑关系;第二,可适应不同的业务逻辑关系,灵活性好。

Discuz RSS订阅页面地址

如果希望实现在自己的站点上实时显示相关论坛的最新帖子,可以利用Discuz的RSS。

Discuz论坛的默认RSS页面地址:

http://yourdomainname/forum.php?mod=rss&auth=0

拿Discuz的官方论坛为例,其地址为:

http://www.discuz.net/forum.php?mod=rss&auth=0

如果直接在浏览器中访问该地址,会提示下载,下载的文件名为forum.php。这个文件不是代码文件,而是RSS的最新数据。

打开此文件,结果如下图:
discuz_forum_rss

 

剩下的就是解析该文件啦。

 

PLSQL远程连接数据库错误:监听程序当前无法识别连接描述符中请求的服务

远程服务端配置

1. 数据库配置
因为要为外界客户端提供数据服务,所以一定要将 [数据库操作模式] 配置为 “共享服务模式”. 我就是犯了这个错误,将操作模式配置成了”专用服务器模式”,导至远程客户端无法正常连接.
如果不能确定数据库的操作模式,可以打开ORACLE “Database Configuration Assistant” 工具的 “在数据库中配置数据库选项” 进行配置.
如果新建数据库一定不要忘了将 [数据库操作模式] 配置为 “共享服务模式”.

2. 数据库服务
确定数据库服务已经启动.
方法: 命令行 下键入 “services.msc”
在 WINDOWS服务 窗口中找到您的数据库服务(一般都以 OracleService数据库实例名 的形式命名),查看是否为”已启动”状态,否则请启动该服务.

3. 监听程序
确定数据库已经附加到监听程序中,并且监听程序已启用.
方法: 命令行 下键入 “lsnrctl”
在 lsnrctl控制台 窗口中键入 “services 监听程序名”
如果出现 “摘要信息” 则说明监听程序已启动
如果出现 “无监听器” 字样,说明监听程序未被启动
在 lsnrctl控制台 窗口中键入 “start 监听程序名” 以启动监听程序
也可在 命令行 下键入 “services.msc”
在 WINDOWS服务 窗口中找到您的监听程序服务(一般都以 OracleOraHome92TNSListener监听程序名 的形式命名,默认的监听程序服务名为 “OracleOraDb10g_home1TNSListener”),查看是否为”已启动”状态,否则请启动该服务.

4. 网络状态
确定监听程序所使用的端口已被列入防火墙允许的行列.

本地客户端配置

1. 测试连接
方法: 命令行 下键入 “tnsping 服务端IP地址”
如果出现 “OK(XX毫秒)” 字样,说明可以与服务端建立连接.否则请检查服务端配置.

2. 添加服务名
方法:
1、打开ORACLE “Net Configuration Assistant” 工具 -> “本地NET服务名配置” ;
2、 “添加” -> 选择ORACLE数据库或服务-> 输入服务名(建库时输入的全局数据库名:oracle10默认是o10g) ;
3、TCP -> 主机名中输入服务端IP地址,端口输入服务端监听程序所监听的端口;
4、是,进行测试 -> 首次测试可能会失败,因为默认的用户名口令不一定和服务端的匹配,点击 更改登录 输入有效用户名和口令确定后如出现”测试成功”,说明连接成功;
5、点击 下一步 -> 输入本地服务名 -> 直到完成.

3. 登录数据库
在SQLPLUS中以sys用户登录时的设置格式如下:

.Net中将数据库结果转换为XML格式数据 —— 使用FOR XML AUTO控制XML输出

sql2005可以直接输出xml 查询结果返回一个xml字符串
在查询语句的末尾加上
FOR XML AUTO,TYPE
例如: select * from table 1 FOR XML AUTO,TYPE

然后用这句sql查询返回一个xml的string,用webservice直接让flash调用方法就好了

另 dataset 可以直接生成xml字符串,很方便
例如:DataSet ds=new DataSet();
string strXML=ds.GetXml();
就是多了一个中间环节,效率不高。
 

使用FOR XML AUTO控制XML输出

这篇文章描述如何通过使用FOR XML AUTO更好的控制XML输出格式。例如添加XML标记。用这个来替代难于理解的FOR XML EXPLICIT 语句。如果你在应用程序中即将反序列化输出的XML,你就会觉得这个信息对你有用。

在For XML从句中,您通常使用下列方式之一:

RAW

AUTO

EXPLICIT

PATH

如果你想完全掌控产生的XML,可以使用FOR XML EXPLICIT。但是它理解起来相当的困难,后面还要维护复杂的select语句。FOR XML AUTO能产生最可读的SELECT语句,但是它也有缺点,不容易控制生成的XML。但使用一些技巧,例如通过使用额外的PATH选项,你可以做一些超过你预期的事情。RAW选项是很少使用,因此不讨论。PATH 选项允许您很容易地混合属性和元素。现在,让我们来使用FOR XML AUTO

在这个例子中,我们使用的是1:N关系的两个简单的数据表。一个表(SalesOrder)包含客户信息的订单,例外一张表(Items)中包含的具体的项。一个订单可以有多个项,一个项往往只属于一个订单。

以最容易的开始。

SELECT * FROM salesorder

产生:

ordernumber customername customerstreet
——— ———— ————–
1 parker first av
2 lesley sec av

如果你想要使结果集是XML,我们添加FOR XML AUTO 语句:

SELECT * FROM salesorder FOR XML AUTO

它产生:

<salesorder ordernumber=”1″ customername=”parker” customerstreet=”first av”/>
<salesorder ordernumber=”2″ customername=”lesley” customerstreet=”sec av”/>

现在,字段是作属性的,大多数情况下希望他们是元素。为了做到这点,添加ELEMENTS 参数

SELECT * FROM salesorder FOR XML AUTO, ELEMENTS

它产生:

<salesorder>
<ordernumber>1</ordernumber>
<customername>parker</customername>
</salesorder>

如果你想要更改’salesorder‘ 标签,使用:

SELECT * FROM salesorder AS niceorder FOR XML AUTO, ELEMENTS

它产生:

<niceorder>
<ordernumber>1</ordernumber>
<customername>parker</customername>
</niceorder>

当然,这一招也适用的列名:

SELECT ordernumber AS order_no FROM salesorder WHERE ordernumber = 1 FOR XML AUTO, ELEMENTS

它产生:

<salesorder>
<order_no>1</order_no >
</salesorder>

如果你想添加其他标签或节点?例如,对有关客户信息添加’customer”标记?但对FOR XML AUTO来说,被证明是很困难的事件。一个可能的解决方案是使用SELF JOIN (join相同的表),但我找到一个更容易办法。经过一番摆弄和修订,我们使用子查询和有点滥用FOR XML PATH命令。

代码

SELECT
ordernumber,
(
SELECT customername ,
customerstreet
FOR XML PATH(),
TYPE, ELEMENTS)
as customer
FROM
salesorder
FOR XML AUTO, ELEMENTS

它产生:

代码

<salesorder>
<ordernumber>1</ordernumber>
<customer>
<customername>parker</customername>
<customerstreet>first av</customerstreet>
</customer>
</salesorder>
<salesorder>
<ordernumber>2</ordernumber>
<customer>
<customername>lesley</customername>
<customerstreet>sec av</customerstreet>
</customer>
</salesorder>

注意使用附加的’TYPE‘参数。这将确保子查询的结果将返回的是一个XML类型 (作为整个XML类型的结果的一部分),而不是NVARCHAR(MAX)类型。如果您要对整个结果添加外围标签,也是简单的小把戏:

SELECT(
SELECT
customername
FROM
salesorder
FOR XML AUTO, TYPE, ELEMENTS
)
AS orderrequest FOR XML PATH(), TYPE, ELEMENTS

它产生:

<orderrequest>
<salesorder>
<customername>parker</customername>
</salesorder>
<salesorder>
<customername>lesley</customername>
</salesorder>
</orderrequest>

为什么我们在子查询中不使用FOR XML AUTO?试试,它会产生一个错误。当子查询是查询一个实际的表时,您才能使用FOR XML AUTO(上述显然不是)。

如果您想对所生产的XML完全控制,子查询是条出路。比方说,我们希望,每个订单,客户的名字和所有的项都属于订单。为此,您使用这样的相关子查询:

SELECT
customername ,
(
SELECT * FROM item WHERE item.ordernumber =
salesorder.ordernumber
FOR XML AUTO, TYPE, ELEMENTS)
FROM
salesorder
FOR XML AUTO, ELEMENTS

它产生:

代码

<salesorder>
<customername>parker</customername>
<item>
<itemnumber>10</itemnumber>
<description>pen</description>
<ordernumber>1</ordernumber>
</item>
<item>
<itemnumber>11</itemnumber>
<description>paper</description>
<ordernumber>1</ordernumber>
</item>
</salesorder>

当使用关联子查询,你可以使用规则的FOR XML AUTO, TYPE, ELEMENTS 语句。如果你想要在’items’外围有一个标签,只需在子查询后添加as,例如:

  • 代码

    SELECT
    customername ,
    (
    SELECT * FROM item WHERE item.ordernumber =
    salesorder.ordernumber
    FOR XML AUTO, TYPE, ELEMENTS)
    AS orderitems
    FROM
    salesorder
    FOR XML AUTO, ELEMENTS

    它产生:

    代码

    <salesorder>
    <customername>parker</customername>
    <orderitems>
    <item>
    <itemnumber>10</itemnumber>
    <description>pen</description>
    <ordernumber>1</ordernumber>
    </item>
    <item>
    <itemnumber>11</itemnumber>
    <description>paper</description>
    <ordernumber>1</ordernumber>
    </item>
    </orderitems>
    </salesorder>

    为什么我们不只是简单的连接item表和order表。这有时会导致不必要的和不可预测的情况,涉及到产生XML布局:

  • 例如:

  • SELECT
    item.description,
    salesorder.customername
    FROM
    salesorder
    INNER JOIN item ON item.ordernumber = salesorder.ordernumber
    FOR XML AUTO, ELEMENTS

    会产生这样的垃圾:

    代码

    <item>
    <description>pen</description>
    <salesorder>
    <customername>parker</customername>
    </salesorder>
    </item>
    <item>
    <description>paper</description>
    <salesorder>
    <customername>parker</customername>
    </salesorder>
    </item>

  • 此外,如果使用连接查询,你很难添加一个外围的标签。因此,对于大多数的控制,使用FOR XML AUTO和关联子查询。

 

浏览器的自动全屏模式 -kiosk

IE浏览器下的Kiosk模式其实是一种真正的全屏浏览模式,他的英文全称为Kiosk Mode(晕死,全称简称都一样!)。他不同于在IE浏览器下使用F11的全屏模式。
Kiosk Software广泛用于公共电脑或者嵌入系统,最常用的就是ATM机、自动服务机之类的系统了,其实他们很多都只是一个浏览器,虽然用Alt+Tab组合键就可以随意切换,但是一般的Kiosk系统不会给你这样的键盘滴。

在IE下设置成Kiosk模式也是十分简单的,方法如下:

  开始-运行-输入

  ”C:\Program Files\Internet Explorer\iexplore.exe” -k

  这样打开的就是一个真正意义上的全屏IE浏览器了!没有地址栏和工具栏等等,要输入网址就要用快捷键了,如果忘记了就直接按Alt+F4关闭了算了,哈哈。

  记住以下的快捷键哦:

  Ctrl+O:新建窗口(空白页上输入URL)

  Alt+Home:跳转到首页

  Alt+右箭头:前进

  Backspace:后退

  如果想玩玩就这样干一把,还有一个一劳永逸的方法,就是把IE的快捷键直接加上一个参数”-k”,这样每次打开IE都是这种模式了!

Chrome自动全屏模式Kiosk
Chrome终极全屏模式,可以用于播放演示页面,如幻灯片等。
进入Chrome终极全屏模式之后,没有退出浮动提示了,需要退出,请直接ALT+F4退出。
想要实现Chrome全屏Kiosk模式,需要先安装一个Chrome浏览器。
然后在桌面新建一个快捷方式,指向Chrome的可执行程序文件,即chrome.exe文件。
在快捷方式->属性->目标…chrome.exe后边加上参数。如:
“C:\Documents and Settings\Administrator\Local Settings\Application Data\Google\Chrome\Application\chrome.exe” http://www.baidu.com –kiosk
保存编辑结果。退出其它Chrome浏览器窗口,再点击刚才建立的窗口,即可进入全屏模式。

数据库连接池

数据库连接是一种关键的有限的昂贵的资源,这一点在多用户的网页应用程序中体现得尤为突出。对数据库连接的管理能显著影响到整个应用程序的伸缩性和健壮性,影响到程序的性能指标。数据库连接池正是针对这个问题提出来的。数据库连接池负责分配、管理和释放数据库连接,它允许应用程序重复使用一个现有的数据库连接,而再不是重新建立一个;释放空闲时间超过最大空闲时间的数据库连接来避免因为没有释放数据库连接而引起的数据库连接遗漏。这项技术能明显提高对数据库操作的性能。

数据库连接池在初始化时将创建一定数量的数据库连接放到连接池中,这些数据库连接的数量是由最小数据库连接数来设定的。无论这些数据库连接是否被使用,连接池都将一直保证至少拥有这么多的连接数量。连接池的最大数据库连接数量限定了这个连接池能占有的最大连接数,当应用程序向连接池请求的连接数超过最大连接数量时,这些请求将被加入到等待队列中。数据库连接池的最小连接数和最大连接数的设置要考虑到下列几个因素:
1) 最小连接数
  是连接池一直保持的数据库连接,所以如果应用程序对数据库连接的使用量不大,将会有大量的数据库连接资源被浪费;
2) 最大连接数
  是连接池能申请的最大连接数,如果数据库连接请求超过此数,后面的数据库连接请求将被加入到等待队列中,这会影响之后的数据库操作。
3) 如果最小连接数与最大连接数相差太大
  那么最先的连接请求将会获利,之后超过最小连接数量的连接请求等价于建立一个新的数据库连接。不过,这些大于最小连接数的数据库连接在使用完不会马上被释放,它将被放到连接池中等待重复使用或是空闲超时后被释放。

ASPX网站运行原理(转自:ASP.NET运行机制)

1.ASP.NET运行原理概述

 

  如上图,当一个http请求发送过来并被IIS机收到之后,IIS首先通过你请求的页面类型为其加载相应的dll文件,然后在处理过程中将这条请求发送给能够处理这条请求的模块,而在ASP.NET中这个模块就叫做HttpHandler,为什么aspx这样的文件可以被服务器处理,那是因为在服务器端有默认的HttpHandler专门处理aspx文件,IIS再将这条请求发送给能够处理这条请求的模块之前,还需要经过一些HttpModule,这些都是系统默认的Modules,而且在这个http请求传到HttpHandler之前要经过不同的HttpModuls的处理,这就像我们如果要乘坐国际航班飞抵异国他乡的话,在 你真正坐上飞机前,要经过购买机场建设费,办理登记手续核实身份,进行行李打包托运,进行安全检察,现在又要进行体温等检察一样,需要经一系列的严格的手 续。这样做有什么好处,一是为一些必须的过程,二是为了安全性,三是为了提高效率,四是为了我们能够在更多的环节上进行控制,即增强了我们的控制能力。而 上述的都是系统的,怎么能说是我们的对http请求控制能力能,那么我们是否可以建立自己的HttpModule和HttpHandler吗?答案是肯定的。但我们先不要急于做事,让我们再深入研究一下运行机制吧。

2.ASP.NET运行机制

 

  那么上面这张图让我们能够更清楚地看到一个http请求是如何经过服务器的处理的,同时通过这张图我们也可以看出Request是掌管着所有客户端输入的。图中为我们展示了一个http请求有可能经过的四条路线。当你第一次访问这个页面时这个请求首先依次经过HttpModuls和HttpHandler的处理,而在HttpHandler的处理中服务器会为你转到你真正要访问的页面,然后通过ASP Engine来找到这个页面背后的类,并实例化为一个临时对象,再此过程中会触发一系列的事件,其中一部份的事件需要经过对象中的方法处理,之后服务器会将这个处理后页面发移交给Response对象,然后由Response对象将这个页面发送到客户端。这就是第一条路线,而当你在这个页面上进行重新提交一些信息,并继续向服务器发送请求时,因为你的服务器之间的会话已经建立,对于你所在的那个临时对象在服务器中已经建立,所以不用再经过初始化页面的工作,故这第二条路线是按照 HttpModuls,HttpHandler,然后直接与临时对象交互,然后返回的。第三条路线与第二条不同的是在处理请求时如果涉及到需要调用ASP Cache,既ASP 缓存的,而临时对象回将直接从ASP 缓存提取信息并返回.这第四条路线就是当你刷新这个页面的时候,服务器接收到时发现这个请求先前已经处理过了,并将处理结果存储到由一个默认的HttpModule管理的输出缓存中了,那么我们就可以直接从这个缓存提取信息并返回,而无需再重新处理一遍了。

本文来自CSDN博客,转载请标明出处:http://blog.csdn.net/flashlm/archive/2007/07/06/1681487.aspx

给站长们的一些意见

1,千万别做大而全的网站。它会累死你。而且还没什么成效。做网站要有所创新。

2,千万不要把希望全都寄托在搜索引擎上。

3,该花的钱要花。例如你的网站已经发展到需要独立服务器。

4,坚持访客就是上帝的原则设计你的网站。

5,定期给自己的网站定一个目标。

6,该赚的钱要赚。不该赚的别赚。得有原则。虽然日子还是要过的。

7,少得罪人,否则容易被人DDOS,有时间多帮助别人。总有一天你也会得到别人的帮助。

8,如果你确信你可以比别人做的更好更有优势,那你就做个和别人一样的网站吧。跟风也不是不可以,例如跟国外网站的风。

9,把80%以上的时间花在你的网站建设上。多参照其它比较成功的网站,研究为什么别人要那么做。

10,要擅于利用自己的资源。例如你认识某某大站站长,你可以与他互换一个链接以增加网站曝光率。

 

转自CNZZ

SQLSERVER2005远程连接解决办法

几个关键的点检查一下:

1、SQLServer 服务SQL Server Browser 服务是否启用。(两个服务都需要启动)

2、在Windows 防火墙中为SQL Server 2005 SQL Server Browser 服务创建例外

两个程序的地址分别为:

C:\Program Files\Microsoft SQL Server\MSSQL.1\MSSQL\Binn\sqlservr.exe

C:\Program Files\Microsoft SQL Server\90\Shared\sqlbrowser.exe

3、为SQL 启用远程连接

找到“SQL Server 2005 外围应用配置器”,打开,单击“服务和连接的外围应用配置器”页,展开“数据库引擎”,依次单击“远程连接”和“本地连接和远程连接”,单击适用于您的环境的相应协议,然后单击“应用”。

 

注意:上述的几个修改都需要重启SQLServer服务以使更改生效。

 

若还是没有解决问题,请参考百度文库中的这篇文章:

http://wenku.baidu.com/view/8ced491755270722192ef7ec.html

php“内存位置访问无效”错误的解决办法

突然发现网页登不上去了,提示错误“内存位置访问无效”。但服务器上ASP的站点可以运行,于是猜想应该是PHP出现了错误。

配置环境如下:

Win2003SP2+IIS6+php5.26+mysql5.0.51a+zend3.3a+PhpMyAdmin2.11.7.1 PHP执行方式:isapi。Mysql为手动安装。

关于“内存位置访问无效”的错误解决办法与步骤:(前三步可忽略)

一、将IIS的错误显示打开,未发现错误原因!

二、检查IIS扩展,ISAPI、php.ini与Mysql配置以及相应的安装目录ACLs权限,均无误。

三、回收IIS进程,错误仍然出现”内存位置访问无效”….

四、将php.ini中 display_startup_errors = On 打开,重新启动IIS,问题所在终于发现了… (注:如果将php.ini的display_startup_errors打开,如果php有错误出理,就会提示,而且在事件查看器中有记录。如果设置为display_startup_errors = Off,则不会有任何提示)

五、Warning

Cannot load module ‘SQLite’ because required module ‘pdo’ is no loaded

上面这条错误信息终于被发现了。大概意思就是因为php.ini配置中开启了SQLite桌面数据库的支持,但未开启相关的pdo模式,pdo模块加载失败…..

六、解决办法也很简单了,因为加载php_sqlite.dll时未加载到php_pdo.dll文件,所以运行phpinfo()函数时提示内存 位置访问无效。找到php.ini配置文件,然后去掉”;extension=php_pdo.dll”前面的分号, extension=php_sqlite.dll

然后再回收一下IIS应用程序池进程,问题彻底解决….

hoho,希望对遇到此问题的朋友有点儿帮助…

教你如何将Word文档转PDF文档

若是少量的几个文件,大致有如下几种方法:

1. 若是你使用的还是Office2003,赶紧的升级到Office2007或者是Office2010吧;

2. 若是你使用的是Office2007或2010,首先找找在另存为的选项里是不是有PDF。如果没有,那么需要在微软的官网上下载一个转PDF的插件。安装好加载项后,具体的操作可以参考微软的支持文档。

3. 若是你使用的是WPS2007或者WPS2010,直接在“另存为…”的时候有格式可以选择的