2005年08月30日

请参考以下例子:

string strXMLFilePath= Server.MapPath(strXMLFileName);
     XmlDocument XmlDoc=new XmlDocument();
     if(System.IO.File.Exists(strXMLFilePath))
     {
      XmlDoc.Load(strXMLFilePath);
     }

     //取XML配置值
     if(XmlDoc!=null && XmlDoc.InnerText!="")
     {
      //定位到指定节点
      XmlElement Root=XmlDoc.DocumentElement;
      XmlNode xmlNode=Root.SelectSingleNode("DeptInfo[@ID='"+strDepartID+"']");
           
      if(xmlNode!=null)
      {
       strDeptName=xmlNode.SelectSingleNode("Name").InnerText.ToString();
       strAddress=xmlNode.SelectSingleNode("Address").InnerText.ToString();
       strPostNumber=xmlNode.SelectSingleNode("PostNumber").InnerText.ToString();
       strTelephone=xmlNode.SelectSingleNode("Telephone").InnerText.ToString();
       strFax=xmlNode.SelectSingleNode("Fax").InnerText.ToString();
       strEMail=xmlNode.SelectSingleNode("EMail").InnerText.ToString();
       strMapPath=xmlNode.SelectSingleNode("MapPath").InnerText.ToString();
      }      
      
     }

2005年08月29日

Q:vc软件包不可用或未注册
A:
症状:
当建立一个Winforms应用程序时,收到下述错误信息:"VC软件包不可用或未注册".这个错误甚至会在看上去一个成功的安装之后出现.

起因:
如果Visual Studio.NET安装程序发现一些TLB文件和DLL文件已经存在的话,就不会再次在计算机中注册这些文件,因此
就有可能发生"VC软件包不可用或未注册"的提示.
在多数情况下,旧版本的的Visual Studio .NET容易引起这个错误,尤其是旧版本安装在另一个操作系统下.


解决方案:
要解决这个问题,需要运行Visual Studio .NET修复程序.由于修复程序会强制注册一些安装程序中没有被注册的项目,因此能更有效地解决这个问题.

按照下列步骤运行修复程序:
在开始中,指向"设置",点击控制面板,然后点击"添加/删除程序";
在列出的已安装程序列表中,点击Visual Studio .NET,然后点击"更改/删除";
点击Visual Studio .NET安装对话框1 2 3项目中的第二项;
点击"修复/重装",然后按照屏幕提示操作.

更多相关信息:
重现这个问题的做法
要重现这个问题,最好有装在独立分区上的两个操作系统.两个Windows XP Professional会达到这个目的.
在一个操作系统下安装Visual Studio .NET;
在另一个操作系统下Visual Studio .NET,安装过程中改变安装的缺省路径,以匹配第一次安装的路径.
两次安装结果都会宣告成功.
然后启动第二次安装的Visual Studio .NET(你就会发现这个问题的重现).

这种安装形式是永远不推荐的,即使两次安装选项完全相同,而且你也会以此节省磁盘空间,但这种方法出现潜在问题的机会是很大的.如果一个 Visual Studio .NET改变了文件和注册选项,这些改变不会记录到另一个Visual Studio .NET中,以致造成出现不可预料结果的潜在危险.

引自:http://zhuonline.51.net/blogs/archives/000045.html http://support.microsoft.com/default.aspx?scid=http://support.microsoft.com:80/support/kb/articles/q320/4/27.asp&NoWebContent=1
———————————————————————————————————————————

Q:不能启动调试,灾难性错误(在 Visual Studio .NET 中调试 ASP.NET 应用程序时出现的常见错误)
A: http://support.microsoft.com/?id=306172
———————————————————————————————————————————

Q:在生成安装和部署项目时收到“Unrecoverable Build Error”(不可恢复的生成错误)错误信息
A: http://support.microsoft.com/?id=329214

Q:Unable to start debugging on the web server
A:如果遇到这些错误,则需要考虑以下几个问题:

要检查的内容
远程服务器上的 Web 应用程序
存储在 Visual SourceSafe 中并使用 FrontPage 服务器扩展的 Web 应用程序
手动附加
要检查的内容
如果得到“无法在 Web 服务器上启动调试”错误,请尝试检查下列内容:

您是否正在运行一个允许 Visual Studio 调试器自动附加到 Web 应用程序的 Windows 版本?如果不是,则需要启动应用程序而不调试,然后手动附加到它。(有关更多信息,请参阅手动附加和 ASP.NET 调试:系统要求。)
您的 Web 应用程序是否具有 Web.config 文件?
Web.config 文件是否通过将 debug 属性设置为 true 而启用了调试模式?有关更多信息,请参阅 ASP.NET 应用程序中的调试模式。
Web.config 是否包含任何语法错误?您可以通过运行 Web 应用程序而不调试来检查是否存在语法错误。(从“调试”菜单中,选择“开始执行(不调试)”。)如果在 Web.config 中存在语法错误,则会显示详细信息。
您是否是“调试器用户”(Debugger Users) 组的成员?如果您作为管理员登录,则管理员是否在该组中?
您是否是通过指定特定的 IP 地址(如 100.20.300.400)而创建了项目?调试 Web 服务器要求 NTLM 身份验证。默认情况下, IP 地址被假定为 Internet 的一部分,而在 Internet 上不进行 NTLM 身份验证。若要更正这一问题:
创建项目时,指定 Intranet 上计算机的名称。
-或-

将 IP 地址 http://100.20.300.400) 添加到您的计算机上的受信任站点列表中。(从 Internet Explorer 的“工具”菜单中,选择“Internet 选项”,然后选择“安全”选项卡)。
运行 IIS 服务器的计算机是否已安装了 Visual Studio .NET 远程组件?
IIS 是否是在安装了 Visual Studio .NET 之后才被安装在本地计算机(即运行 Visual Studio .NET 的计算机)上的? IIS 应在安装 Visual Studio .NET 之前安装。如果它是后来安装的,则可能需要修复 .NET 框架。
修复 .NET 框架

插入 Visual Studio .NET 光盘并运行
<DVD Drive>:\wcu\dotNetFramework\dotnetfx.exe /t:c:\temp /c:"msiexec.exe /fvecms c:\temp\netfx.msi"
-或-

插入 Visual Studio .NET Windows 组件更新光盘并运行

<CD Drive>:\dotNetFramework\ dotnetfx.exe /t:c:\temp /c:"msiexec.exe /fvecms c:\temp\netfx.msi"
是否正确地指定了项目起始页的 URL?扩展名和项目目录是否正确?
是否正确地设置了 IIS 安全设置?若要验证这一点,请检查“默认 Web 站点”设置。
检查“默认 Web 站点”的 IIS 安全设置

从“开始”菜单中,依次选择“程序”和“管理工具”,然后单击“Internet 服务管理器”(Windows 2000) 或“Internet 信息服务”(Windows XP)。
在“Internet 服务管理器”或“Internet 信息服务”对话框中,单击您的计算机的树控件 (Tree Control)。在“Web 站点”文件夹中,找到“默认 Web 站点”。
右击“默认 Web 站点”并选择“属性”。
在“默认 Web 站点属性”窗口中,选择“目录安全性”选项卡并单击“编辑”。
在“身份验证方法”对话框中,选择“匿名访问”和“集成的 Windows 身份验证”(如果尚未选择的话)。
单击“确定”以关闭“Internet 服务管理器”或“Internet 信息服务”对话框。
单击“确定”。
对于 ATL Server 应用程序,请验证 DEBUG 谓词是否与您的 ISAPI 扩展相关联。
对于 ASP.NET 应用程序,请确保应用程序的虚拟文件夹具有在“Internet 服务管理器”或“Internet 信息服务”中设置的“应用程序名称”。
为 Web 应用程序指定虚拟文件夹

从“开始”菜单中,依次选择“程序”和“管理工具”,然后单击“Internet 服务管理器”(Windows 2000) 或“Internet 信息服务”(Windows XP)。
在“Internet 服务管理器”或“Internet 信息服务”对话框中,单击您的计算机的树控件 (Tree Control)。在“Web 站点”文件夹中,找到此 Web 应用程序。
右击“默认 Web 站点”并选择“属性”。
在“默认 Web 站点属性”窗口中,选择“目录”选项卡。
在“应用程序设置”下,单击“创建”。
应用程序名称即出现在此框中。

单击“确定”关闭“属性”对话框。
单击“确定”以关闭“Internet 服务管理器”或“Internet 信息服务”对话框。
远程服务器上的 Web 应用程序
如果 Web 应用程序位于远程服务器上,请检查以下问题:

是否运行了正确的安装程序以便在服务器上安装 ASP.NET/ATL Server 和远程调试器组件?
您是否是服务器上的“调试器用户”(Debugger Users) 组的成员?您是否具有调试在系统帐户下运行的进程所必需的访问特权?
根据安全设置的不同,ASP.NET 应用程序可能在 inetinfo.exe(IIS 进程)下运行,也可能在 ASP 辅助进程 aspnet_wp.exe 下运行。默认情况下,aspnet_wp.exe 进程作为 SYSTEM 运行。若要调试在 aspnet_wp.exe 下运行的应用程序,您需要具有管理员特权或为 aspnet_wp.exe 编辑 machine.config 文件,以便 aspnet_wp.exe 在用户帐户下运行。若要调试在 inetinfo.exe 下运行的应用程序,您必须是运行 inetinfo.exe 的计算机上的管理员。

根据安全设置的不同,ATL Server 应用程序可能在 inetinfo.exe 下运行,也可能在 ATL 辅助进程 dllhost.exe 下运行。若要调试在 inetinfo.exe 下运行的应用程序,您必须是运行 inetinfo.exe 的计算机上的管理员,或者使用公共语言运行库应用程序设置将 dllhost 配置为作为特定用户运行。
您是否正在使用“终端服务器”尝试调试远程计算机上的 Web 应用程序?在 Windows XP 下,支持使用“终端服务器”对本机 Web 应用程序进行远程调试。而在 Windows 2000 或 Windows NT 下则不支持。
存储在 Visual SourceSafe 中并使用 FrontPage 服务器扩展的 Web 应用程序
如果 Web 应用程序存储在 Visual SourceSafe 中并且使用 FrontPage 服务器扩展作为它的 Web 访问模式,请检查以下问题:

Visual SourceSafe 是否与 FrontPage 服务器/Web 服务器位于同一台计算机上?如果是,则可以使用“集成身份验证”进行调试。(若要检查“集成身份验证”设置,请参阅此过程以检查前面的“默认 Web 站点”的 IIS 安全设置。)
解决这一问题的另一种方法是将 Web 访问模式从 FrontPage 更改为文件共享 (File Share)。
将 Web 访问模式更改为文件共享 (File Share)

在解决方案资源管理器中,右击项目名称,然后从快捷菜单中选择“属性”。
在“<Project> 属性页”对话框中,打开“通用属性”文件夹,然后选择“Web 设置”。
在“Web 服务器连接”下,单击“Web 访问模式”,然后从列表框中选择“文件共享”。
单击“确定”以关闭“<Project> 属性页”对话框。
手动附加
如果按照这些疑难解答步骤执行了相应操作,而在开始调试时仍然收到错误信息,则可能需要尝试通过手动附加来调试应用程序。

手动附加

启动应用程序而不调试。(从“调试”菜单中,选择“开始执行(不调试)”。)
附加到适当的 IIS 进程或辅助进程。默认情况下,对于 ATL Server 应用程序为 inetinfo.exe;对于 ASP.NET 应用程序为 aspnet_wp.exe。使用下面的过程来确定 ASP.NET 或 ATL Server 应用程序在哪个进程下运行。
检查 ASP.NET 应用程序在哪个进程下运行

使用 Visual Studio .NET 或其他文本编辑器打开应用程序的 machine.config 文件。
找到下面的进程模型属性:
enable
如果 enable 设置为 TRUE,则应用程序在 aspnet_wp.exe 下运行(这也是默认设置。)

如果 enable 设置为 FALSE,则应用程序在 inetinfo.exe 下运行。

检查 ATL Server 应用程序在哪个进程下运行

在解决方案资源管理器中,右击项目名称,然后从快捷菜单中选择“属性”。
在“<Project> 属性页”对话框中,打开“Web 部署”文件夹,然后选择“常规”。
查看“应用程序保护”设置。
如果此设置为“低(IIS 进程)”,则应用程序在 inetinfo.exe 下运行。

如果此设置为“中等(池)”,则应用程序在 dllhost.exe 进程下运行(与其他放入池中的 ATL Server 应用程序相同)。

如果此设置为“高(独立)”,则应用程序在 dllhost.exe 进程下运行(与其他 ATL Server 应用程序不同)。

单击“确定”以关闭“<Project> 属性页”对话框。
请参见
调试脚本和 Web:错误和疑难解答

Q:web访问失败
此项目的默认web访问模式设置为文件共享,但无法从路径“D:\inetpub\bweb”打开http://localhost/bweb”处的

项目文件夹,返回的错误是:
无法打开Web项目“bweb”。文件路径“D:\inetpub\bweb”与URLhttp://localhost/bweb”不符。这两者需要映

射到不同的服务器位置。HTTP错误404:Not Found

A:1。打开IIS管理器。

2。右键点击"Default Web Site"并选择Properties.

3。 点击"Http Header".

4。 点击"MIME Types".

5。 点击“New”。

6。 在Extension中,输入".tmp". (不需要引号)

7。 在MIME Type中,输入 "Temp". (不需要引号)
Q:VS.NET调试问题
A:关于VisualStudio.NET里调试出现的一系列问题,例如没有权限调试Web服务器,不属于Debugger Users组、无法调试等情况,都可以在The VS7 Debugger doesn’t work. What can I dohttp://blogs.msdn.com/mkpark/articles/86872.aspx)该文上找到答案。 我就碰到过没有权限在Web服务器上调试的情况,后来选中了IE的Internet选项->安全->Intranet- >自定义级别->用户验证的“自动使用当前用户和密码登录”才解决无法调试的问题。怎么会想到VS.NET无法调试还要修改IE选项

 

1、当站点主目录没有创建应用程序:

 通过FP扩展+虚拟目录的方式来建立WEBAPP,步骤如下:

(1)、右击站点—所有任务–配置服务器扩展

(2)、建立虚拟目录***,并使其配置应用程序

(3)、在VS中建立WEB项目,名称也为***

(4)、通过通过FP扩展来建立WEB

 

2、当站点主目录创建应用程序:

 第一种方法–FP扩展:

 (1)、右击站点—所有任务–配置服务器扩展

 (2)、在VS中建立WEB项目,名称自己随便定

 (3)、通过通过FP扩展来建立WEB

第二种方法–WEB共享:

 (1)在IIS中将IP地址改为全部未分配

 (2)将地址改为127.0.0.1或LOCALHOST

 

3、还不能建立时请试用下列方法:

 (1)“站点”—右键—“属性”—“所有任务”—“重新计算 Web 上的超链接”

     然后在vs.net下通过frontpage服务器扩展创建

  

  (2)指示要通过文件共享直接访问 Web 服务器上的项目文件;不需要在该服务器上安装 FrontPage 服务器扩展。

    安装 Visual Studio .NET 时,将创建一个“VS Developers”(VS 开发人员)用户组,并授予该用户组对 inetpub\wwwroot 文件夹的读/写权限。想使用计算机上的文件共享创建 Web 项目的任何用户都需要添加到“VS Developers”(VS 开发人员)用户组中。新建的“VS Developers”(VS 开发人员)组没有任何成员,所以,即使是安装 Visual Studio 的用户,也必须手动将自己添加到这个组中。

如果不希望将 Visual Studio 安装到服务器上,可以通过 Visual Studio 安装程序仅安装服务器组件,以创建“VS Developers”(VS 开发人员)组。

  (3)win2003下:

在VS.NET中,为了测试URL和UNC, VS.NET会在目录下面生成一个.tmp文件,然后通过HTTP对该文件发出请求。但是在IIS 6中,出于安全考虑,tmp文件没有注册,默认情况下,会被block然后产生HTTP 404错误。

解决这个问题,请您参阅下面的方法:

1。打开IIS管理器。

2。右键点击"Default Web Site"并选择Properties.

3。 点击"Http Header".

4。 点击"MIME Types".

5。 点击“New”。

6。 在Extension中,输入".tmp". (不需要引号)

7。 在MIME Type中,输入 "Temp". (不需要引号)

还有一种解决方法,您可以使用下面的命令行:

%systemdrive%\inetpub\adminscripts\adsutil.vbs set w3svc/1/root/MimeMap .tmp,temp

在创建Web Application时,VS.Net需要在创建路径下创建后缀名为.tmp的临时文件。
当VS.Net创建好项目之后,就会以HTTP的方式向Web文件夹寻求项目文件,同时也寻求临时文件。由于windows2003在某些安装步骤下的IIS没有把.tmp文件设置为MIME类型,所以IIS向VS.Net返回了未知文件类型的错误,即找不到文件。所以VS.Net认为你的IIS路径设置不对。

error message when you create an ASP.NET 1.1 application and you have both ASP.NET 1.1 and ASP.NET 1.0 installed
On This Page
SYMPTOMS SYMPTOMS
RESOLUTION RESOLUTION
STATUS STATUS
MORE INFORMATION MORE INFORMATION
  Steps to Reproduce the Behavior Steps to Reproduce the Behavior
REFERENCES REFERENCES
APPLIES TO APPLIES TO

SYMPTOMS

Microsoft Visual Studio .NET 2003 cannot open an existing ASP.NET 1.1 Web project under the following circumstances:
You set ASP.NET 1.1 to Prohibited in the Web Service Extension list.

-and-
You set ASP.NET 1.0 to Allowed in the Web Service Extension list.

-and-
The computer is running Microsoft Windows Server 2003.

When you try to create a new ASP.NET 1.1 project, you may receive the following error message:

Visual Studio .NET has detected that the specified Web server is not running ASP.NET version 1.1. You will be unable to run ASP.NET Web applications or services.

If both ASP.NET 1.1 and ASP.NET 1.0 are set to Prohibited in the Web Service Extension list, you may receive the following error message when you try to open a new ASP.NET 1.1 project in Visual Studio .NET 2003:

Visual Studio .NET has detected that ASP.NET applications and services are locked down in IIS. You can run the IIS Security Lockdown Wizard to change lockdown status

Note By default, when you install Microsoft .NET Framework 1.0, ASP.NET 1.0 is not added to the Web Service Extension list in Microsoft Internet Information Services (IIS) 6.0.


RESOLUTION

To resolve this problem, change the status of ASP.NET 1.1 to Allowed in the Web Service Extension list in IIS 6.0. To do this, follow these steps:
1. Click Start, point to Programs, and then click Control Panel.
2. Double-click Administrative Tools, and then double-click Internet Information Services (IIS).
3. Click Web Service Extensions.
4. In the details pane, click ASP.NET v1.1.4322 in the Web Service Extension list.
5. Click Allowed to change the status from Prohibited to Allowed.


STATUS

This behavior is by design.


MORE INFORMATION


Steps to Reproduce the Behavior

1. Click Start, point to Programs, and then click Control Panel.
2. Double-click Administrative Tools, and then double-click Internet Information Services (IIS).
3. Click Web Service Extensions.
4. In the details pane, click ASP.NET v1.1.4322 in the Web Service Extension list.
5. Click Prohibited to change the status from Allowed to Prohibited.
6. Verify that the status of ASP.NET v1.0.3705 is Allowed.

Note If ASP.NET v1.0.3705 is not listed in Web Service Extension list, use the Add a new Web Service Extension option in the Web Service Extension pane to register ASP.NET v1.0.3705, and then change the status to Allowed.
7. Click Start, point to Programs, and then click Microsoft Visual Studio .NET 2003.
8. On the File menu, point to New, and then click Project.
9. In the New Project dialog box, click Visual C# Projects or Visual Basic Projects under Project Types.
10. Under Templates, click ASP.NET Web Application. You receive the error message that is listed in the "Symptoms" section of this article.


REFERENCES

For additional information, click the following article numbers to view the articles in the Microsoft Knowledge Base:
812405 (http://support.microsoft.com/kb/812405/EN-US/) PRB: ASP.NET 1.0 Does Not Appear in the Web Service Extension List in IIS 6.0
816783 (http://support.microsoft.com/kb/816783/EN-US/) PRB: ASP.NET Applications Experience Unexpected Behavior After Upgrade

For more information, visit the following Microsoft Web sites:

Configuring an ASP.NET Application for an ASP.NET Version
http://www.microsoft.com/technet/treeview/default.asp?url=/technet/prodtechnol/windowsserver2003/proddocs/standard/aaconconfiguringaspnetapplicationforaspnetversion.asp (http://www.microsoft.com/technet/treeview/default.asp?url=/technet/prodtechnol/windowsserver2003/proddocs/standard/aaconconfiguringaspnetapplicationforaspnetversion.asp)

Versioning, Compatibility, and Side-by-Side Execution in the .NET Framework
http://msdn.microsoft.com/netframework/technologyinfo/versioncomparison/default.aspx (http://msdn.microsoft.com/netframework/technologyinfo/versioncomparison/default.aspx)

面向对象的模型设计方法

  定义:利用面向对象方法,把应用程序分成许多小块(对象),这些对象是独立的,然后组合这些对象,建立程序。

  特点:包装、继承、多态。

  常用的建模工具:PlayCase, Rational ROSE, Computer Association BPWin , Computer Association ERWin, Oracle Designer/2000, Sybase PowerDesigner

UML语言概述

  定义:一种面向对象的统一建模语言。
  作用:帮助我们对软件系统进行面向对象的和建模。
  核心:类,类之间的关系。
  建模:通过将用户的业务震需求映射为代码,保证代码满足这些需求,代码能方便地回溯需求,这个过程叫建模。

ROSE建模工具

  定义:是一种分析和设计面向对象的建模工具。

  作用:利用ROSE这个工具,我们可以建立用UML的软件系统的模型,面目可以自动生成和维护C++、JAVA、VB、PB、ORACLE等语言和系统的代码。

  核心:七大框图
  1. Use-Case Diagrams(用例框图)
  2. sequence diagram (顺序框图)
  3. Collaboration diagram (协作框图)
  4. Class diagram (类框图)
  5. State Transition diagram (状态框图)
  6. Component diagram (组件框图)
  7. Deployment diagram (扩展框图)

  下面结合软件工程知识、利用ROSE建模工具,本人在开发电力部们的"110KV标准设计图文管理系统"中所用到的ROSE模型及对ROSE在开发实践中的剖析

一、 需求分析阶段

  任务:建立用户需求和功能模块,确定系统中的角色和使用案例。利用ROSE,生成角色,使用案例和生成用例图
所用到的框图:

  1.Use-Case Diagrams:显示使用案例(表示系统功能)与角色(人或系统)间的交互。如下图:

  Use Case(用例):在不展现一个系统或系统内部结构的情况下,对系统或系统的连贯的功能单元的定义和描述。
角色:使用软件的人或外部系统本身。

2. sequence diagram

  按时间先后顺序,从上到下分析使用案例,确定案例的处理流程。如下图:


3 Collaboration diagram :

  确定对象之间的关系的处理过程的分析流程。如下图:

二、 概要设计阶段

  任务:通过分析Use-Case Diagrams ,得到所用到的类,分析这些类的属性、操作和它们之间的关系。

  所用到的框图:

1.Class Diagrams.

  显示系统中类与类之间的交互。


2.包:具有一些共性的类组合在一起的图。

 

三、 详细设计阶段

  任务:细化和个性Use-Case的描述 ,如类的操作和对象之间的消息相对应,填充参数及复杂的类的设计。

  所用到的框图:

1.Class Diagrams

2.State Diagrams:显示一个对象从生成到删除的生命周期。

四、 编码和测试阶段

  任务:进行软件的开发和测试,生成组件框图。
  组件:表示代码的物理模块。
  组件框图:表示系统中的组件及相互依赖性。
  Delpoyment Diagrams:显示网络中的物理布局和各种组件的位置。

双向工程

  1.生成代码:根据选择开发应用程序的语言生成对应的程序的代码。

  步骤:检查模型-生成组件-将类映射组件-设置代码生成属性-选择类、组件和包-生成代码

  2.逆向转出工程:根据选择开发应用程序的语言生成对应的程序的代码。

  步骤:检查模型-生成组件-将类映射组件-设置代码生成属性-选择类、组件和包-生成代码

2005年08月26日

SQL Server中,我们一般使用SQL本身的邮件发送方式,但需要配置Exchage Server、Outlook等,也是一个比较繁琐的事情。很多人抱怨说配置不成功。

其实,我们可以在 SQL Server中创建 OLE 对象实例,调用IIS SMTP自带的发送组件来实现邮件发送。

我们建立这个存储过程,你需要修改的地方是,SmtpServer的名字

Create PROCEDURE sys_sendmail @From varchar(100) , @To varchar(100) , @Bcc varchar(500), @Subject varchar(400)=" ", @Body ntext =" "

AS

Declare @object int
Declare @hr int

EXEC @hr = sp_OACreate ‘CDO.Message’, @object OUT

EXEC @hr = sp_OASetProperty @object, ‘Configuration.fields("http://schemas.microsoft.com/cdo/configuration/sendusing").Value’,'2′
EXEC @hr = sp_OASetProperty @object, ‘Configuration.fields("http://schemas.microsoft.com/cdo/configuration/smtpserver").Value’, ’smtp.163.com’

–下面三条语句是smtp验证,如果服务器需要验证,则必须要这三句,你需要修改用户名和密码
EXEC @hr = sp_OASetProperty @object, ‘Configuration.fields("http://schemas.microsoft.com/cdo/configuration/smtpauthenticate").Value’,'1′
EXEC @hr = sp_OASetProperty @object, ‘Configuration.fields("http://schemas.microsoft.com/cdo/configuration/sendusername").Value’,'lihonggen0′
EXEC @hr = sp_OASetProperty @object, ‘Configuration.fields("http://schemas.microsoft.com/cdo/configuration/sendpassword").Value’,'xxx’

EXEC @hr = sp_OAMethod @object, ‘Configuration.Fields.Update’, null
EXEC @hr = sp_OASetProperty @object, ‘To’, @To
EXEC @hr = sp_OASetProperty @object, ‘Bcc’, @Bcc
EXEC @hr = sp_OASetProperty @object, ‘From’, @From
EXEC @hr = sp_OASetProperty @object, ‘Subject’, @Subject

EXEC @hr = sp_OASetProperty @object, ‘TextBody’, @Body
EXEC @hr = sp_OAMethod @object, ‘Send’, NULL

–判断出错
IF @hr <> 0
BEGIN
   EXEC sp_OAGetErrorInfo @object  
   RETURN @object
END
PRINT ’success’
EXEC @hr = sp_OADestroy @object

GO

注意:必须确保安装Smtp,可以访问CDO对象。

1、 使用outLook提供的发送

如:我见过的用友软件U8生产制造(演示版),其中的邮件功能就是通过调用outLookActiveX 组件

优点:开发简单

缺点:依赖outlook组件,SMTP 邮件服务

 

 

 

邮件发送的代码如下:

    Private Sub Send()

        Dim outObj As New Outlook.Application()

        Dim Item As Outlook.MailItemClass

        Item = outObj.CreateItem(0)

        Item.To = " lihonggen0@163.com "

        Item.Subject = "hello"

        Item.Body = "hell"

        Item.Attachments.Add("C:\abc.txt")

        Item.Send()

End Sub

 

 

 

参考:使用 Microsoft Outlook 2002 开发解决方案http://www.microsoft.com/china/msdn/library/dndotnetout2k2/html/odc_oldevsol.asp

 

 

 

2、 WEB开发,在ASP.NET中引用System.Web.Mail类

System.Web.Mail 命名空间包含使您可以使用 CDOSYSWindows 2000 的协作数据对象)消息组件来构造和发送消息的类。邮件消息是通过内置在 Microsoft Windows 2000 中的 SMTP 邮件服务或任意的 SMTP 服务器来传送的。此命名空间中的类可以在 ASP.NET 或任何托管应用程序

MailAttachment提供用于构造电子邮件附件的属性和方法。

MailMessage提供用于构造电子邮件的属性和方法。

SmtpMail提供用于使用 Windows 2000 的协作数据对象 (CDOSYS) 消息组件来发送消息的属性和方法。

邮件可以通过 Microsoft Windows 2000 中内置的 SMTP 邮件服务或任意 SMTP 服务器来传送。System.Web.Mail 命名空间中的类型可以在 ASP.NET 或任何托管应用程序使用。

Smtp服务器的设置,现在一些免费邮件提供商是不再提供针对所有邮件提供Smtp服务,在发送邮件的时候,需要验证用户信息,考虑Smtp用户验证问题

如果Smtp服务器在本地计算机,发送速度很快的,基本上不用担心,如果不是本地服务器,那么发送的时候最好不要以此太多,一是速度问题,二是以此发送太多邮件,Smtp服务器可能认为是垃圾邮件而拒绝服务

代码如下:

    Private Sub Button1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button1.Click

        Dim mailObj As New MailMessage()

 

 

 

        Dim smtp As SmtpMail

 

 

 

        ‘定义SMTP服务器的名称

        smtp.SmtpServer = "smtp.163.com"

        ‘定义邮件的发送地址

        mailObj.From = "lihonggen@163.com"

 

 

 

        ‘定义邮件的接收地址

        mailObj.To = " lihonggen0@163.com"

 

 

 

        ‘定义邮件的暗送地址

            mailObj.Bcc "aa@sina.com"

 

 

 

        ‘定义邮件的抄送地址

              mailObj.Cc = "aaa@sina.com"

 

 

 

        ‘定义邮件的主题

        mailObj.Subject = "主题"

 

 

 

        ‘定义邮件的主体

        mailObj.Body = "邮件主体!"

 

 

 

        ‘邮件以 HTML的格式发送

        mailObj.BodyFormat = MailFormat.Html

 

 

 

        ‘定义邮件的有限级,在此设定为高

        mailObj.Priority = MailPriority.High

 

 

 

        ‘给发送的邮件附加上一个附件

        mailObj.Attachments.Add(New MailAttachment("c:\lihonggen.doc"))

        smTp.Send(mailObj)

    End Sub

 

 

 

3、 VB.NETC#开发Windows 应用程序中使用System.Net.Sockets

也是基于SMTP协议

一、SMTP协议简介

1  客户端通过服务器的25端口建立TCP/IP连接

服务器端: 220 server.com Simple Mail Transfer Service Ready

2  客户端使用“HELO”命令标识发件人

客户端:HELO server.com

服务器端:250 server.com

3  客户端发送MAIL命令,服务器端以OK作为响应表明准备接收

客户端: MAIL FROM: <A@B.com>

服务器端: 250 OK

4  客户端发送RCPT命令标识收件人,服务器端回应是否愿意为收件人接受邮件

客户端:RCPT TO: <d@e.com>

服务器端:250 OK

5  协商结束后用命令DATA发送发送邮件

客户端:DATA

服务器端:354 Start mail input: end with <CRLF>.<CRLF>

6  客户端以.表示结束输入内容一起发送出去

客户端:Subject:  <CRLF>

内容<CRLF>

.<CRLF>

7、客户端用QUIT命令退出。

              客户端:QUIT

服务器端:250 server.com closing transmission channel

 

 

 

 

 

 

 

 

 

优点:可以在此基础上开发出自己的组件,利用Sockets我们可以进行网络编程开发

缺点:程序量相对较多,

 

 

 

发送邮件的代码如下:

        Dim sendData As String

        Dim szData As Byte()

        Dim CRLF As String

        CRLF = "\r\n"

 

 

 

        ‘创建与服务器25端口的连接

        Dim SmtpServ As New TcpClient(txtsmtp.Text, 25)

        lstlog.Items.Clear()

 

 

 

        ‘显示服务器初始信息

        Dim NetStrm As NetworkStream

        NetStrm = SmtpServ.GetStream()

 

 

 

        Dim RdStrm As New StreamReader(SmtpServ.GetStream())

        If RdStrm.ReadLine() <> "" Then lstlog.Items.Add(RdStrm.ReadLine())

       

        sendData = "HELO server " + CRLF

        szData = System.Text.Encoding.ASCII.GetBytes(sendData.ToCharArray())

        NetStrm.Write(szData, 0, szData.Length)

        lstlog.Items.Add(RdStrm.ReadLine())

 

 

 

        ‘标志发件人

        sendData = "MAIL FROM: " + "<" + txtfrom.Text + ">" + CRLF

        szData = System.Text.Encoding.ASCII.GetBytes(sendData.ToCharArray())

        NetStrm.Write(szData, 0, szData.Length)

        lstlog.Items.Add(RdStrm.ReadLine())

 

 

 

        ‘标志收件人

        sendData = "RCPT TO: " + "<" + txtTo.Text + ">" + CRLF

        szData = System.Text.Encoding.ASCII.GetBytes(sendData.ToCharArray())

        NetStrm.Write(szData, 0, szData.Length)

        lstlog.Items.Add(RdStrm.ReadLine())

 

 

 

        ‘准备发送内容

        sendData = "DATA " + CRLF

        szData = System.Text.Encoding.ASCII.GetBytes(sendData.ToCharArray())

        NetStrm.Write(szData, 0, szData.Length)

        lstlog.Items.Add(RdStrm.ReadLine())

 

 

 

        ‘发送主题

        sendData = "SUBJECT: " + txtsub.Text + CRLF

        ‘发送内容

        sendData = sendData + txtmsg.Text + CRLF

 

 

 

        ‘结束发送

        sendData = sendData + "." + CRLF

        szData = System.Text.Encoding.ASCII.GetBytes(sendData.ToCharArray())

        NetStrm.Write(szData, 0, szData.Length)

        lstlog.Items.Add(RdStrm.ReadLine())

 

 

 

 

 

 

        ‘退出

        sendData = "QUIT " + CRLF

        szData = System.Text.Encoding.ASCII.GetBytes(sendData.ToCharArray())

        NetStrm.Write(szData, 0, szData.Length)

        lstlog.Items.Add(RdStrm.ReadLine())

 

 

 

 

 

 

        ‘关闭连接

        NetStrm.Close()

        RdStrm.Close()

        lstlog.Items.Add("连接关闭")

        lstlog.Items.Add("发送成功")

 

 

 

大家还可以参考:使用C# 创建邮件发送组件(SMTP)

http://www.aspcool.com/lanmu/browse1.asp?ID=968&bbsuser=csharp

 

 

 

4、 IIS SMTP自带的基本的发信组件CDONTS

你不必专门下载,微软已经提供了这个组件,只要安装了2000NTSMTP就会有的。

优点:组件由操作系统自带

缺点:功能比较差,可扩展性不强

        Mymail = CreateObject("CDONTS.NewMail")

        Mymail.From = *** ‘信件发送者信箱

        Mymail.To = *** ‘信件接收者信箱

        Mymail.CC = *** ‘抄送

        Mymail.BCC = *** ’密件发送

        Mymail.Subject = *** ‘信件主题

        Mymail.Body = *** ’信件正文

        ‘设置优先级,0-不重要,1-一般,2-重要。

        Mymail.Importance = 2

        Mymail.Send()

        Mymail = Nothing

 

 

 

5、 使用JMail组件

Jmail具有以下特点:

1)可以发送附件;
(2)详细日志能力,便于你查看问题所在;
(3)设置邮件发送的优先级;
(4)支持多种格式的邮件发送,比如说以HTML或者TXT的方式发送邮件。这是个免费的组件。
(5)密件发送/(CC)抄送/紧急信件发送能力;
(6)最关键的就是–免费的组件,不必发钱,所以非常值得使用。

网站:http://www.dimac.net/,目前版本是4.3

 

 

 

JMail组件的常用属性:

Body   邮件正文

Logging   调用Log记录,供Debug

Priority   邮件的优先程度,从15

Sender   发件人

ServerAddress   SMTP服务器的IP地址或名称

Subject   邮件标题

 

 

 

JMail组件的常用方法:

AddAttachment   指定附件文件

AddRecipient   加入一个收件人

AddRecipientBCC   隐藏的副本抄送,只有发件人和BCC收件人知道。

AddRecipientCC   副本抄送

Execute   送出邮件

 

 

 

了解必要的属性及方法后,余下的部分接收使用者输入的Email,当成参数传给AddRecipient方法,然后根据需要填上其余属性,最后以Execute方法寄出。例如:

        Dim JMail

        JMail = Server.CreateObject("JMail.SMTPMail")

        JMail.Logging = True

        JMail.ServerAddress = "202.96.144.48"

        JMail.Sender = " lihonggen0@163.com"

        JMail.Subject = "subject."

        JMail.Body = "body."

        JMail.AddRecipient("bbbb@163.com")

        JMail.AddAttachment("c:\go.gif")

        JMail.Priority = 3

        JMail.Execute()

        JMail = Nothing

 

 

 

总结:选择何种方案,视程序的用途和需求而定,本文例出的几种方案,供大家参考。例如用友软件U8,调用outlook组件,一样整合到自己的软件中。我编写的管理系统,自己写组件(SMTP),功能同样强大,不过Coding的时间就长了!

2005年08月25日

(1)播放WMP类型的媒体

<object align=middle classid=CLSID:6BF52A52-394A-11d3-B153-00C04F79FAA6 class=OBJECT id=MediaPlayer width=409 height=350>
<param name=autoStart value=true>
<param name=ShowStatusBar value=true>
<param name=url value="http://mms.9sky.com/mms32/60wma/12303_26225_308299.wma">
<PARAM name=uiMode value=full>
<PARAM name=stretchToFit value=true>
<embed type=application/x-oleobject codebase=http://activex.microsoft.com/activex/controls/mplayer/en/nsmp2inf.cab#Version=5,1,52,701 flename=mp src="http://mms.9sky.com/mms32/60wma/12303_26225_308299.wma" width=409 height=350></embed>
</object>

(2)播放Real类型的媒体
<OBJECT ID=video1 CLASSID="clsid:CFCDAA03-8BE4-11cf-B84B-0020AFBBCCFA" HEIGHT=288 WIDTH=352>

<param name="_ExtentX" value="9313">
<param name="_ExtentY" value="7620">
<param name="AUTOSTART" value="1">
<param name="SHUFFLE" value="0">
<param name="PREFETCH" value="0">
<param name="NOLABELS" value="0">
<param name="SRC" value="tv.rm">
<param name="CONTROLS" value="ImageWindow">
<param name="CONSOLE" value="Clip1">
<param name="LOOP" value="0">
<param name="NUMLOOP" value="0">
<param name="CENTER" value="0">
<param name="MAINTAINASPECT" value="0">
<param name="BACKGROUNDCOLOR" value="#000000"><embed SRC type="audio/x-pn-realaudio-plugin" CONSOLE="Clip1" CONTROLS="ImageWindow" HEIGHT="288" WIDTH="352" AUTOSTART="false">
</OBJECT>

参考MSDN上的文章如下:

Simple Windows Media Player Control Web Page

By combining the elements previously discussed in this article, you can see how the pieces fit together in the following sample code.

<HTML>
<HEAD><TITLE>Windows Media Player Test</TITLE></HEAD>
<BODY>

<OBJECT ID="MediaPlayer1" WIDTH=320 HEIGHT=240
  CLASSID="CLSID:22D6f312-B0F6-11D0-94AB-0080C74C7E95"
  STANDBY="Loading Windows Media Player components..."
  TYPE="application/x-oleobject">

  <PARAM NAME="FileName" VALUE="C:\ASFRoot\Welcome.asf">
  <PARAM NAME="ShowControls" VALUE="False">
  <PARAM NAME="AutoRewind" VALUE="True">
  <PARAM NAME="AutoStart" VALUE="False">
</OBJECT>

<BR>
<INPUT TYPE="BUTTON" NAME="BtnPlay" VALUE="Play">
<INPUT TYPE="BUTTON" NAME="BtnStop" VALUE="Stop">
<INPUT TYPE="BUTTON" NAME="BtnAbout" VALUE="About">

<SCRIPT LANGUAGE="VBScript">
<!--
Sub BtnAbout_OnClick
   MediaPlayer1.AboutBox
End Sub

Sub BtnPlay_OnClick
    MediaPlayer1.Play
End Sub

Sub BtnStop_OnClick
    MediaPlayer1.Stop
    MediaPlayer1.CurrentPosition = 0
End Sub
-->
</SCRIPT>

</BODY>
</HTML>

Try this code with a multimedia file on your computer. Copy and paste the code into a text file, and change the value of the FileName attribute to specify the protocol, relative path, and name of the clip you want to play.


2005年08月19日

//  Create  a  new  instance  of  Word  
Word.ApplicationClass  word  =  new  Word.ApplicationClass();  
Type  wordType  =  word.GetType();  
Word.Documents  docs  =  word.Documents;  
 
//  Open  a  file  
Type  docsType  =  docs.GetType();  
object  fileName  =  "c:\\test2\\XP  Embedded  vs.  Win  CE.NET.doc";  
Word.Document  doc  =  (Word.Document)docsType.InvokeMember("Open",  System.Reflection.BindingFlags.InvokeMethod,  null,  docs,  new  Object[]  {fileName,  true,  true});  
 
//  Save  a  file  
Type  docType  =  doc.GetType();  
object  saveFileName  =  "c:\\test2\\XP  Embedded  vs.  Win  CE.NET";  
docType.InvokeMember("SaveAs",  System.Reflection.BindingFlags.InvokeMethod,  null,  doc,  new  object[]{saveFileName,  Word.WdSaveFormat.wdFormatFilteredHTML});  
 
//  Quit  Word  
wordType.InvokeMember("Quit",  System.Reflection.BindingFlags.InvokeMethod,  null,  word,  null);  

2005年08月18日

1.在WEB.CONFIG中的<system.web>节点下增加节点<identity impersonate="true"></identity>.

2.asp.net默认是没有操作dcom对象权限的,可运行dcomcnfg为相应的用户分配权限(需要你的操作系统是服务器版的);

权限分配:应该允许iusr_xx(internet来宾用户)、ANONYMOUS LOGON(匿名用户)、NETWORK(远程访问此对象的用户)启动word的权限;并为asp.net分配可启动、存取word对象的权限。

交互方式:并且将访问方式设置为交互式。