发现.NET比Java优越的地方, 学习如何将Java应用程序转换到.NET,你移植后的应用程序可以立即利用NET的优点,VS.Net和.Net Framework标志着软件开发的新纪元。
文章来源:
http://www.microsoft.com/china/msdn/events/webcasts/shared/webcast/episode.aspx?newsID=1242327
posted @ 2005-11-03 20:09 Chark 阅读(132) 评论(0)
编辑
本课介绍更高级的数据绑定技巧,不但把数据绑定在表示层,更通过使用架构的方法,来实现跨层数据绑定。
文章来源:
http://www.microsoft.com/china/msdn/events/webcasts/shared/webcast/episode.aspx?newsID=1242328
posted @ 2005-11-03 20:09 Chark 阅读(205) 评论(0)
编辑
从趣味性的角度来学习C#!这次网络广播我们会全面的介绍这个系列的网络广播课程所覆盖的内容,让大家对如何使用C#来开发游戏的周期和主要的游戏组件有一个初步的了解。在整个的系列课程的过程中,您将有机会了解开发一个叫做“ 星际骑兵”的游戏的全过程。
文章来源:
http://www.microsoft.com/china/msdn/events/webcasts/shared/webcast/episode.aspx?newsID=1242329
posted @ 2005-11-03 20:09 Chark 阅读(210) 评论(0)
编辑
想知道移动聊天Wap版(wap.m161.com.cn)是怎么开发出来的吗?想知道是如何动态适应五千多款手机或手执设备的?我们主要目的就是学会如何Mobile Control使我们的网页更适合我们的小屏幕设备,最大限度使用设备的表现能力。这次内容将包括如何在Mobile Control应用程序中如何使用Device Filters和模板定制,以及使用XHTML以及无线CSS和Visual Studio 2005创建更酷的应用程序。
文章来源:
http://www.microsoft.com/china/msdn/events/webcasts/shared/webcast/episode.aspx?newsID=1242330
posted @ 2005-11-03 20:09 Chark 阅读(286) 评论(0)
编辑
Visual Studio 2005 Team Edition for Software Architects (VSTA) 提供了一些为设计和部署分布的、面向服务的应用系统的设计器。这些设计工具使架构师和开发人员以一种新的模式设计一个分布式系统,即连接型的应用或者提供服务,或者使用服务。在2005的版本中主要包含用来设计基于Web Services的应用,和为部署而配置可重用系统的工具。本讲座将着重介绍应用和系统的设计工具,特别是Web Services设计功能,包括对先协议后实现设计(contract-first design)的支持。我们将描述如何使用工具来作架构设计,代码生成前的校验,以及可视化和扩展一个现有的解决方案。
文章来源:
http://www.microsoft.com/china/msdn/events/webcasts/shared/webcast/episode.aspx?newsID=1242332
posted @ 2005-11-03 20:09 Chark 阅读(159) 评论(0)
编辑
设计和构建分布式者能客户端本身并不是一件非常困难的事情。在本次Webcast中,我们将介绍智能客户端架构的关键特性。我们将讨论我们将在那些地方进行权衡,以及能够实现简单,强大和快速原型开发的设计概念。如果您曾经构建过两层结构的客户端/服务器应用程序,你将能够快速地理解这些概念,以及这些概念后面关于两层或者N架构的分布式智能客户端应用程序。
文章来源:
http://www.microsoft.com/china/msdn/events/webcasts/shared/webcast/episode.aspx?newsID=1242331
posted @ 2005-11-03 20:09 Chark 阅读(215) 评论(0)
编辑
在第一节课上,您已经了解到了本次系列课程要为您讲述的知识概述。本次课程讲为您讲解一般编程的基础概念,同时也主要讲解Microsoft Visual C# Express版本中的一些特殊编程元素。本次课程将涵盖变量,表达式,声明,操作符,函数,流控制,类,数组,结构和C#类型。
文章来源:
http://www.microsoft.com/china/msdn/events/webcasts/shared/webcast/episode.aspx?newsID=1242334
posted @ 2005-11-03 20:09 Chark 阅读(227) 评论(1)
编辑
ADO.NET的出现对于ASP.NET编程人员来说是非常大的一个变革,由于它的出现,使得ASP.NET程序员对数据库的操作更加的方便和快捷,它支持各种常见的数据库操作、并且对数据库的各种添加、删除、修改、更新等操作变得更加简单。在本次讲座中,我们将给大家全面介绍通过ADO.NET方式实现对数据库的操作,更会给大家介绍一些实用的编程技巧。请大家关注本次讲座。
文章来源:
http://www.microsoft.com/china/msdn/events/webcasts/shared/webcast/episode.aspx?newsID=1242340
posted @ 2005-11-03 20:09 Chark 阅读(166) 评论(0)
编辑
ASP.NET提供了一套新的数据缓存与传送机制,即profile技术,通过这种新技术可以有效把数据缓保存到制定位置,安全性和访问性能都会有大幅度提高。
文章来源:
http://www.microsoft.com/china/msdn/events/webcasts/shared/webcast/episode.aspx?newsID=1242342
posted @ 2005-11-03 20:09 Chark 阅读(111) 评论(0)
编辑
本课程在介绍WPF(Windows Presentation Foundation)(avalon)基础概念的基础上,以示例的方式由浅入深地向您介绍Avalon的编程模型,Xaml,控件,数据绑定,文档,图形,动画和多媒体支持。着重阐述其带来的新的编程和设计思想,以及他与一些其它的界面技术(WinForm,ASP.NET,DirectX等)的关系。
文章来源:
http://www.microsoft.com/china/msdn/events/webcasts/shared/webcast/episode.aspx?newsID=1242343
posted @ 2005-11-03 20:09 Chark 阅读(93) 评论(0)
编辑
动起来!本节课程讲述让你的精灵动起来所相关的知识。运动所涉及的基本概念,如位置、速度、方向、路程等,并分别给出了他们在不同坐标系统下的表示形势和计算方法。以及运动时产生的碰撞在不同坐标下的判定及其公式。
文章来源:
http://www.microsoft.com/china/msdn/events/webcasts/shared/webcast/episode.aspx?newsID=1242344
posted @ 2005-11-03 20:09 Chark 阅读(44) 评论(0)
编辑
随着微软Windows XP Service Pack 2的推出,很多新的特性比如Windows 防火墙, web增强访问,内存保护等相继推出,直接影响了开发人员以前对于安全程序的编写方式,同时也改变了应用程序的运行方式。本章节将对于Windows XP Service Pack 2对于安全开发的新特性作一个综述。
文章来源:
http://www.microsoft.com/china/msdn/events/webcasts/shared/webcast/episode.aspx?newsID=1242346
posted @ 2005-11-03 20:09 Chark 阅读(45) 评论(0)
编辑
在ASP.NET中,错误的处理是非常简单和方便的;同时ASP.NET对于程序的优化也有很大的改进。在本次讲座中,我们将就这两个话题给大家做一些介绍,并围绕这两个话题给大家讲解一些实际开发过程中可能会用的经验和技巧。
文章来源:
http://www.microsoft.com/china/msdn/events/webcasts/shared/webcast/episode.aspx?newsID=1242333
posted @ 2005-11-03 20:09 Chark 阅读(78) 评论(0)
编辑
继上一讲中介绍了编程的基本概念后,我们在第三讲中将关注游戏开发中的一些重要元素,图像,玩家输入,声音和网络。我们将讨论诸如2D/3D图像,矢量图像和位图图像,键盘、鼠标、力回馈控制器的使用,音频的格式,3D音效,网络协议,多人游戏,点对点(P2P)模式和客户端/服务器模式的比较等游戏元素。
文章来源:
http://www.microsoft.com/china/msdn/events/webcasts/shared/webcast/episode.aspx?newsID=1242335
posted @ 2005-11-03 20:09 Chark 阅读(68) 评论(0)
编辑
本培训课程探讨GoF23之Abstract Factory 抽象工厂模式的意图、动因、原理、应用场景与C#语言实现,以及该模式在.NET框架程序设计中的具体应用。
文章来源:
http://www.microsoft.com/china/msdn/events/webcasts/shared/webcast/episode.aspx?newsID=1242337
posted @ 2005-11-03 20:09 Chark 阅读(82) 评论(0)
编辑
前瞻性地介绍下一代Visual Basic 9.0在数据、XML和动态编程方面激进的改进。内容涉及最新语言特性:类型推测、对象初始化器、查询包含和XML深层支持等
文章来源:
http://www.microsoft.com/china/msdn/events/webcasts/shared/webcast/episode.aspx?newsID=1242336
posted @ 2005-11-03 20:09 Chark 阅读(37) 评论(0)
编辑
在前面的几讲中我们简要介绍了一下图形.在第本次webcast中我们会将重点放在叫做“sprites”的绘图元素中。目前许多游戏利用sprites 进行制作。我们在这讲中将介绍如何在游戏项目中创建并使用animated sprites,包括应用背景,视角,定义框架,框架延迟,透明,混合等特殊效果,还将利用这些概念执行游戏项目中的main行为和enemy行为。
文章来源:
http://www.microsoft.com/china/msdn/events/webcasts/shared/webcast/episode.aspx?newsID=1242338
posted @ 2005-11-03 20:09 Chark 阅读(59) 评论(0)
编辑
作为软件开发生命周期的一个步骤,运行维护人员(网管人员)和软件开发人员在一起讨论应用系统的部署要求。这个过程往往是在周期的末尾,应用已经开发完毕的时候。而且通常没有考虑到应用系统在数据中心中部署和运行时所需要遵守的规则。本讲座中,我们将使用Visual Studio 逻辑数据中心设计器和部署设计器,将这两种职能联系起来,描述分布式系统的宿主环境,捕获应用和运行环境的配置,定义规则和策略,在部署和应用设计完成时对这些要求进行校验。然后我们介绍用来生成部署脚本的部署报告,以及一些扩展性功能,这些功能可以捕获更多的与应用和运行环境相关的元数据和约束。
文章来源:
http://www.microsoft.com/china/msdn/events/webcasts/shared/webcast/episode.aspx?newsID=1242339
posted @ 2005-11-03 20:09 Chark 阅读(76) 评论(0)
编辑
介绍如何利用Excel的报表和XML导入功能结合SQL Server和ASP.NET实现网页报表
文章来源:
http://www.microsoft.com/china/msdn/events/webcasts/shared/webcast/episode.aspx?newsID=1242341
posted @ 2005-11-03 20:09 Chark 阅读(359) 评论(0)
编辑
即使在Windows Mobile平台的移动设备上,我们也可以利用MSMQ来传递消息,以达到灵活可靠的通讯方式,本次课程将向您阐述MSMQ是所有在“非持久在线设备”上开发分布式应用程序的理想解决方案!
文章来源:
http://www.microsoft.com/china/msdn/events/webcasts/shared/webcast/episode.aspx?newsID=1242345
posted @ 2005-11-03 20:09 Chark 阅读(83) 评论(0)
编辑
Visual Studio 2005 Team Edition for Software Architects 带有非常强大的、设计类和面向服务应用的可视化建模工具。作为Visual Studio SDK的一部分,微软提供一个新的工具包,用来定义、生成和定制各种可视化建模工具。这些可视化建模工具将采用Visual Studio中建模工具同样的建模基础架构。本讲座将介绍如何开发这些面向领域特定语言(Domain-Specific Languages, DSL)的工具。我们将讲解如何定义领域模型,定义建模语言的图形标识,以创建面向特定领域的、模型驱动的开发工具。最后,我们说明为什么DSL工具是Visual Studio 2005中创建软件工厂(software factories)的一个关键技术。
文章来源:
http://www.microsoft.com/china/msdn/events/webcasts/shared/webcast/episode.aspx?newsID=1242347
posted @ 2005-11-03 20:09 Chark 阅读(308) 评论(0)
编辑
上一节课中您已经学会如何使小精灵移动,本节课程的重点在于电子游戏如何处理玩家的输入来创建并移动小精灵。学习如何将键盘输入、矢量方向和位置相结合,实现游戏中主要角色和敌人的移动和“相互射击”。
文章来源:
http://www.microsoft.com/china/msdn/events/webcasts/shared/webcast/episode.aspx?newsID=1242348
posted @ 2005-11-03 20:09 Chark 阅读(76) 评论(0)
编辑
毫无疑问,声音是电子游戏中非常重要的一个环节。在以往WebCast的基础上我们这次围绕着电子游戏中两个资本要素——背景音乐和音效的开发和实现来进行探讨。初次以外你还会了解在游戏是如何实现分数统计的。
文章来源:
http://www.microsoft.com/china/msdn/events/webcasts/shared/webcast/episode.aspx?newsID=1242349
posted @ 2005-11-03 20:09 Chark 阅读(78) 评论(0)
编辑
本培训课程探讨GoF23之Builder 生成器模式的意图、动因、原理、应用场景与C#语言实现,以及该模式在.NET框架程序设计中的具体应用。
文章来源:
http://www.microsoft.com/china/msdn/events/webcasts/shared/webcast/episode.aspx?newsID=1242351
posted @ 2005-11-03 20:09 Chark 阅读(140) 评论(0)
编辑
ADO.NET中最重要的一个概念就是数据集,它是ADO.NET区别于ADO的最重要的一个标志。它的出现使得对数据库的操作变成了真正意义上的无连接操作。在本次讲座中,我们将给大家全面介绍Dataset的基本用法和常见的一个使用技巧,相信对大家程序开发会起到很好的帮助作用。
文章来源:
http://www.microsoft.com/china/msdn/events/webcasts/shared/webcast/episode.aspx?newsID=1242350
posted @ 2005-11-03 20:09 Chark 阅读(121) 评论(0)
编辑
这将我是我们的最后一讲,我们将继续对sprites 进行探讨。我们本节的重点将是要放在了解更多的sprites细节,以及如何进行冲突检测。学习如何利用这些概念应用于enemy行为以及bullet行为。
文章来源:
http://www.microsoft.com/china/msdn/events/webcasts/shared/webcast/episode.aspx?newsID=1242352
posted @ 2005-11-03 20:09 Chark 阅读(74) 评论(0)
编辑
带进度条的文件上传(800M文件都没问题).zip 点击下载
posted @ 2005-11-03 19:48 Chark 阅读(2636) 评论(10)
编辑
asp.net日期选择控件TestControl(v1.0.1).rar 点击下载
posted @ 2005-11-03 19:47 Chark 阅读(656) 评论(0)
编辑
asp.net图表控件点击下载
posted @ 2005-11-03 19:47 Chark 阅读(2044) 评论(1)
编辑
文件管理原码.rar 点击下载
posted @ 2005-11-03 19:46 Chark 阅读(258) 评论(0)
编辑
存储过程示范 存储过程分页三种方法 自已写的储存过程分页
/*
创建一个名为Get的储存过程
先定义两个参数 ,其中@count为输出参数
sql语句中 第一句返回该表所有内容, 第二句 返回表的行数,并把值赋给输出参数
*/
CREATE PROCEDURE [Get]
@name varchar (50),
@count int output
AS
SELECT * FROM Table1
SELECT @count=COUNT(*) FROM Table1 WHERE UserName = @name
GO
private void ProcedureRead()
{
conn = new SqlConnection(strConn);
cmd = new SqlCommand("Get", conn);
cmd.CommandType = CommandType.StoredProcedure;
cmd.Parameters.Add("@name", SqlDbType.VarChar).Value="呵呵";
cmd.Parameters.Add("@count", SqlDbType.Int).Direction = ParameterDirection.Output;
cmd.Connection.Open();
SqlDataReader dr = cmd.ExecuteReader();
while(dr.Read())
Response.Write(dr[0].ToString()+"<br>");
Response.Write("结束!");
dr.Close();
cmd.Connection.Close();
Response.Write("<script>alert("+cmd.Parameters["@count"].Value.ToString()+");</script>");
}
// 存储过程
//创建新表
CREATE PROCEDURE [dbo].[NewTable]
AS
CREATE TABLE [dbo].[NewTables] (
[HitDate] [datetime] NOT NULL , /*不能为空*/
[TotalHits] [float] NULL /*可以为空*/
) ON [PRIMARY]
GO
//动态创建新表
CREATE PROCEDURE [dbo].[TestNew]
@TableName VARCHAR(100)
AS
declare @sql VARCHAR(100) /*定义内部变量*/
SET @sql = @TableName /*内部变量赋值时加上 SET*/
SET @sql = 'CREATE TABLE '+@sql+'(HitDate datetime NULL,TotalHits float NULL)' /*以字符串型式赋值给内部变量*/
EXEC (@sql) /*执行@sql变量内的sql语句*/
GO
// 更新
CREATE PROCEDURE [dbo].[testUpdate]
AS
declare @sql VARCHAR(100)
UPDATE Table1 SET UserName = (SELECT UserName FROM Table1 WHERE UserInfo = '信息1')
WHERE UserName = '第一名字'
GO
// 以上语句中如果select子句返回不子一个值(或者说UserInfo不只一个值匹配'信息1'),将导制错误
// 不过可以用以下方法把select分开,在取得返回值后在给更新语句,这样如果有多个匹配值,SELECT
// 也只返回最后一个匹配字符的值
CREATE PROCEDURE [dbo].[testUpdate]
AS
declare @sql VARCHAR(100)
SELECT @sql = UserName FROM Table1 WHERE UserInfo = '信息1'
UPDATE Table1 SET UserName = @sql
WHERE UserName = '第一名字'
GO
// 判断语句的示范
CREATE TABLE [dbo].[PageViews] (
[HitDate] [datetime] NULL ,
[TotalHits] [float] NULL
) ON [PRIMARY]
GO
CREATE TABLE [dbo].[Unique] (
[HitDate] [datetime] NOT NULL ,
[TotalHits] [float] NOT NULL
) ON [PRIMARY]
GO
SET QUOTED_ IDENTIFIER OFF
GO
SET ANSI_NULLS ON
GO
CREATE PROCEDURE [dbo].[HitsTotal]
@todaysdate datetime
AS
DECLARE @TOTAL int
SET @TOTAL = (SELECT COUNT(*) FROM [PageViews] WHERE HitDate = @todaysdate)
IF @TOTAL > 0
BEGIN
UPDATE PageViews SET TotalHits = (SELECT TotalHits FROM PageViews WHERE HitDate = @todaysdate)
WHERE HitDate = @todaysdate
END
ELSE
BEGIN
INSERT INTO PageViews
(
HitDate,
TotalHits
)
VALUES
(
@todaysdate,
1
)
END
GO
SET QUOTED_ IDENTIFIER OFF
GO
SET ANSI_NULLS ON
GO
SET QUOTED_ IDENTIFIER OFF
GO
SET ANSI_NULLS ON
GO
CREATE PROCEDURE [dbo].[HitsUnique]
@todaysdate datetime
AS
DECLARE @TOTAL int
SET @TOTAL = (SELECT COUNT(*) FROM [Unique] WHERE HitDate = @todaysdate)
IF @TOTAL > 0
BEGIN
UPDATE [Unique]
SET
TotalHits =
((SELECT TotalHits FROM [Unique] WHERE HitDate = @todaysDate ) +1)
WHERE HitDate = @todaysdate
END
ELSE
BEGIN
INSERT INTO [Unique]
(
HitDate,
TotalHits
)
VALUES
(
@todaysdate,
1
)
END
GO
SET QUOTED_ IDENTIFIER OFF
GO
SET ANSI_NULLS ON
GO
/*
编号储存过程注意事项:
1 储存过程以"CREATE PROCEDURE dbo.库名 AS" 开始,GO 结束
在查询分析器内写完储存过程,执行后该储存过程在自动创建
在该数据库存储过程表中. 如要测试,可把 储存过程开始和结
束标识符去掉后执行.
2 变量声明格式为"@name varchar(100)" ,注意声明字符串变量
时初始变量大小, 声明全局变量都在 AS 句语之去, 局部变量
都在 AS 之后,格式为: "DECLARE @name varchar(100)" 赋
值是前面另上 SET 如: "SET @name = 'create table ' + name"
*/
/*
T - SQL 语法 :
BEGIN 和 END ---- BEGIN...END 块内类似于C#中的大括号, 如: if(1>2)BEGIN...END else BEGIN...END
COUNT ----- 行数合计 如:COUNT(*)
declare ----- 内部变量声名 如:@name VARCHAR(100)
SET ----- 变量赋值时用 如: SET @name = '美女' , 在SELECT等子句中
内赋值不用SET 如: SELECT @name=COUNT(*) FROM tab
DROP PROCEDURE ---- 删除存储过程
EXEC ------ 执行其它"sql字符串"或"存储过程"如:
sql字符串: exec("select * from tab")
存储过程 : DECLARE @percent int //以下执行了三个"存储过程" 其它有第一个执行后的参数给第二个执行体使用
exec Get '名字1', @userinfo = @percent output
exec [inser] @percent,@percent
exec Get @percent, @userinfo = @percent output
*/
/*
数据类型:
字符型
char 与 varchar 的区别在于,前者为定长,如果字符串不够该定义和度,则以英文空格填充
char 存放非Unicode字符集,英文以1个字节存放,汉字以2个字节存放,可存放1-8000 = 8kb
nchar 存放Unicode字符集. 所有字符都以2个字节存放 ,可存放1-4000
Text 是存放最大的字符类型
数字类型:
bigint :从-2^63(-9223372036854775808)到2^63-1(9223372036854775807)的整型数据。
int :从-2^31(-2,147,483,648)到2^31-1(2,147,483,647)的整型数据。
smallint:从-2^15(-32,768)到2^15-1(32,767)的整数数据。
tinyint :从0到255的整数数据。
bit :1或0的整数数据。
decimal和numeric
这两种数据类型是等效的。都有两个参数:p(精度)和s(小数位数)。
p指定小数点左边和右边可以存储的十进制数字的最大个数,p必须是从 1到38之间的值。
s指定小数点右边可以存储的十进制数字的最大个数,s必须是从0到p之间的值,默认小数位数是0。
float和real
float :从-1.79^308到1.79^308之间的浮点数字数据。
real :从-3.40^38到3.40^38之间的浮点数字数据。在SQL Server中,real的同义词为float(24)。
日期型:
datetime :从1753年1月1日到9999年12月31日的日期和时间数据,精确到百分之三秒。
smalldatetime:从1900年1月1日到2079年6月6日的日期和时间数据,精确到分钟。
二进制数据包括 Binary、Varbinary 和 Image
Binary 数据类型既可以是固定长度的(Binary),也可以是变长度的。
Binary[(n)] 是 n 位固定的二进制数据。其中,n 的取值范围是从 1 到 8000。其存储窨的大小是 n + 4 个字节。
Varbinary[(n)] 是 n 位变长度的二进制数据。其中,n 的取值范围是从 1 到 8000。其存储窨的大小是 n + 4个字节,不是n 个字节。
在 Image 数据类型中存储的数据是以位字符串存储的,不是由 SQL Server 解释的,必须由应用程序来解释。例如,应用程序可以使用BMP、TIEF、GIF 和 JPEG 格式把数据存储在 Image 数据类型中。
*/
//存储过程分页三种方法:
3
4 CREATE TABLE [TestTable] (
5 [ID] [int] IDENTITY (1, 1) NOT NULL ,
6 [FirstName] [nvarchar] (100) COLLATE Chinese_PRC_CI_AS NULL ,
7 [LastName] [nvarchar] (100) COLLATE Chinese_PRC_CI_AS NULL ,
8 [Country] [nvarchar] (50) COLLATE Chinese_PRC_CI_AS NULL ,
9 [Note] [nvarchar] (2000) COLLATE Chinese_PRC_CI_AS NULL
10 ) ON [PRIMARY]
11 GO
12
13
14
15 插入数据:(2万条,用更多的数据测试会明显一些)
16 SET IDENTITY_INSERT TestTable ON
17
18 declare @i int
19 set @i=1
20 while @i<=20000
21 begin
22 insert into TestTable([id], FirstName, LastName, Country,Note) values(@i, 'FirstName_XXX','LastName_XXX','Country_XXX','Note_XXX')
23 set @i=@i+1
24 end
25
26 SET IDENTITY_INSERT TestTable OFF
27
28
29
30 -------------------------------------
31
32 分页方案一:(利用Not In和SELECT TOP分页)
33 语句形式:
34
50
51 -------------------------------------
52 SELECT TOP 10 *
35 FROM TestTable
36 WHERE (ID NOT IN
37 (SELECT TOP 20 id
38 FROM TestTable
39 ORDER BY id))
40 ORDER BY ID
41
42
43 SELECT TOP 页大小 *
44 FROM TestTable
45 WHERE (ID NOT IN
46 (SELECT TOP 页大小*页数 id
47 FROM 表
48 ORDER BY id))
49 ORDER BY ID
53 分页方案二:(利用ID大于多少和SELECT TOP分页)
54 语句形式:
55 SELECT TOP 10 *
56 FROM TestTable
57 WHERE (ID >
58 (SELECT MAX(id)
59 FROM (SELECT TOP 20 id
60 FROM TestTable
61 ORDER BY id) AS T))
62 ORDER BY ID
63
64
65 SELECT TOP 页大小 *
66 FROM TestTable
67 WHERE (ID >
68 (SELECT MAX(id)
69 FROM (SELECT TOP 页大小*页数 id
70 FROM 表
71 ORDER BY id) AS T))
72 ORDER BY ID
73
74
75 -------------------------------------
76
77 分页方案三:(利用SQL的游标存储过程分页)
78 create procedure XiaoZhengGe
79 @sqlstr nvarchar(4000), --查询字符串
80 @currentpage int, --第N页
81 @pagesize int --每页行数
82 as
83 set nocount on
84 declare @P1 int, --P1是游标的id
85 @rowcount int
86 exec sp_cursoropen @P1 output,@sqlstr,@scrollopt=1,@ccopt=1,@rowcount=@rowcount output
87 select ceiling(1.0*@rowcount/@pagesize) as 总页数--,@rowcount as 总行数,@currentpage as 当前页
88 set @currentpage=(@currentpage-1)*@pagesize+1
89 exec sp_cursorfetch @P1,16,@currentpage,@pagesize
90 exec sp_cursorclose @P1
91 set nocount off
92
93 其它的方案:如果没有主键,可以用临时表,也可以用方案三做,但是效率会低。
94 建议优化的时候,加上主键和索引,查询效率会提高。
95
96 通过SQL 查询分析器,显示比较:我的结论是:
97 分页方案二:(利用ID大于多少和SELECT TOP分页)效率最高,需要拼接SQL语句
98 分页方案一:(利用Not In和SELECT TOP分页) 效率次之,需要拼接SQL语句
99 分页方案三:(利用SQL的游标存储过程分页) 效率最差,但是最为通用
100
101 在实际情况中,要具体分析。
// 自已写的储存过程分页
/*-- classify参数查询指定分类的所有帖子 */
CREATE PROCEDURE GetForumInfo
@pageing int,
@pagesize int,
@classify varchar(10)
AS
declare @_pageing VARCHAR(100)
IF @pageing <= 0
BEGIN
SET @pageing = 1
END
set @_pageing = cast(@pagesize*(@pageing-1) AS varchar)
exec ('SELECT TOP '+@pagesize+'
id,state,
(select title from Classify where id=classify_id) as
classify_id,author,revert_number,see_number,end_data
FROM ForumInfo
WHERE classify_id='+@classify+'
and
id not in (select top '+@_pageing+' id from ForumInfo where classify_id='+@classify+'order by end_data ASC)
ORDER BY end_data ASC')
GO
posted @ 2005-11-03 19:34 Chark 阅读(3358) 评论(0)
编辑
//WinNT用户管理
using System;
using System.DirectoryServices;
namespace Host.AdminManager.Inc
{
public class WindwosUser
{
//创建NT用户
//传入参数:Username要创建的用户名,Userpassword用户密码,Path主文件夹路径
public static bool CreateNTUser(string Username,string Userpassword,string Path)
{
DirectoryEntry obDirEntry = null;
try
{
obDirEntry = new DirectoryEntry("WinNT://" + Environment.MachineName);
DirectoryEntry obUser = obDirEntry.Children.Add(Username, "User"); //增加用户名
obUser.Properties["FullName"].Add(Username); //用户全称
obUser.Invoke("SetPassword", Userpassword); //用户密码
obUser.Invoke("Put", "Description","Test User from .NET");//用户详细描述
//obUser.Invoke("Put","PasswordExpired",1); //用户下次登录需更改密码
obUser.Invoke("Put","UserFlags",66049); //密码永不过期
obUser.Invoke("Put","HomeDirectory",Path); //主文件夹路径
obUser.CommitChanges();//保存用户
DirectoryEntry grp = obDirEntry.Children.Find("Users", "group");//Users组
if(grp.Name!="")
{
grp.Invoke("Add",obUser.Path.ToString());//将用户添加到某组
}
return true;
}
catch
{
return false;
}
}
//删除NT用户
//传入参数:Username用户名
public static bool DelNTUser(string Username)
{
try
{
DirectoryEntry obComputer = new DirectoryEntry("WinNt://" + Environment.MachineName);//获得计算机实例
DirectoryEntry obUser = obComputer.Children.Find(Username,"User");//找得用户
obComputer.Children.Remove(obUser);//删除用户
return true;
}
catch
{
return false;
}
}
//修改NT用户密码
//传入参数:Username用户名,Userpassword用户新密码
public static bool InitNTPwd(string Username,string Userpassword)
{
try
{
DirectoryEntry obComputer = new DirectoryEntry("WinNt://" + Environment.MachineName);
DirectoryEntry obUser = obComputer.Children.Find(Username,"User");
obUser.Invoke("SetPassword", Userpassword);
obUser.CommitChanges();
obUser.Close();
obComputer.Close();
return true;
}
catch
{
return false;
}
}
}
}
posted @ 2005-11-03 19:33 Chark 阅读(388) 评论(1)
编辑
posted @ 2005-11-03 19:32 Chark 阅读(635) 评论(0)
编辑
日期显示格式:
当前时间:2005-11-3 18:31:30
Date = 2005-11-3 0:00:00
Day = 3
DayOfWeek = Thursday
DayOfYear = 307
Hour = 18
Millisecond = 171
Minute = 31
Month = 11
Second = 30
Ticks = 632666394901718750
TimeOfDay = 18:31:30.1718750
ToFileTime = 127754874901718750
ToFileTimeUtc = 127755162901718750
ToLocalTime = 2005-11-4 2:31:30
ToLongDateString = 2005年11月3日
ToLongTimeString = 18:31:30
ToOADate = 38659.7718769792
ToShortDateString = 2005-11-3
ToShortTimeString = 18:31
ToUniversalTime = 2005-11-3 10:31:30
DateTime d = DateTime.Now;
Response.Write("当前时间:" + d.ToString() + "<BR><BR>");
Response.Write("Date = " + d.Date.ToString() + "<BR>");
Response.Write("Day = " + d.Day.ToString() + "<BR>");
Response.Write("DayOfWeek = " + d.DayOfWeek.ToString() + "<BR>");
Response.Write("DayOfYear = " + d.DayOfYear.ToString() + "<BR>");
Response.Write("Hour = " + d.Hour.ToString() + "<BR>");
Response.Write("Millisecond = " + d.Millisecond.ToString() + "<BR>");
Response.Write("Minute = " + d.Minute.ToString() + "<BR>");
Response.Write("Month = " + d.Month.ToString() + "<BR>");
Response.Write("Second = " + d.Second.ToString() + "<BR>");
Response.Write("Ticks = " + d.Ticks.ToString() + "<BR>");
Response.Write("TimeOfDay = " + d.TimeOfDay.ToString() + "<BR>");
Response.Write("ToFileTime = " + d.ToFileTime().ToString() + "<BR>");
Response.Write("ToFileTimeUtc = " + d.ToFileTimeUtc().ToString() + "<BR>");
Response.Write("ToLocalTime = " + d.ToLocalTime().ToString() + "<BR>");
Response.Write("ToLongDateString = " + d.ToLongDateString() + "<BR>");
Response.Write("ToLongTimeString = " + d.ToLongTimeString() + "<BR>");
Response.Write("ToOADate = " + d.ToOADate().ToString() + "<BR>");
Response.Write("ToShortDateString = " + d.ToShortDateString() + "<BR>");
Response.Write("ToShortTimeString = " + d.ToShortTimeString() + "<BR>");
Response.Write("ToUniversalTime = " + d.ToUniversalTime() + "<BR>");
posted @ 2005-11-03 19:32 Chark 阅读(2254) 评论(0)
编辑
//读取INI文件 INI ini = new INI();
using System;
using System.Text;
using System.Runtime.InteropServices;
namespace QF
{
/// <summary>
/// .INI文件 操作。
/// </summary>
public class INI
{
/// <summary>
/// 创建一个如下的INI对象
/// INI ini = new INI(@"C:\test.ini");
/// </summary>
public INI(string INIPath)
{
path = INIPath;
}
public string path;
//引用动态连接库方法
[DllImport("kernel32")]
private static extern long WritePrivateProfileString(string section,string key,string val,string filePath);
[DllImport("kernel32")]
private static extern int GetPrivateProfileString(string section,string key,string def, StringBuilder retVal,int size,string filePath);
/// <summary>
/// 写入数据
/// </summary>
/// <PARAM name="Section"></PARAM>
/// 节点名
/// <PARAM name="Key"></PARAM>
/// 键名
/// <PARAM name="Value"></PARAM>
/// 值名
public void Write(string Section,string Key,string Value)
{
WritePrivateProfileString(Section,Key,Value,this.path);
}
/// <summary>
/// 读取INI数据
/// </summary>
/// <PARAM name="Section"></PARAM>
/// <PARAM name="Key"></PARAM>
/// <PARAM name="Path"></PARAM>
/// <returns></returns>
public string Read(string Section,string Key)
{
StringBuilder temp = new StringBuilder(255);
int i = GetPrivateProfileString(Section,Key,"",temp, 255, this.path);
return temp.ToString();
}
}
}
posted @ 2005-11-03 19:28 Chark 阅读(248) 评论(0)
编辑
//Disk 取得磁盘空间 或 指定文件夹使用情况
using System;
using System.IO;
using System.Management;
namespace Host.AdminManager.Inc
{
/// <summary>
/// Disk 的摘要说明。
/// </summary>
public class Disk
{
public Disk()
{
//
// TODO: 在此处添加构造函数逻辑
//
}
//取得disk大小
public string DiskSize(string path)
{
ManagementObject size = new ManagementObject("win32_logicaldisk.deviceid="+path);
size.Get();
UInt64 b = 1024;
UInt64 a = (Convert.ToUInt64(size["Size"])/b)/b;
return a.ToString();
}
//取得文件夹大小
public string size(string path, string utterlyPath ,out int chang)
{
UInt64 t1024 = 1024, t10 = 10;
UInt64 v = FolderSize(path,utterlyPath);
v = v/t1024;
chang = Convert.ToInt32(v/t10);
return v.ToString();
}
public UInt64 FolderSize(string path, string utterlyPath)
{
UInt64 Fsize = 0;
//try {
Fsize = FolderFileSize(path);
DirectoryInfo [] folders = (new DirectoryInfo(path)).GetDirectories();
foreach(DirectoryInfo folder in folders)
{
if (folder.FullName != utterlyPath)
Fsize += FolderSize(folder.FullName, utterlyPath);
}
//}
//catch(Exception ex)
//{
//MessageBox.Show(ex.Message);
//}
return Fsize;
}
public UInt64 FolderFileSize(string path)
{
UInt64 size = 0;
//try
//{
FileInfo [] files = (new DirectoryInfo(path)).GetFiles();
foreach(FileInfo file in files)
{
size += (UInt64)file.Length;
}
//}
//catch(Exception ex)
//{
//MessageBox.Show(ex.Message);
//}
return size;
}
}
}
posted @ 2005-11-03 19:27 Chark 阅读(830) 评论(0)
编辑
//win32_logicaldisk
//导入dll:解决方案 ==> 引用 ==> 添加引用 ==> COM ==> System.Management.dll --C:\WINDOWS\Microsoft.NET\Framework\v1.1.4322
using System;
using System.Management;
class disk //数据管理对象
{
public static void Main()
{
//创建 C: 的实例
ManagementObject disk = new ManagementObject("win32_logicaldisk.deviceid=\"c:\"");
disk.Get();
Console.WriteLine("磁盘大小"+disk["Size"]+"bytes"); //打印C:大小,单位bytes
}
}
确定计算机名称或 IP 地址是物理计算机还是虚拟 IP 地址 CIMV2:Win32_ComputerSystem
在远程计算机上运行进程 CIMV2:Win32_Process
确定远程计算机中是否存在某个目录 CIMV2:Win32_Directory
停止/启动 IIS System.Diagnostics.Process
将程序集添加到全局程序集缓存 (GAC) System.Diagnostics.Process
注册和配置 GAM 组件 COMAdmin 目录 (COM 1.0)
创建 Web 站点 System.DirectoryServices.DirectoryEntry
//可以用此方法来选择集合中的部份记录 "SELECT * FROM Win32_Service WHERE Name = 'ServiceName'",
"Win32_LogicalDisk" 类 //通过它我们可以查看到本地驱动器
ManagementObjectSearcher query = new ManagementObjectSearcher("SELECT * From Win32_LogicalDisk "); //查询
ManagementObjectCollection queryCollection = query.Get(); //Get获取集合并赋给 Collention
foreach ( ManagementObject mo in queryCollection) //偏历集合
{
Console.WriteLine("type:"+mo["DriveType"].ToString());
sConsole.WriteLine("Drive: " + mo["Name"].ToString()); //打印出所有驱动器
}
"Win32_Environment" 类 //环境变量
using System;
using System.Management;
public class EnumerateInstances
{
public static void Main()
{
SelectQuery query = new SelectQuery("Win32_Environment");
ManagementObjectSearcher searcher = new ManagementObjectSearcher(query);
foreach (ManagementBaseObject envVar in searcher.Get())
Console.WriteLine("Variable : {0}, Value = {1}",envVar["Name"],envVar["VariableValue"]);
}
}
"Win32_OperatingSystem" 类 //操作系统信息
Console.WriteLine( "操作系统: " + mo["Caption"]);
Console.WriteLine( "版本号: " + mo["Version"]);
Console.WriteLine( "制造商: " + mo["Manufacturer"]);
Console.WriteLine( "计算机名: " +mo["csname"]);
Console.WriteLine("Windows目录: " + mo["WindowsDirectory"]);
"Win32_Service" 类 //系统服务
//输出默认站点的目录结构
using System;
using System.DirectoryServices;
class IISFolderList
{
static void ListFolder(DirectoryEntry paraEntry, int paraIndent)
{
for(int i=paraIndent; i>0; i--)
Console.Write(' ');
Console.WriteLine(paraEntry.Name);
paraIndent++;
foreach(DirectoryEntry tempEntry in paraEntry.Children)
ListFolder(tempEntry,paraIndent);
paraEntry.Dispose();
}
static void Main(string[] args)
{
ListFolder(new DirectoryEntry("IIS://localhost/W3SVC/1/Root"),0);
}
}
posted @ 2005-11-03 19:27 Chark 阅读(2644) 评论(3)
编辑
//磁盘空间管理
using System;
using System.IO;
using System.Management; //解决方案==>引用==>添加引用
.
namespace Host.AdminManager.Inc
{
public class Disk
{
//取得disk大小
public string DiskSize(string path)
{
ManagementObject size = new ManagementObject("win32_logicaldisk.deviceid="+path);
size.Get();
UInt64 b = 1024;
UInt64 a = (Convert.ToUInt64(size["Size"])/b)/b;
return a.ToString();
}
//取得文件夹大小
public string size(string path, string utterlyPath ,out int chang)
{
UInt64 t1024 = 1024, t10 = 10;
UInt64 v = FolderSize(path,utterlyPath);
v = v/t1024;
chang = Convert.ToInt32(v/t10);
return v.ToString();
}
public UInt64 FolderSize(string path, string utterlyPath)
{
UInt64 Fsize = 0;
try {
Fsize = FolderFileSize(path);
DirectoryInfo [] folders = (new DirectoryInfo(path)).GetDirectories();
foreach(DirectoryInfo folder in folders)
{
if (folder.FullName != utterlyPath)
Fsize += FolderSize(folder.FullName, utterlyPath);
}
}
catch(Exception ex)
{
//MessageBox.Show(ex.Message);
}
return Fsize;
}
public UInt64 FolderFileSize(string path)
{
UInt64 size = 0;
try
{
FileInfo [] files = (new DirectoryInfo(path)).GetFiles();
foreach(FileInfo file in files)
{
size += (UInt64)file.Length;
}
}
catch(Exception ex)
{
//MessageBox.Show(ex.Message);
}
return size;
}
}
}
//调用示范:
string path = Request.PhysicalApplicationPath;
disk d=new disk();
string o; // 大小
a.Text = d.size(path+@"Data\","", out o));
g1.Width = o;
posted @ 2005-11-03 19:26 Chark 阅读(828) 评论(0)
编辑
操作iis说明 操作原码
.Net中需要使用ADSI来操作IIS
System.DirectoryServices命名空间--DirectoryEntry //在.net组件中 System.DirectoryServices.dll
了解IIS元数据(Metabase)的层次结构,每一个节点称之Key,而每个Key可以包含一或多个值,这些值就是我们说的属性(properties)
IIS元数据中的Key与IIS中的元素是相符的,因此元数据中的属性值的设定是会影响IIS中的设置。
Schema 指每个结点的类型
IIsVirtualDir 虚拟目录
IIsWebDir 普通目录

.. 文件
//创建虚拟目录
DirectoryEntry--目录入口。使用过ADSI的人都知道操作IIS时,需要提供他们的Path
这个Path的格式为: IIS://ComputerName/Service/Website/Directory
ComputerName :即操作的服务器的名字,可以是名字也可以是IP,经常用的就是localhost
Service :即操作的服务器 如:
W3SVC Web
MSFTPSVC FTP

SMTP
WebSite:站点标识,设置操作的站点。是一个数字,默认站点是1,如果有其它,则从1始依次类推。
Directory:目录名称,顶层目录为"ROOT",其它目录则是(Child)
1.首先我们获取一个站点的顶层目录(根目录):
DirectoryEntry rootfolder = new DirectoryEntry("IIS://localhost/W3SVC/1/ROOT");
如果我们创建这个对象是没有发生异常,则表示这个目录是真实存在的。
2.添加新的虚拟目录,比如我们要加的是"目录名":
虚拟目录名 目录类型(Schema)
DirectoryEntry newVirDir = rootfolder.Children.Add("目录名","IIsWebVirtualDir");
newVirDir.Invoke("AppCreate",true); //调用ADSI中的"AppCreate"方法将目录真正创建
newVirDir.CommitChanges(); //最后便是依次调用新、根目录的CommitChanges方法,确认此次操作。
rootfolder.CommitChanges();
//建议大家最好是先创建目录,然后再赋值,即更新目录信息。
3.更新虚拟目录
了解IIS中一些重要的设置
(AccessRead) 可读
(AccessWrite) 可写
(AccessExecute) 执行
这些都可通过DirectoryEntry.Properties属性集合的赋值来实现。赋值可以通过两种方式来完成:
第一种是调用Properties集合的Add方法,如:
dir.Properties["AccessRead"].Add(true);
第二种是对第一个索引值赋值:
dir.Properties["AccessRead"][0] = true;
这两种方法都是可行的。具体是要看你的喜好了。
在进行赋值之前我们还是要确定要要赋值的目标吧:)这里我们使用DirectoryEntries.Find方法,如:
DirectoryEntry de = rootfolder.Children.Find("目录名","IIsVirtualDir");
找到了,我们就可以赋值了。赋值时一定要好好看看啊,虚拟目录的属性值可以超多,一查一大堆。。
比较常用的有:AccessRead,AccessWrite,AccessExecute,AccessScript,DefaultDoc,EnableDefaultDoc,Path
4.删除虚拟目录
删除虚拟目录的方法也很简单,就是找到你要删除的虚拟目录,然后调用AppDelete方法。
DirectoryEntry de = rootfolder.Children.Find("Aspcn","IIsVirtualDir");
de.Invoke("AppDelete",true);
rootfolder.CommitChanges();
还有一种方法,就是调用Root目录的Delete方法。
object[] paras = new object[2];
paras[0] = "IIsWebVirtualDir"; //表示操作的是虚拟目录
paras[1] = "Aspcn";
rootfolder.Invoke("Delete",paras);
rootfolder.CommitChanges();
asp.net(C#)操作IIS源代码,创建站点,管理虚拟目录等
using System;
using System.DirectoryServices;
using System.Collections;
using System.Text.RegularExpressions;
using System.Text;
namespace QF
{
public class IIS
{
#region UserName,Password,HostName的定义
public static string HostName
{
get
{
return hostName;
}
set
{
hostName = value;
}
}
public static string UserName
{
get
{
return userName;
}
set
{
userName = value;
}
}
public static string Password
{
get
{
return password;
}
set
{
if(UserName.Length <= 1)
{
throw new ArgumentException("还没有指定好用户名。请先指定用户名");
}
password = value;
}
}
public static void RemoteConfig(string hostName, string userName, string password)
{
HostName = hostName;
UserName = userName;
Password = password;
}
private static string hostName = "localhost";
private static string userName = "qf";
private static string password = "qinfei";
#endregion
#region 根据路径构造Entry的方法
/// <summary>
/// 根据是否有用户名来判断是否是远程服务器。
/// 然后再构造出不同的DirectoryEntry出来
/// </summary>
/// <param name="entPath">DirectoryEntry的路径</param>
/// <returns>返回的是DirectoryEntry实例</returns>
public static DirectoryEntry GetDirectoryEntry(string entPath)
{
DirectoryEntry ent;
if(UserName == null)
{
ent = new DirectoryEntry(entPath);
}
else
{
ent = new DirectoryEntry(entPath, HostName+"\\"+UserName, Password, AuthenticationTypes.Secure);
//ent = new DirectoryEntry(entPath, UserName, Password, AuthenticationTypes.Secure);
}
return ent;
}
#endregion
#region 添加,删除网站的方法
public static void CreateNewWebSite(string hostIP, string portNum, string descOfWebSite, string commentOfWebSite, string webPath)
{
if(! EnsureNewSiteEnavaible(hostIP+portNum+descOfWebSite))
{
throw new ArgumentNullException("已经有了这样的网站了。" + Environment.NewLine + hostIP + portNum + descOfWebSite);
}
string entPath = String.Format("IIS://{0}/w3svc", HostName);
DirectoryEntry rootEntry = GetDirectoryEntry(entPath);//取得iis路径
string newSiteNum = GetNewWebSiteID(); //取得新网站ID
DirectoryEntry newSiteEntry = rootEntry.Children.Add(newSiteNum, "IIsWebServer"); //增加站点
newSiteEntry.CommitChanges();//保存对区域的更改(这里对站点的更改)
newSiteEntry.Properties["ServerBindings"].Value = hostIP + portNum + descOfWebSite;
newSiteEntry.Properties["ServerComment"].Value = commentOfWebSite;
newSiteEntry.CommitChanges();
DirectoryEntry vdEntry = newSiteEntry.Children.Add("root", "IIsWebVirtualDir");
vdEntry.CommitChanges();
vdEntry.Properties["Path"].Value = webPath;
vdEntry.CommitChanges();
}
/// <summary>
/// 删除一个网站。根据网站名称删除。
/// </summary>
/// <param name="siteName">网站名称</param>
public static void DeleteWebSiteByName(string siteName)
{
string siteNum = GetWebSiteNum(siteName);
string siteEntPath = String.Format("IIS://{0}/w3svc/{1}", HostName, siteNum);
DirectoryEntry siteEntry = GetDirectoryEntry(siteEntPath);
string rootPath = String.Format("IIS://{0}/w3svc", HostName);
DirectoryEntry rootEntry = GetDirectoryEntry(rootPath);
rootEntry.Children.Remove(siteEntry);
rootEntry.CommitChanges();
}
#endregion
#region Start和Stop网站的方法
public static void StartWebSite(string siteName)
{
string siteNum = GetWebSiteNum(siteName);
string siteEntPath = String.Format("IIS://{0}/w3svc/{1}", HostName, siteNum);
DirectoryEntry siteEntry = GetDirectoryEntry(siteEntPath);
siteEntry.Invoke("Start", new object[] {});
}
public static void StopWebSite(string siteName)
{
string siteNum = GetWebSiteNum(siteName);
string siteEntPath = String.Format("IIS://{0}/w3svc/{1}", HostName, siteNum);
DirectoryEntry siteEntry = GetDirectoryEntry(siteEntPath);
siteEntry.Invoke("Stop", new object[] {});
}
#endregion
#region 确认网站是否相同
/// <summary>
/// 确定一个新的网站与现有的网站没有相同的。
/// 这样防止将非法的数据存放到IIS里面去
/// </summary>
/// <param name="bindStr">网站邦定信息</param>
/// <returns>真为可以创建,假为不可以创建</returns>
public static bool EnsureNewSiteEnavaible(string bindStr)
{
string entPath = String.Format("IIS://{0}/w3svc", HostName);
DirectoryEntry ent = GetDirectoryEntry(entPath);
foreach(DirectoryEntry child in ent.Children)
{
if(child.SchemaClassName == "IIsWebServer")
{
if(child.Properties["ServerBindings"].Value != null)
{
if(child.Properties["ServerBindings"].Value.ToString() == bindStr)
{
return false;
}
}
}
}
return true;
}
#endregion
#region 获取一个网站编号//一个输入参数为站点描述
/// <summary>
/// 输入参数为 站点的描述名 默认是站点描述为 "默认网站"
/// <exception cref="NotFoundWebSiteException">表示没有找到网站</exception>
public static string GetWebSiteNum(string siteName)
{
Regex regex = new Regex(siteName);
string tmpStr;
string entPath = String.Format("IIS://{0}/w3svc", HostName);
DirectoryEntry ent = GetDirectoryEntry(entPath);
foreach(DirectoryEntry child in ent.Children)
{
if(child.SchemaClassName == "IIsWebServer")
{
if(child.Properties["ServerBindings"].Value != null)
{
tmpStr = child.Properties["ServerBindings"].Value.ToString();
if(regex.Match(tmpStr).Success)
{
return child.Name;
}
}
if(child.Properties["ServerComment"].Value != null)
{
tmpStr = child.Properties["ServerComment"].Value.ToString();
if(regex.Match(tmpStr).Success)
{
return child.Name;
}
}
}
}
throw new Exception("没有找到我们想要的站点" + siteName);
}
#endregion
#region 获取新网站id的方法
/// <summary>
/// 获取网站系统里面可以使用的最小的ID。
/// 这是因为每个网站都需要有一个唯一的编号,而且这个编号越小越好。
/// 这里面的算法经过了测试是没有问题的。
/// </summary>
/// <returns>最小的id</returns>
public static string GetNewWebSiteID()
{
ArrayList list = new ArrayList();
string tmpStr;
string entPath = String.Format("IIS://{0}/w3svc", HostName);
DirectoryEntry ent = GetDirectoryEntry(entPath);
foreach(DirectoryEntry child in ent.Children)
{
if(child.SchemaClassName == "IIsWebServer")
{
tmpStr = child.Name.ToString();
list.Add(Convert.ToInt32(tmpStr));
}
}
list.Sort();
int i = 1;
foreach(int j in list)
{
if(i == j)
{
i++;
}
}
return i.ToString();
}
#endregion
}
}
posted @ 2005-11-03 19:26 Chark 阅读(1891) 评论(0)
编辑
关于在WinForm里用HttpWebRequest获得某个页面,并填写页面的textbox及点击button的方法方法如下:
以下代码是向一个指定的页面发送请求,填写三个textbox,click一个button,并得到Server端的执行是否成功的class。注:由于页面的代码也是我写的,所以我知道将要Post页面的结构,即我知道每个页面控件的name和页面结构。
public class FtpMessage
{
private string m_fileName;
private string m_host;
private string aspValue;
public FtpMessage(string fileName,string hostUrl)
{
//指定的一个信息,将用于填写TextBoxFileName。
m_fileName = fileName;
//指定的URL
m_host = hostUrl;
}
public bool SendCompleteMessage(string user,string password)
{
bool isSendMessageSuccess = false;
HttpWebRequest request = (HttpWebRequest)WebRequest.Create("http://"+m_host);
//得到网页。
WebResponse response = null;
response = request.GetResponse();
Stream readStream = response.GetResponseStream();
StreamReader sr = new StreamReader(readStream,Encoding.GetEncoding("utf-8"));
string content = "";
int index = -1;
//寻找数据
while (index < 0 && content != null)
{
content = sr.ReadLine();
//得到标准的ASPX页面的头一共26个字节,以("name=\"__VIEWSTATE\" value=\""开始的
index = content.IndexOf("name=\"__VIEWSTATE\" value=\"",0);
}
index += 26;
int endIndex = content.LastIndexOf("\"");
//形成目标数据。
if (index > 26 && endIndex > index)
{
//得到页面数据段
aspValue = content.Substring(index,endIndex-index);
StringBuilder tempData = new StringBuilder();
tempData.Append("__VIEWSTATE=");
tempData.Append(HttpUtility.UrlEncode(aspValue));
//填写TextBoxFileName的值,其值见后
tempData.Append("&TextBoxFileName=");
tempData.Append("(content1)");
//填写TextBoxUser的值,其值见后
tempData.Append("&TextBoxUser=");
tempData.Append("(content2)");
//填写TextBoxPassword的值,其值见后
tempData.Append("&TextBoxPassword=");
tempData.Append("(content3)");
//填写Button Click 的Message
tempData.Append("&ButtonForData=");
tempData.Append(HttpUtility.UrlEncode("Message"));
aspValue = tempData.ToString();
}
string content1 = m_fileName;
string content2 = user;
string content3 = password;
WebResponse response1 = null;
//替换预传送的数据。
string tempData1 = aspValue.Replace("(content1)",HttpUtility.UrlEncode(content1));
string tempData2 = tempData1.Replace("(content2)",HttpUtility.UrlEncode(content2));
string tempData3 = tempData2.Replace("(content3)",HttpUtility.UrlEncode(content3));
byte [] postData = Encoding.UTF8.GetBytes(tempData3.ToString());
HttpWebRequest request1 = (HttpWebRequest)WebRequest.Create("http://"+m_host);
//设定工作属性。
request1.Method = "POST";
request1.ContentType = "application/x-www-form-urlencoded";
request1.ContentLength = postData.Length;
//上传数据。
Stream writeStream = request1.GetRequestStream();
writeStream.Write(postData,0,postData.Length);
writeStream.Close();
//下载回应消息。
string serverMessage = "";
try
{
response1 = request1.GetResponse();
//这里的response1是Server在Button点击后跳转到的另一个页面,这个页面有一个值表示是否成功
//我将取得其值作为函数的返回值
Stream readStream1 = response1.GetResponseStream();
int i = 1024;
byte[] hehe = new byte[i];
readStream1.Read(hehe,0,i);
readStream1.Close();
StringBuilder hehe1 = new StringBuilder();
//由于我知道页面的结构,我可以从页面得到这个值。
for(int j=658;j<662;j++)
{
hehe1.Append((char)hehe[j]);
}
serverMessage = hehe1.ToString();
}
catch(Exception E)
{
string tempError = E.Message;
}
if(serverMessage == "true")
{
isSendMessageSuccess = true;
}
return isSendMessageSuccess;
}
}
网页部分的代码没有写,就是一个aspx的页面,先拖三个textbox上去,再拖一个button上去(都是web的,不是html的),
三个textbox依次命名为:TextBoxFileName,TextBoxUser,TextBoxPassword,
button命名为:ButtonForData,处理方法就写在这个buttonclick方法里,可以直接取this.TextBoxFileName等控件的值即可以在buttonclick里写
"string ss = this.TextBoxFileName.Text;"
posted @ 2005-11-03 19:24 Chark 阅读(1229) 评论(4)
编辑
文件操作: 检查 创建 读取 写入 修改 删除
目录操作: 检查 创建 读取 写入 修改 删除
文件操作
目录操作
System.IO 类
目录操作
string[] drives = Directory.GetLogicalDrives(); //本地驱动器的名,如:C:\等
string path = Directory.GetCurrentDirectory(); //获取应用程序的当前工作目录
Path.GetFileName(@"c:\dir\file.txt"); //获取子目录的名字,result的结果是file.txt
Directory.GetFiles(路径及文件名) //获取指定目录中的文件名(文件列表)
DirectoryInfo di = new DirectoryInfo(@"f:\MyDir"); //构造函数创建目录
DirectoryInfo di=Directory.CreateDirectory(@"f:\bbs"); //创建对象并创建目录
if (di.Exists == false) //检查是否存在此目录
di.Create(); //创建目录
DirectoryInfo dis = di.CreateSubdirectory("SubDir"); //以相对路径创建子目录
dis.Delete(true); //删除刚创建的子目录
di.Delete(true); //删除创建目录
文件操作
Directory.Delete(@"f:\bbs2", true); //删除目录及其子目录和内容(如为假不能删除有内容的目录包括子目录)
Directory.GetDirectories 方法 //获取指定目录中子目录的名称
string[] dirs = Directory.GetDirectories(@"f:\", "b*");
Console.WriteLine("此目录中以b开头的子目录共{0}个!", dirs.Length);
foreach (string dir in dirs) { Console.WriteLine(dir); }
Directory.GetFileSystemEntries //获取指定目录中的目录及文件名
Directory.GetLogicalDrives //检索此计算机上格式为“<驱动器号>:\”的逻辑驱动器的名称,【语法同上】
Directory.GetParent //用于检索父目录的路径。
DirectoryInfo a = Directory.GetParent(path);
Console.WriteLine(a.FullName);Directory.Move //移动目录及其在内的所有文件
Directory.Move(@"f:\bbs\1", @"f:\bbs\2"); //将文件夹1内的文件剪到文件夹2内 文件夹2是刚创建的
Stream // 对字节的读写操作(包含对异步操作的支持) Reading Writing Seeking
BinaryReader和BinaryWriter // 从字符串或原始数据到各种流之间的读写操作
FileStream类通过Seek()方法进行对文件的随机访问,默认为同步
TextReader和TextWriter //用于gb2312字符的输入和输出
StringReader和StringWriter //在字符串中读写字符
StreamReader和StreamWriter //在流中读写字符
BufferedStream 为诸如网络流的其它流添加缓冲的一种流类型.
MemoryStream 无缓冲的流
NetworkStream 互联网络上的流
//编码转换
Encoding e1 = Encoding.Default; //取得本页默认代码
Byte[] bytes = e1.GetBytes("中国人民解放军"); //转为二进制
string str = Encoding.GetEncoding("UTF-8").GetString(bytes); //转回UTF-8编码
//文本文件操作:创建/读取/拷贝/删除
using System;
using System.IO;
class Test
{
string path = @"f:\t.txt";
public static void Main()
{
//创建并写入(将覆盖已有文件)
if (!File.Exists(path))
{
using (StreamWriter sw = File.CreateText(path))
{
sw.WriteLine("Hello");
}
}
//读取文件
using (StreamReader sr = File.OpenText(path))
{
string s = "";
while ((s = sr.ReadLine()) != null)
{
Console.WriteLine(s);
}
}
//删除/拷贝
try
{
File.Delete(path);
File.Copy(path, @"f:\tt.txt");
}
catch (Exception e)
{
Console.WriteLine("The process failed: {0}", e.ToString());
}
}
}
//流文件操作
private const string name = "Test.data";
public static void Main(String[] args)
{
//打开文件() ,或通过File创建立如:fs = File.Create(path, 1024)
FileStream fs = new FileStream(name, FileMode.CreateNew);
//转换为字节 写入数据(可写入中文)
Byte[] info = new UTF8Encoding(true).GetBytes("This is some text in the file.");
//字节数组,字节偏移量,最多写入的字节数
fs.Write(info, 0, info.Length);
w.Close();
fs.Close();
//打开文件
fs = new FileStream(name, FileMode.Open, FileAccess.Read);
//读取
BinaryReader r = new BinaryReader(fs);
for (int i = 0; i < 11; i++)
{
Console.WriteLine(r.ReadInt32());
}
w.Close();
fs.Close();
}
posted @ 2005-11-03 19:22 Chark 阅读(30970) 评论(6)
编辑
//取得汉字首字母
using System;
using System.Text;
namespace Test
{
public class UpdateAdapter
{
[STAThread]
public static void Main()
{
UpdateAdapter up = new UpdateAdapter();
Console.WriteLine( up.GetChineseSpell("打") );
Console.WriteLine( "在不搞定打S你" );
}
public string GetChineseSpell(string strText)
{
int len = strText.Length;
string myStr = "";
for(int i=0;i<len;i++)
{
myStr += getSpell(strText.Substring(i,1));
}
return myStr;
}
private string getSpell(string cnChar)
{
byte[] arrCN = Encoding.Default.GetBytes(cnChar);
if(arrCN.Length > 1)
{
int area = (short)arrCN[0];
int pos = (short)arrCN[1];
int code = (area<<8) + pos;
int[] areacode = {45217,45253,45761,46318,46826,47010,47297,47614,48119,48119,49062,49324,49896,50371,50614,50622,50906,51387,51446,52218,52698,52698,52698,52980,53689,54481};
for(int i=0;i<26;i++)
{
int max = 55290;
if(i != 25) max = areacode[i+1];
if(areacode[i]<=code && code<max)
{
return Encoding.Default.GetString(new byte[]{(byte)(65+i)});
}
}
return "*";
}
else return cnChar;
}
}
}
posted @ 2005-11-03 19:21 Chark 阅读(600) 评论(0)
编辑
ListView
--------------------------------------------------------------------------------
//给ListView赋值
private void Form1_Load(object sender, System.EventArgs e)
{
//------ 创建 ------
//创建"列"实例
ColumnHeader ch = new ColumnHeader();
ColumnHeader ch1 = new ColumnHeader();
//列名,还可设置其它属性
ch.Text = "名字"; ch1.Text = "名字1";
//把列传给集合
listView1.Columns.Add(ch);
listView1.Columns.Add(ch1);
//------ 赋值 -------
string[] arr={"AA","BB"};
string[] ar1={"CC","DD"};
//创建行实例,用于控件的集合
ListViewItem lvi = new ListViewItem(arr);
ListViewItem lvi1 = new ListViewItem(ar1);
//把集合赋给listView
listView1.Items.Add(lvi);
listView1.Items.Add(lvi1);
}
//获取选中项的值
private void button1_Click(object sender, System.EventArgs e)
{
//构造
ListView.SelectedListViewItemCollection lvcItem = new ListView.SelectedListViewItemCollection(listView1);
//检查有无选中的项
if(lvcItem.Count>0) //第二列
textBox1.Text = lvcItem[0].SubItems[1].Text; //把选中项的第二列文本赋给textBox1
}
posted @ 2005-11-03 19:20 Chark 阅读(549) 评论(1)
编辑
Repeater控件的分页问题
protected System.Web.UI.WebControls.Repeater rptFramework
private void Page_Load(object sender, System.EventArgs e)
{
//建立DataSet
(该部分省略)
rptFramework.DataSource = myDataSet;
rptFramework.DataBind();
Session["page"] = 1;
//将Repeater所有条目隐藏
int i = 0 ;
for( i = 0 ; i < rptFramework.Items.Count ; i++ )
{
rptFramework.Items[i].Visible = false;
}
//Repeater控件的页面大小
int intPageSize = 10;
//rptFramework控件的当前页索引(1起始)
int intCurrentPageIndex = 0 ;
if ( Request.QueryString["page"] == null || Convert.ToInt32( Request.QueryString["page"] ) == 0 )
{
Session["page"] = 1 ;
}
else
{
Session["page"] = Convert.ToInt32( Request.QueryString["page"] );
}
intCurrentPageIndex = Convert.ToInt32( Session["page"] );
//上一页按钮屏蔽
if ( Convert.ToInt32( Session["page"] ) == 1 )
{
btnPre.Enabled = false;
}
//rptFramework控件的当前游标索引(1起始)
int intCurrentItemIndex = 1 ;
intCurrentItemIndex = intPageSize * ( intCurrentPageIndex - 1 ) + 1 ;
//下一页按钮屏蔽
if ( (rptFramework.Items.Count - intCurrentItemIndex) < intPageSize )
{
btnNext.Enabled = false;
}
//设置窗体加载时的默认视图
if ( rptFramework.Items.Count > intPageSize )
{
for (i = intCurrentItemIndex ; i < GetMin( rptFramework.Items.Count , intCurrentItemIndex + intPageSize ) ; i++ )
{
rptFramework.Items[i-1].Visible = true;
}
}
//取两个数值中较小的值,但是不改变原数值大小
private int GetMin( int a , int b )
{
int c ;
if ( a > b )
{
c = b;
}
else
{
c = a;
}
return c;
}
//点击上一页按钮
private void btnPre_Click(object sender, System.EventArgs e)
{
int intPrePageIndex = 2;
if ( Convert.ToInt32( Session["page"] ) != 1 )
{
intPrePageIndex = Convert.ToInt32( Session["page"] ) - 1;
}
else
{
intPrePageIndex = 1;
}
Response.Redirect( "jggk.aspx?page=" + intPrePageIndex.ToString() );
}
//点击下一页按钮
private void btnNext_Click(object sender, System.EventArgs e)
{
int intNextPageIndex = Convert.ToInt32( Session["page"] ) + 1;
Response.Redirect( "jggk.aspx?page=" + intNextPageIndex.ToString() );
}
posted @ 2005-11-03 19:20 Chark 阅读(138) 评论(0)
编辑
posted @ 2005-11-03 19:19 Chark 阅读(240) 评论(0)
编辑
posted @ 2005-11-03 19:17 Chark 阅读(354) 评论(1)
编辑
DataSet数据更新
<%@import namespace="System.Data"%>
<%@import namespace="System.Data.OleDb"%>
<script language="c#" runat="server">
//定义处理更新的方法
//因为是简单示例,所以这个程序已经简化,直接进行更新
//这里有两个参数,第一个用来查找需要更新的行,第二个是要修改的值
private void up_date(int ids,string names){
//连接字符串,不明白的可以看本专题第二篇文章
string connstr=ConfigurationSettings.AppSettings["color"];
OleDbConnection conn=new OleDbConnection(connstr);
string sql="select * from member";
OleDbDataAdapter ada=new OleDbDataAdapter(sql,conn);//建立一个DataAdapter对象
//这里的CommandBuilder对象一定不要忘了,一般就是写在DataAdapter定义的后面
OleDbCommandBuilder cb=new OleDbCommandBuilder(ada);
DataSet ds=new DataSet();//建立DataSet对象
conn.Open();//打开连接
ada.Fill(ds,"mems");//填充DataSet
conn.Close();//注意及时关闭连接
DataTable dt=ds.Tables["mems"];//建立一个DataTable对象,方便操作
dt.PrimaryKey=new DataColumn[]{dt.Columns["id"]};//建立一个主键
DataRow dr=dt.Rows.Find(ids);//根据参数查找到需要修改的行
dr["name"]=names;//对需要修改的记录赋新值
ada.Update(ds,"mems");//用DataAdapter的Update()方法进行数据库的更新
}
//定义用来响应按钮单击事件的方法
private void b1_Click(object sender,System.EventArgs e){
if(Page.IsValid){
int ids=Int32.Parse(idst.Text);//取得要修改的行的id值,并转换成int类型
string names=namest.Text;//取得新值
up_date(ids,names);//调用我们定义的方法处理
lb1.Text="ok!";
}
}
</script>
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=gb2312">
<title>用dataset更新记录</title>
</head>
<body>
<asp:Label id="lb1" runat="server"/>
<form runat="server">
<asp:TextBox id="idst" runat="server"/>
<asp:RequiredFieldValidator id="rfv1" ControlToValidate="idst" ErrorMessage="error!" runat="server"/>
<asp:TextBox id="namest" runat="server"/>
<asp:RequiredFieldValidator id="rfv2" ControlToValidate="namest" ErrorMessage="error!" runat="server"/>
<asp:Button id="b1" Text="here!!" OnClick="b1_Click" runat="server"/>
</form>
</body>
</html>
posted @ 2005-11-03 19:16 Chark 阅读(1016) 评论(1)
编辑
TreeView 节点树控件
--------------------------------------------------------------------------------
//获取驱动号及其一级子目录显示在TreeView控件中
DirectoryInfo dir; int i=0;
foreach(string path in Environment.GetLogicalDrives())
{
treeView1.Nodes.Add(path); //增加根节点
dir = new DirectoryInfo(path);//准备获取子目录而创建的实例
//防止获取光驱或软驱时例外
try
{
foreach(DirectoryInfo d in dir.GetDirectories()) //偏历取得所有子目录
treeView1.Nodes[i].Nodes.Add(d.Name); //把目录名赋给子节点
}
catch{}
i++;
}
//获取当前选中的节点节
if(treeView1.SelectedNode.Text!=null)
textBox1.Text += treeView1.SelectedNode.Text;
posted @ 2005-11-03 19:15 Chark 阅读(155) 评论(0)
编辑
/* 增加关系 */
//后台代码
SqlConnection cnn = new SqlConnection("server=(local);database=pubs;uid=sa;pwd=qinfei;");
SqlDataAdapter cmd1 = new SqlDataAdapter("select * from authors",cnn);
DataSet ds = new DataSet();
cmd1.Fill(ds,"authors");
SqlDataAdapter cmd2 = new SqlDataAdapter("select * from titleauthor",cnn);
cmd2.Fill(ds,"titles");
ds.Relations.Add("myrelation", ds.Tables["authors"].Columns["au_id"], ds.Tables["titles"].Columns["au_id"]);
parent.DataSource = ds.Tables["authors"];
Page.DataBind();
cnn.Close();
//页面代码
<!-- 父控件 -->
<asp:Repeater id="parent" runat="server">
<ItemTemplate>
<b> <%# DataBinder.Eval(Container.DataItem,"au_id") %></b> <br>
<!-- 子控件 --> <!-- 捆绑数据源,在后台已建立了myrelation 的关系 -->
<asp:Repeater id="child" datasource='<%# ((DataRowView)Container.DataItem).Row.GetChildRows("myrelation") %>' runat="server">
<ItemTemplate>
<%# DataBinder.Eval(Container.DataItem, "[\"title_id\"]")%> <br> <!-- 子控件捆绑数据后调用数据时,方法内的Row参数需加 [""] -->
</ItemTemplate>
</asp:Repeater>
<!-- 子控件 -->
</ItemTemplate>
</asp:Repeater>
<!-- 父控件 -->
/* 给子控件捆绑数据源 */
//后台代码
private void Page_Load(object sender, System.EventArgs e)
{
if(!IsPostBack)
BindData();
}
//取得数据
private void BindData()
{
string sqlStmt = "SELECT * FROM Customers; SELECT * FROM Orders";
string conString = "server=localhost;database=Northwind;uid=sa;pwd=;";
SqlDataAdapter sda = new SqlDataAdapter(sqlStmt, conString);
sda.Fill(ds);
ds.Tables[0].TableName = "Customers";
ds.Tables[1].TableName = "Orders";
DataGrid1.DataSource = ds.Tables["Customers"];
DataGrid1.DataBind();
}
//取返回数的方法,前台页面子控件中可直接调用
protected DataView getOrdersDataSource(string _customerID)
{
DataView _orders = ds.Tables["Orders"].DefaultView;
_orders.RowFilter = "CustomerID='" + _customerID + "'";
return _orders;
}
//同上,不带参数
protected DataView getOrdersDataSource1()
{
DataView _orders = ds.Tables["Orders"].DefaultView;
_orders.RowFilter = "CustomerID='BSBEV'";
return _orders;
}
//页面代码
<!-- 父控件 -->
<asp:DataGrid id="DataGrid1" runat="server">
<Columns>
<asp:TemplateColumn ItemStyle-VerticalAlign="Top" HeaderText="Orders" ItemStyle-Width="100%">
<ItemTemplate>
父控件 <%# DataBinder.Eval(Container.DataItem, "CustomerID") %>
<!-- 子控件 -->
<asp:DataGrid runat="server" AutogenerateColumns="False" Width="100%" DataSource='<%# getOrdersDataSource1() %>' ID="Datagrid2" NAME="Datagrid2">
<Columns>
<asp:BoundColumn DataField="OrderID" HeaderText="Order ID" /><asp:TemplateColumn>
<ItemTemplate><%# DataBinder.Eval(Container.DataItem, "OrderDate", "子控件={0}" ) %></ItemTemplate>
</asp:TemplateColumn>
</Columns>
</asp:DataGrid>
<!-- 子控件 -->
</ItemTemplate>
</asp:TemplateColumn>
</Columns>
</asp:DataGrid>
<!-- 父控件 -->
posted @ 2005-11-03 19:14 Chark 阅读(201) 评论(0)
编辑
posted @ 2005-11-03 19:13 Chark 阅读(380) 评论(0)
编辑
用.NET操作ACCESS数据库(创建,压缩,备份,恢复组件)
写一个小型程序,手头没有Microsoft Access,如何建立数据库,一切依然简单.
首先引用C:\Program Files\Common Files\System\ado\msadox.dll,该DLL包含ADOX命名空间;
接着引用C:\Program Files\Common Files\System\ado\msjro.dll,该DLL包含JRO命名空间
注意:如,导入dll不成功,手动把com组件 导入为 .net组件,在用vs.net工具导入
using System;
using System.IO;
using ADOX; //该命名空间包含创建ACCESS的类(方法)--解决方案 ==> 引用 ==> 添加引用 ==> 游览找到.dll
using JRO; //该命名空间包含压缩ACCESS的类(方法)
public class Access
{
///根据指定的文件名称创建ACCESS数据库
///mdbPath:要创件的ACCESS绝对路径
public void Create( string mdbPath )
{
if( File.Exists(mdbPath) ) //检查数据库是否已存在
{
throw new Exception("目标数据库已存在,无法创建");
}
// 可以加上密码,这样创建后的数据库必须输入密码后才能打开
mdbPath = "Provider=Microsoft.Jet.OLEDB.4.0;Data Source=" + mdbPath;
// 创建一个CatalogClass对象的实例,
ADOX.CatalogClass cat = new ADOX.CatalogClass();
// 使用CatalogClass对象的Create方法创建ACCESS数据库
cat.Create(mdbPath);
}
///压缩修复ACCESS数据库,mdbPath为数据库绝对路径
public void Compact( string mdbPath )
{
if( !File.Exists(mdbPath) ) //检查数据库是否已存在
{
throw new Exception("目标数据库不存在,无法压缩");
}
//声明临时数据库的名称
string temp = DateTime.Now.Year.ToString();
temp += DateTime.Now.Month.ToString();
temp += DateTime.Now.Day.ToString();
temp += DateTime.Now.Hour.ToString();
temp += DateTime.Now.Minute.ToString();
temp += DateTime.Now.Second.ToString() + ".bak";
temp = mdbPath.Substring(0, mdbPath.LastIndexOf("\\")+1) + temp;
//定义临时数据库的连接字符串
temp2 = "Provider=Microsoft.Jet.OLEDB.4.0;Data Source=" + temp;
//定义目标数据库的连接字符串
mdbPath2 = "Provider=Microsoft.Jet.OLEDB.4.0;Data Source=" + mdbPath;
//创建一个JetEngineClass对象的实例
JRO.JetEngineClass jt = new JRO.JetEngineClass();
//使用JetEngineClass对象的CompactDatabase方法压缩修复数据库
jt.CompactDatabase( mdbPath2, temp2 );
//拷贝临时数据库到目标数据库(覆盖)
File.Copy( temp, mdbPath, true );
//最后删除临时数据库
File.Delete( temp );
}
/// 备份数据库,mdb1,源数据库绝对路径; mdb2: 目标数据库绝对路径
public void Backup( string mdb1, string mdb2 )
{
if( !File.Exists(mdb1) )
{
throw new Exception("源数据库不存在");
}
try
{
File.Copy( mdb1, mdb2, true );
}
catch( IOException ixp )
{
throw new Exception(ixp.ToString());
}
}
///恢复数据库,mdb1为备份数据库绝对路径,mdb2为当前数据库绝对路径
public void Recover( string mdb1, string mdb2 )
{
if( !File.Exists(mdb1) )
{
throw new Exception("备份数据库不存在");
}
try
{
File.Copy( mdb1, mdb2, true );
}
catch( IOException ixp )
{
throw new Exception(ixp.ToString());
}
}
}
posted @ 2005-11-03 19:06 Chark 阅读(1938) 评论(1)
编辑
编写和使用存储过程
只读 带参数的查询
只读
以下代码示例创建一个只返回表的存储过程。
CREATE Procedure GetAuthors AS
SELECT * FROM Authors
return
GO
protected void Page_Load(Object Src, EventArgs E)
{
SqlDataAdapter da = new SqlDataAdapter("Ten Most Expensive Products", conn);
da.SelectCommand.CommandType = CommandType.StoredProcedure; //设置存储过程
DataSet ds = new DataSet();
da.Fill(ds, "产品");
dg.DataSource=ds.Tables["产品"].DefaultView;
dg.DataBind();
}
将存储过程的参数作为特殊查询传递,如下面的示例所示。
可以创建同样接受参数的存储过程。例如:
CREATE Procedure LoadPersonalizationSettings (@UserId varchar(50)) AS
SELECT * FROM Personalization WHERE UserID=@UserId
return
GO
public void GetEmployees_Click(Object sender, EventArgs E)
{
SqlDataAdapter da = new SqlDataAdapter("SalesByCategory", conn);
da.SelectCommand.CommandType = CommandType.StoredProcedure; //设置存储过程
da.SelectCommand.Parameters.Add(new SqlParameter("@CategoryName", SqlDbType.NVarChar, 15));
da.SelectCommand.Parameters["@CategoryName"].Value = SelectCategory.Value;
da.SelectCommand.Parameters.Add(new SqlParameter("@OrdYear", SqlDbType.NVarChar, 4));
da.SelectCommand.Parameters["@OrdYear"].Value = SelectYear.Value;
DataSet ds = new DataSet();
da.Fill(ds, "销售额");
MyDataGrid.DataSource=ds.Tables["销售额"].DefaultView; MyDataGrid.DataBind();
}
posted @ 2005-11-03 19:06 Chark 阅读(915) 评论(0)
编辑
微软提供了以下四种数据库连接方式:常用的一些连接字符串(C#代码):
System.Data.SqlClient.SqlConnection - SQL
System.Data.OleDb.OleDbConnection - OLEDB
System.Data.Odbc.OdbcConnection - ODBC
System.Data.OracleClient.OracleConnection - ORACLE
System.Data.SqlClient.SqlConnection //-----sql
Server=(local);DataBase=test;uid=sa;pwd=123
Server=localhost;Integrated Security=SSPI;DataBase=Pubs
Server=(local)\\NetSDK;database=pubs;Integrated Security=SSPI
Data Source=(local);Integrated Security=SSPI;Initial Catalog=pubs
Data Source=(local);initial catalog=pubs;integrated security=SSPI;persist security info=False;workstation id=XURUI;packet size=4096
Server=(local);Persist Security Info=False;Integrated Security=SSPI;DataBase=pubs
Data Source=127.0.0.1;uid=sa;pwd=sa;initial catalog=pubs;Connect Timeout=900
System.Data.OleDb.OleDbConnection //-----OLEDB
Provider=Microsoft.Jet.OLEDB.4.0;Data Source=d:\\test.mdb;
Provider=Microsoft.Jet.OLEDB.4.0;Data Source="+Server.MapPath(ConfigurationSettings.AppSettings["数据库路径"]))
Provider=Microsoft.Jet.OLEDB.4.0;Password=;User ID=Admin;Data Source=grocertogo.mdb
Provider=MSDAORA; Data Source=ORACLE8i7;Persist Security Info=False;Integrated Security=yes
Provider=SQLOLEDB;Data Source=MySQLServer;Integrated Security=SSPI
System.Data.Odbc.OdbcConnection //------ODBC
Driver={SQL Server};Server=MyServer;Trusted_Connection=yes;Database=Northwind
Driver={Microsoft ODBC for Oracle};Server=ORACLE8i7;Persist Security Info=False;Trusted_Connection=yes
Driver={Microsoft Access Driver (*.mdb)};DBQ=c:\bin\nwind.mdb
Driver={Microsoft Excel Driver (*.xls)};DBQ=c:\bin\book1.xls
Driver={Microsoft Text Driver (*.txt; *.csv)};DBQ=c:\bin
DSN=dsnname
System.Data.OracleClient.OracleConnection //------Oracle
OracleConnection myConn = new System.Data.OracleClient.OracleConnection("Data Source=Oracle8i;Integrated Security=yes");
其他厂商提供的数据库连接:
DB2Connection myConn = new IBM.Data.DB2.DB2Connection("DATABASE = SAMPLE;UID=<username>; PWD=<password>;");
DB2Connection myConn = new IBM.Data.DB2.DB2Connection("DATABASE = SAMPLE");
BdpConnection myConn = new Borland.Data.Provider.BdpConnection("assembly=Borland.Data.Mssql,Version=1.1.0.0,Culture=neutral,PublicKeyToken=91d62ebb5b0d1b1b;vendorclient=sqloledb.dll;osauthentication=False;database=<database>;username=<user>;hostname=<host>;password=<password>;provider=MSSQL");
BdpConnection myConn = new Borland.Data.Provider.BdpConnection("assembly=Borland.Data.Db2,Version=1.1.0.0,Culture=neutral,PublicKeyToken=91d62ebb5b0d1b1b;vendorclient=db2cli.dll;database=<database>;username=<user>;password=<password>;provider=DB2");
Connection Pooling
在SQL Server、OLE DB和.NET框架结构中的Data Provider中,都提供了隐式的连接池连接支持。你可以在ConnectionString中指定不同的参数值控制连接池的行为。比如下面的例子使OLE DB的连接池无效并自动地进行事务处理:
Provider=SQLOLEDB;OLE DB Services=-4;Data Source=localhost;Integrated Security=SSPI;
在SQL Server.NET Data Provider中提供了以下参数设置控制连接池的行为:Connection Lifttime、Connection Reset、Enlist、Max Pool Size、Min Pool Size和Pooling。
posted @ 2005-11-03 19:05 Chark 阅读(326) 评论(0)
编辑
asp.net中读取数据库的两种方式
读取数据库数据可使用DataReader 或 DataSet ,两者的差异如下:
使用DataSet对象读取数据大致需要以下5个步骤:
(1)可以SQLConnection建立数据库链接 (OleDbConnection)
(2)将查询保存在SQLDataAdapter对象中 (OleDbDataAdapter)
(3)用DataAdapter.Fill填充DataSet
(4)为DataTable对象建立DataView对象以显示数据,可略
(5)将DataView或者DataSet绑定到Server Control上
使用DataReader读取数据大致需要以下6个步骤:
(1)可以SQLConnection建立数据库链接 (OleDbConnection)
(2)open打开数据库链接
(3)将查询保存在SQLCommand对象中 (OledbCommand)
(4)调用Command对象的ExecuteReader方法,将数据读入DataReader对象中。
(5)调用DataReader的Read或者Get方法读取—笔数据,以便显示。
(6)调用Connection对象的Close方法,关闭数据序链接。
OleDbDataReader
Read //移动到下一行,以此为开使读取数据
GetString(1) //读取指定字段的值.以1为顺序开头
DataSet //读取DataSet中的数据
ds.Tables(1).Rows(5)(1) //DataSet中的第2个表的第5行的第1列
foreach(DataTable T in ds.Tables) //取DataSet中的所有表
{
foreach(DataRow R in T.Rows) //取DataTable中的所有行
{
foreach (DataColumn C in T.Columns) //取DataTable中的所有列
{
Console.WriteLine(R[C]);
}
}
}
获取数据记录的合计数:
conn.Open();
OleDbCommand cmd = new OleDbCommand("select count(*) as rs from Table1",conn);
OleDbDataReader dr = cmd.ExecuteReader();
if (dr.Read()) count=dr["rs"].ToString();
conn.Open();
OleDbCommand cm = new OleDbCommand("Select count(*) from Table1",conn);
int d = (int)cm.ExecuteScalar();
count = d.ToString();
conn.Close();
posted @ 2005-11-03 19:05 Chark 阅读(390) 评论(0)
编辑
SqlDataAdapter的几种常用方法。主要代码例如下所示:
SelectCommand、InsertCommand、DeleteCommand、UpdateCommand 和 其它 属性,使数据的加载和更新更加方便。 DataSet 增加/更新/插入到数据库
public static SqlDataAdapter CreateCustomerAdapter(SqlConnection conn)
{
SqlDataAdapter da = new SqlDataAdapter();
SqlCommand cmd;
SqlParameter parm;
// 创建选择命令.
cmd = new SqlCommand("SELECT * FROM Customers WHERE Country = @Country AND City = @City", conn);
cmd.Parameters.Add("@Country", SqlDbType.NVarChar, 15);
cmd.Parameters.Add("@City", SqlDbType.NVarChar, 15);
cmd.SelectCommand.Parameters["@Country"].Value = Country;
cmd.SelectCommand.Parameters["@City"].Value = City;
da.SelectCommand = cmd;
// 创建插入命令.
cmd = new SqlCommand("INSERT INTO Customers (CustomerID, CompanyName) VALUES (@CustomerID, @CompanyName)", conn);
cmd.Parameters.Add("@CustomerID", SqlDbType.NChar, 5, "CustomerID");
cmd.Parameters.Add("@CompanyName", SqlDbType.NVarChar, 40, "CompanyName");
cmd.SelectCommand.Parameters["@CustomerID"].Value = CustomerID;
cmd.SelectCommand.Parameters["@CompanyName"].Value = CompanyName;
da.InsertCommand = cmd;
// 创建删除命令.
cmd = new SqlCommand("DELETE FROM Customers WHERE CustomerID = @CustomerID", conn);
parm = cmd.Parameters.Add("@CustomerID", SqlDbType.NChar, 5, "CustomerID");
parm.SourceVersion = DataRowVersion.Original;
cmd.SelectCommand.Parameters["@CustomerID"].Value = CustomerID;
da.DeleteCommand = cmd;
// 创建更新命令.
cmd = new SqlCommand("UPDATE Customers SET CustomerID = @CustomerID, CompanyName = @CompanyName WHERE CustomerID = @oldCustomerID", conn);
cmd.Parameters.Add("@CustomerID", SqlDbType.NChar, 5, "CustomerID");
cmd.Parameters.Add("@CompanyName", SqlDbType.NVarChar, 40, "CompanyName");
cmd.SelectCommand.Parameters["@CustomerID"].Value = CustomerID;
cmd.SelectCommand.Parameters["@CompanyName"].Value = CompanyName;
parm = cmd.Parameters.Add("@oldCustomerID", SqlDbType.NChar, 5, "CustomerID");
parm.SourceVersion = DataRowVersion.Original;
da.UpdateCommand = cmd;
return da;
}
// 其它.
private void update()
{
SqlConnection conn = new SqlConnection(str);
SqlDataAdapter da = new SqlDataAdapter("SELECT order_id, contract FROM linhai", conn);
DataSet ds = new DataSet();
da.Fill(ds, "linhai");
da.UpdateCommand = new SqlCommand("UPDATE linhai SET contract = @contract WHERE order_id = @order_id" , conn);
da.UpdateCommand.Parameters.Add("@contract", SqlDbType.NVarChar, 15, "contract");
da.UpdateCommand.Parameters.Add("@order_id", SqlDbType.NVarChar, 15, "order_id");
ds.Tables["linhai"].Rows[0]["contract"] = "PPP";
da.Update(ds.Tables[0]);
}
public DataSet CreateCmdsAndUpdate(DataSet myDataSet,string connstr,string sql,string myTableName)
{
OleDbConnection conn = new OleDbConnection(connstr);
OleDbDataAdapter da = new OleDbDataAdapter();
da.SelectCommand = new OleDbCommand(sql, conn);
// 自动生成用于协调 DataSet 的更改与关联数据库的单表命令
OleDbCommandBuilder ds = new OleDbCommandBuilder(da);
conn.Open();
DataSet ds = new DataSet();
da.Fill(ds);
da.Update(ds);
conn.Close();
return ds;
}
//DataSet 更新数据库
public void Update()
{
string str = "Provider=Microsoft.Jet.OLEDB.4.0;Data Source="+@"f:\a.mdb";
OleDbConnection conn = new OleDbConnection(str);
OleDbDataAdapter da=new OleDbDataAdapter("SELECT * FROM 工资模板",conn);
OleDbCommandBuilder cb=new OleDbCommandBuilder(da);
DataSet ds=new DataSet();
da.Fill(ds);
//DataTable dt=ds.Tables[0];
//dt.PrimaryKey=new DataColumn[]{dt.Columns["编号"]};//设置主键
//DataRow dr=dt.Rows.Find("1");//根据参数查找到需要修改的行
//dr["类型"]="说明项A";//对需要修改的记录赋新值
da.Update(Add(ds).Tables[0]);//用DataAdapter的Update()方法进行数据库的更新
}
public DataSet Add(DataSet ds)
{
//增加
DataRow dr = ds.Tables[0].NewRow();
dr["编号"] = "50";
dr["名称"] = "mmnnvbc";
dr["标识"] = "sdasdasd";
dr["类型"] = "工要";
dr["长度"] = "20";
dr["小数位数"] = "0";
dr["是否唯一"] = "true";
dr["银行项目"] = "false";
ds.Tables[0].Rows.Add(dr);
/*
//记录删除
ds.Tables[0].Rows[2].Delete();
//更新
DataRow dr = ds.Tables[0].Rows[1];
dr.BeginEdit();
dr["CustomerID"] = "********";
dr.EndEdit();
*/
return ds;
}
posted @ 2005-11-03 19:04 Chark 阅读(297) 评论(0)
编辑
ComboBox控件值对类
--------------------------------------------------------------------------------
#region ComboBox
#region Item
/// <summary>
/// ComboBox控件手动赋值,调用示范
/// ArrayList ArrL = new ArrayList();
/// ArrL.Add(new Item("A", "a"));
/// ComboBox.DataSource = ArrL;
/// ComboBox.DisplayMember= "Text";
/// ComboBox.ValueMember = "Value";
/// </summary>
public class Item
{
private string _Text;
private string _Value;
public Item(string sText, string sValue)
{
this._Text = sText;
this._Value = sValue;
}
public string Text
{
get
{
return _Text;
}
}
public string Value
{
get
{
return _Value ;
}
}
public override string ToString()
{
return this.Text + " - " + this.Value;
}
}
#endregion
#region ComboBoxValues
/// <summary>
/// 输入值对字符串,返回ComboBox实例
/// 调用示范:
/// ComboBoxValues cbv = new ComboBoxValues(txtSelect);
/// txtSelect = cbv.Add(ini.Read("Main","SelectText"),ini.Read("Main","SelectValue"),'*');
/// </summary>
public class ComboBoxValues
{
/// <summary>
/// 构造ComboBox控件实例以便返回该类型
/// </summary>
/// <param name="cb">ComboBox实例</param>
public ComboBoxValues(System.Windows.Forms.ComboBox cb)
{
_ComboBox = cb;
}
private System.Windows.Forms.ComboBox _ComboBox;
private string err;
/// <summary>
/// 错误提示,返回 null 为正常
/// </summary>
public string Err
{
get
{
return err;
}
}
/// <summary>
/// 增加ComboBox新项,返回ComboBox实例
/// </summary>
/// <param name="sText">以分割符分开的显示文本</param>
/// <param name="sValue">以分割符分开的值文本</param>
/// <param name="key">分割符,如: *</param>
/// <returns></returns>
public System.Windows.Forms.ComboBox Add(string sText, string sValue, char key)
{
err = null;
string[] arrText = sText.Split(key);
string[] arrValue = sValue.Split(key);
if(arrText.Length==arrValue.Length)
{
System.Collections.ArrayList arrl = new System.Collections.ArrayList();
for(int i=0;i<arrText.Length;i++)
{
arrl.Add(new Item(arrText[i], arrValue[i]));
}
_ComboBox.DataSource = arrl;
_ComboBox.DisplayMember= "Text";
_ComboBox.ValueMember = "Value";
}
else
{
err="Text与Value值对不等";
}
return _ComboBox;
}
}
#endregion
#endregion
posted @ 2005-11-03 19:03 Chark 阅读(719) 评论(0)
编辑
STMP邮件发送 生成随机数 Serv-U6.0.0.2加减解算法 图片缩放 Base64之编码,解码方法
//Response.Write(SendMail("主题","admin@admin.com", "qinfeigo@163.com" ,"正文了!")); //调用
public string SendMail(string subject, string form, string to, string body)
{
//主题 发 收 内容
string Tform, Tto, MailErr;
//比较域名是否相同 -- 收发人域名相同是呼发送不能成功!
Tform = Regex.Replace(form,".*@","");
Tto = Regex.Replace(to ,".*@","");
if (Tform.ToLower() != Tto.ToLower())
{
MailErr = "发送成功!";
try {
try {
MailMessage myMail = new MailMessage();
myMail.BodyFormat = MailFormat.Html;
myMail.Subject = subject; //主题
myMail.From = form; //发件人的 Email
myMail.To = to; //收件人 Email
//MyMessage.Cc = body; //抄送副本
myMail.Body = body; //正文内容
try {
//SmtpMail.SmtpServer= "localhost"; //设置Eamil发送服务器,不设置默认为本机
SmtpMail.Send(myMail); //发送
}
catch(System.Web.HttpException ehttp)
{
MailErr = "<a style='color:#FF0000;font-size:12px;'>"+ehttp.Message+"下面是完整的错误信息:";
MailErr += "</A><br><hr><br><a style='font-size:12px;'>"+ehttp.ToString()+"</A>";
}
}
catch(IndexOutOfRangeException) {
MailErr = "<a style='color:#FF0000;font-size:12px;'>错误:Email地址不正确!</a>";
}
}
catch(System.Exception e) {
MailErr = "<a style='color:#FF0000;font-size:12px;'>"+e.Message+"下面是完整的错误信息:";
MailErr += "</A><br><hr><br><a style='font-size:12px;'>"+e.ToString()+"</A>";
}
}
else
MailErr = "收发件人的域名不能相同,换个非'"+Tform+"'的试试!";
return MailErr;
}
//生成随机数
public string MakePassword()
{
int pwdlen = 2; //生成随机字符的位数
string pwdchars = "abcdefghijklmnopkrstuvwxyzZBCDEFGHIJKLMNOPKRSTUVWXYZ"; //生成的字符包含那字
string tmpstr = "";
int iRandNum;
Random rnd = new Random();
for(int i=0;i<pwdlen;i++)
{
iRandNum = rnd.Next(pwdchars.Length);
tmpstr += pwdchars[iRandNum];
}
return tmpstr;
}
//Serv-U6.0.0.2加减解算法
<%@ Import Namespace="System.Data" %>
<%@ Import Namespace="System.Data.SqlClient" %>
<%@ Import Namespace="System.Web.Security" %>
<script language="C#" runat="server">
public void yanzheng(object sender, System.EventArgs e)
{
string A = open(UserName.Text, UserPassword.Text);
string B;
if (A == "1") Response.Write("无此账号"+UserName.Text);
else
{
B = JiaMi(A, UserPassword.Text);
if (A == B) Response.Write("OK!密码是:<br>"+B);
else Response.Write("不正确:"+B+"<br>正确密码是:"+A);
}
}
public void New(object sender, System.EventArgs e)
{
SqlConnection conn = new SqlConnection("Server=(local);Integrated Security=SSPI;database=Serv-U");
SqlCommand cmd = new SqlCommand("UPDATE [useraccounts] SET password=@password where name = @name", conn);
cmd.Parameters.Add(new SqlParameter("@name", SqlDbType.NVarChar, 40));
cmd.Parameters.Add(new SqlParameter("@password", SqlDbType.NVarChar, 40));
cmd.Parameters["@name"].Value = UserName.Text;
cmd.Parameters["@password"].Value = NewMiMa(NewUserPassword.Text);
cmd.Connection.Open();
cmd.ExecuteNonQuery();
Response.Write("修改成功");
cmd.Connection.Close();
}
public string open(string UserName, string UserPassword) //检查有无此账号,有返回1并赋给password原密码的值
{
SqlConnection conn = new SqlConnection("Server=(local);Integrated Security=SSPI;database=Serv-U");
SqlCommand cmd = new SqlCommand("select top 1 [name],[password] from [useraccounts] where name = '"+ UserName +"'", conn);
conn.Open();
SqlDataReader dr = cmd.ExecuteReader();
if (dr.Read())
{
UserPassword = dr["password"].ToString();
conn.Close();
return UserPassword;
}
else
{
conn.Close();
return "1";
}
}
public string JiaMi(string UserPassword, string Password) //取原密码前两位来加密对对
{
string Password2 = UserPassword.Substring(0,2);
Password = Password2 + Password; //取密码的左边两位
Password = FormsAuthentication.HashPasswordForStoringInConfigFile(Password,"MD5");
return Password2 + Password;
}
public string NewMiMa(string Password) //新密码加密
{
string a = MakePassword();
string p = a + Password;
Password = FormsAuthentication.HashPasswordForStoringInConfigFile(p,"MD5");
return a + Password;
}
public string MakePassword()
{
int pwdlen = 2; //生成随机字符的位数
string pwdchars = "abcdefghijklmnopkrstuvwxyzZBCDEFGHIJKLMNOPKRSTUVWXYZ"; //生成的字符包含那字
string tmpstr = "";
int iRandNum;
Random rnd = new Random();
for(int i=0;i<pwdlen;i++)
{
iRandNum = rnd.Next(pwdchars.Length);
tmpstr += pwdchars[iRandNum];
}
return tmpstr;
}
</script>
<Form runat="server">
账号:<asp:TextBox ID="UserName" runat="server" /><br>
密码:<asp:TextBox ID="UserPassword" runat="server" />
<asp:Button ID="TiJiao" Text="提交" runat="server" OnClick="yanzheng" />
<br><br>
新密码:<asp:TextBox ID="NewUserPassword" runat="server" />
<asp:Button ID="s" Text="提交" runat="server" OnClick="New" />
</Form>
// 图片缩放处理
private void img()
{
System.Drawing.Image oldimg = System.Drawing.Image.FromFile(@"f:\a.jpg");
System.Drawing.Image newimg = oldimg.GetThumbnailImage( 60, 60 * oldimg.Height/oldimg.Width, null, new IntPtr(0));
newimg.Save(@"f:\new.jpg",System.Drawing.Imaging.ImageFormat.Jpeg);
oldimg.Dispose();
newimg.Dispose();
}
// Base64 编码
编码
public string EncodeBase64(string code_type,string code)
{
string encode = "";
byte[] bytes = Encoding.GetEncoding(code_type).GetBytes(code);
try
{
encode = Convert.ToBase64String(bytes);
}
catch
{
encode = code;
}
return encode;
}
解码
public string DecodeBase64(string code_type,string code)
{
string decode = "";
byte[] bytes = Convert.FromBase64String(code);
try
{
decode = Encoding.GetEncoding(code_type).GetString(bytes);
}
catch
{
decode = code;
}
return
posted @ 2005-11-03 19:02 Chark 阅读(116) 评论(0)
编辑
基类转换 进制转换 字符操作 常用函数方法 XML操作 常用函数 Request.ServerVariables 环境变量集合
//基类转换
System.Convert() 类
将一个基本数据类型转换为另一个基本数据类型。
Boolean、Char、SByte、Byte、Int16、Int32、
Int64、UInt16、UInt32、UInt64、Single、
Double、Decimal、DateTime 和 String
示范:
Convert.ToInt32(n)
类型.Parse()
异常类型 条件
ArgumentNullException s 为空引用(Visual Basic 中为 Nothing)。
FormatException s 的格式不正确。
OverflowException s 表示小于 MinValue 或大于 MaxValue 的数字。
将一个string类型转换为另一个数据类型
Byte、DateTime、Decimal、Double、Enum、
FontUnit、Int16、Int32、Int64、SByte、
Single、UInt16、UInt32、UInt64、Unit、
示范:
Int32.Parse(n)
string.ToString()
12345.ToString("n"); //生成 12,345.00
12345.ToString("C"); //生成 ¥12,345.00
12345.ToString("e"); //生成 1.234500e+004
12345.ToString("f4"); //生成 12345.0000
12345.ToString("x"); //生成 3039 (16进制)
12345.ToString("p"); //生成 1,234,500.00%
//进制转换
前一阶段,遇到了一个将int型数字转换成2进制显示的问题。如:8 -> 1000要求输入8就出现结果1000;输入13就出现1101。
以前没有遇到过此类问题,初一接触,第一反应就是C#必有解决此问题的方法可以直接调用。
本以为在Convert.的方法里可以直接ToBinary或是类似的处理,但经查找无此方法,于是想也许有其他方法重载了或派生了解决此问题的方法。
经查找,果然在ToString()的系列方法中有解决此问题的重载。
具体应用如:int a=13; Convert.ToString(a,2); 其中的2指转换成的基本类型是2进制类型。这样转换后就得到了1101的字符串。
同理还可以进行其他的多种进制转化。
///int.Parse \ Convert.ToString \ BitConverter.ToString
//十六进制(string)转化为十进制(int)
int i = 0xA1 ;//ASCII码A1转化为对应值 可以:string thevalue = (char) 0xA1 ;
//十进制(int)转化为十六进制(string)
int a = 188;
TextBox1.Text=a.ToString("X4") ;
//十六进制(string)转化为十进制(int)
int b = int.Parse("AB", System.Globalization.NumberStyles.HexNumber);
//十进制(int)转化为十六进制(string)
j = 10;
string strBase16 = Convert.ToString(j,16);
//十六进制(string)转化为十进制(int)
string strBase16 = "A";
int j = Convert.ToInt32(strBase16,16);
//二进制(string)转化为十进制(int)
string bin = "1110" ;
int dec= Convert.ToInt16( bin , 2 ) ;
dec.ToString ( ) ;
//十进制(int)转化为二进制(string)
int j = 10;
string strBase2 = Convert.ToString(j,2);
DataAccess.common.setMessage( strBase2 ) ;
//十进制(int)转化为二进制(string)
int dec= 14 ;
sting bin = ConvertToBin ( dec ) ;// dec/2 = "1110"
//BitConverter转化
bytes = System.Text.Encoding.Default.GetBytes( "12Paladin2" ) ;
MessageBox.Show ( BitConverter.ToString( bytes ) ) ; // 31-32-50-61-6C-61-64-69-6E-32
//字节(byte)转化为十六进制(string)
Convert.ToString ( bytes[0+1] , 16 ) ;
//&Hff转化为如255的存放在byte中
byte.Parse ( Convert.ToInt32( '\xff' )).ToString( ) ) ;
//byte中bit操作
int[] hello = new int[1];
hello[0] = 1;
System.Collections.BitArray kao = new BitArray(hello);
bool **** = kao[0];
//字符操作
1 、大小写转换
//CultureInfo.CurrentCulture。对于不区分区域性的大小写更改 如:String.ToUpper(CultuerInfo.CurrentCulture);
String.ToUpper() //字符串转大写
String.ToLower() //字符串转小写
Char.ToUpper()
Caar.ToLower();
2、变量.Length //取得变量的长度
2、字符串拆分
Regex r = new Regex("(-)"); // Split on hyphens.
string[] s = r.Split("one-two-banana");
3、Server.HtmlEncode(string) //html编码转换,输出的字符按原样输出,不执行包含的html码
4 、变量.Substring(参数1,参数2);
截取字串的一部分,参数1为左起始位数,参数2为截取几位 如:
string s1 = str.Substring(0,2);
5 、char.IsWhiteSpce(字串变量,位数) //字符串中找空格 逻辑型
Response.Write(char.IsWhiteSpace("中国 人民",2)); //结果为:True, 以0开始,所以2表示第三个字符。
6、char.IsPunctuation('字符') //字符串中找标点符号 逻辑型
Response.Write(char.IsPunctuation('A')); //返回:False
7、(int)'字符' //把字符转为数字,查代码点,注意是单引号。
Response.Write((int)'中'); //结果为中字的代码:20013
8、(char)代码 //把数字转为字符,查代码代表的字符
Response.Write((char)22269); //返回“国”字。
9、 Trim() //清除字串前后空格
10 、字串变量.Replace("子字串","替换为")
字串替换
如:
string str="中国";
str=str.Replace(查找内容,替换为);
11、Math.Max(i,j) //取最大值
如: int x = Math.Max(5,10); //x将取值10
12、System.Text.Encoding.Default.GetBytes(变量) //把字符符转为二进制
byte[] bytStr = System.Text.Encoding.Default.GetBytes(str); //字码转换 转为比特码
len = bytStr.Length; //然后可得到比特长度:
13、System.Text.StringBuilder("") // 字符串相加,(比 + 更快 )
System.Text.StringBuilder sb = new System.Text.StringBuilder("");
sb.Append("中华");
sb.Append("人民");
sb.Append("共和国");
//常用函数方法
1、DateTime 数字型
System.DateTime currentTime=new System.DateTime();
1.1 取当前年月日时分秒
currentTime=System.DateTime.Now;
1.2 取当前年
int 年=currentTime.Year;
1.3 取当前月
int 月=currentTime.Month;
1.4 取当前日
int 日=currentTime.Day;
1.5 取当前时
int 时=currentTime.Hour;
1.6 取当前分
int 分=currentTime.Minute;
1.7 取当前秒
int 秒=currentTime.Second;
1.8 取当前毫秒
int 毫秒=currentTime.Millisecond;
(变量可用中文)
DateTime dat=DateTime.Now;//当前系统时间
int n=20;
DateTime dat1 = dat.AddDays(n);//添加n天
Console.WriteLine(dat1);
2、Response.Redirect("URL地址"); //跳转到URL指定的页面
3、String user_IP=Request.ServerVariables["REMOTE_ADDR"].ToString(); //取远程用户IP地址
4、//穿过代理服务器取远程用户真实IP地址:
if(Request.ServerVariables["HTTP_VIA"]!=null){
string user_IP=Request.ServerVariables["HTTP_X_FORWARDED_FOR"].ToString();
}
else{
string user_IP=Request.ServerVariables["REMOTE_ADDR"].ToString();
}
5、 Session["变量"];
存取Session值;
如,赋值: Session["username"]="小布什";
取值: Object objName=Session["username"];
String strName=objName.ToString();
清空: Session.RemoveAll();
//XML常用操作
1、DOC对象.CreateElement("新建节点名"); //创建XML文档新节点
2、父节点.AppendChild(子节点); //将新建的子节点加到XML文档父节点下
3、 父节点.RemoveChild(节点); //删除节点
常用函数:
Abs(number) 取得数值的绝对值。
Asc(String) 取得字符串表达式的第一个字符ASCII 码。
Atn(number) 取得一个角度的反正切值。
CallByName (object, procname, usecalltype,[args()]) 执行一个对象的方法、设定或传回对象的属性。
CBool(expression) 转换表达式为Boolean 型态。
CByte(expression) 转换表达式为Byte 型态。
CChar(expression) 转换表达式为字符型态。
CDate(expression) 转换表达式为Date 型态。
CDbl(expression) 转换表达式为Double 型态。
CDec(expression) 转换表达式为Decimal 型态。
CInt(expression) 转换表达式为Integer 型态。
CLng(expression) 转换表达式为Long 型态。
CObj(expression) 转换表达式为Object 型态。
CShort(expression) 转换表达式为Short 型态。
CSng(expression) 转换表达式为Single 型态。
CStr(expression) 转换表达式为String 型态。
Choose (index, choice-1[, choice-2, ... [, choice-n]]) 以索引值来选择并传回所设定的参数。
Chr(charcode) 以ASCII 码来取得字符内容。
Close(filenumberlist) 结束使用Open 开启的档案。
Cos(number) 取得一个角度的余弦值。
Ctype(expression, typename) 转换表达式的型态。
DateAdd(dateinterval, number, datetime) 对日期或时间作加减。
DateDiff(dateinterval, date1, date2) 计算两个日期或时间间的差值。
DatePart (dateinterval, date) 依接收的日期或时间参数传回年、月、日或时间。
DateSerial(year, month, day) 将接收的参数合并为一个只有日期的Date 型态的数据。
DateValue(datetime) 取得符合国别设定样式的日期值,并包含时间。
Day(datetime) 依接收的日期参数传回日。
Eof(filenumber) 当抵达一个被开启的档案结尾时会传回True。
Exp(number) 依接收的参数传回e 的次方值。
FileDateTime(pathname) 传回档案建立时的日期、时间。
FileLen(pathname) 传回档案的长度,单位是Byte。
Filter(sourcearray, match[, include[, compare]]) 搜寻字符串数组中的指定字符串,凡是数组元素中含有指定字符串,会将它们结合成新的字符串数组并传回。若是要传回不含指定字符串的数组元素,则include 参数设为False。compare 参数则是设定搜寻时是否区分大小写,此时只要给TextCompare 常数或1 即可。
Fix(number) 去掉参数的小数部分并传回。
Format(expression[, style[, firstdayofweek[, firstweekofyear]]]) 将日期、时间和数值资料转为每个国家都可以接受的格式。
FormatCurrency(expression[,numdigitsafterdecimal [,includeleadingdigit]]) 将数值输出为金额型态。
numdigitsafterdecimal 参数为小数字数,includeleadingdigit 参数为当整数为0 时是否补至整数字数。
FormatDateTime(date[,namedformat]) 传回格式化的日期或时间数据。
FormatNumber(expression[,numdigitsafterdecimal [,includeleadingdigit]]) 传回格式化
的数值数据。Numdigitsafterdecimal 参数为小数字数,includeleadingdigit 参数为当整数为0 时是否补至整数字数。
FormatPercent(expression[,numdigitsafterdecimal [,includeleadingdigit]]) 传回转换为百分比格式的数值数据。numdigitsafterdecimal 参数为小数字数,includeleadingdigit 参数为当整数为0 时是否补至整数字数。
GetAttr(filename) 传回档案或目录的属性值。
Hex(number) 将数值参数转换为16 进制值。
Hour(time) 传回时间的小时字段,型态是Integer。
Iif(expression, truepart, falsepart) 当表达式的传回值为True 时执行truepart 字段的程序,反之则执行falsepart 字段。
InStr([start, ]string1, string2) 搜寻string2 参数设定的字符出现在字符串的第几个字符,start 为由第几个字符开始寻找,string1 为欲搜寻的字符串,string2 为欲搜寻的字符。
Int(number) 传回小于或等于接收参数的最大整数值。
IsArray(varname) 判断一个变量是否为数组型态,若为数组则传回True,反之则为False。
IsDate(expression) 判断表达式内容是否为DateTime 型态,若是则传回True,反之则为False。
IsDbNull(expression) 判断表达式内容是否为Null,若是则传回True,反之则为False。
IsNumeric(expression) 判断表达式内容是否为数值型态,若是则传回True,反之则为False。
Join(sourcearray[, delimiter]) 将字符串数组合并唯一个字符串,delimiter 参数是设定在各个元素间加入新的字符串。
Lcase(string) 将字符串转换为小写字体。
Left(string, length) 由字符串左边开始取得length 参数设定长度的字符。
Len(string) 取得字符串的长度。
Log(number) 取得数值的自然对数。
Ltrim(string) 去掉字符串的左边空白部分。
Mid(string, start[, length]) 取出字符串中strat 参数设定的字符后length 长度的字符串,若length 参数没有设定,则取回start 以后全部的字符。
Minute(time) 取得时间内容的分部分,型态为Integer。
MkDir(path) 建立一个新的目录。
Month(date) 取得日期的月部分,型态为Integer。
MonthName(month) 依接收的月份数值取得该月份的完整写法。
Now() 取得目前的日期和时间。
Oct(number) 将数值参数转换为8 进制值。
Replace(expression, find, replace) 将字符串中find 参数指定的字符串转换为replace 参数指定的字符串。
Right(string,length) 由字符串右边开始取得length 参数设定长度的字符。
RmDir(path) 移除一个空的目录。
Rnd() 取得介于0 到1 之间的小数,如果每次都要取得不同的值,使用前需加上Randomize 叙述。
Rtrim(string) 去掉字符串的右边空白部分。
Second(time) 取得时间内容的秒部分,型态为Integer。
Sign(number) 取得数值内容是正数或负数,正数传回1,负数传回-1,0 传回0。
Sin(number) 取得一个角度的正弦值。
Space(number) 取得number 参数设定的空白字符串。
Split(expression[, delimiter]) 以delimiter 参数设定的条件字符串来将字符串分割为字符串数组。
Sqrt(number) 取得一数值得平方根。
Str(number) 将数字转为字符串后传回。
StrReverse(expression) 取得字符串内容反转后的结果。
Tan(number) 取得某个角度的正切值。
TimeOfDay() 取得目前不包含日期的时间。
Timer() 取得由0:00 到目前时间的秒数,型态为Double。
TimeSerial(hour, minute, second) 将接收的参数合并为一个只有时间Date 型态的数据。
TimaValue(time) 取得符合国别设定样式的时间值。
Today() 取得今天不包含时间的日期。
Trim(string) 去掉字符串开头和结尾的空白。
TypeName(varname) 取得变量或对象的型态。
Ubound(arrayname[, dimension]) 取得数组的最终索引值,dimension 参数是指定取得第几维度的最终索引值。
Ucase(string) 将字符串转换为大写。
Val(string) 将代表数字的字符串转换为数值型态,若字符串中含有非数字的内容则会将其去除后,合并为一数字。
Weekday(date) 取的参数中的日期是一个星期的第几天,星期天为1、星期一为2、星期二为3 依此类推。
WeekDayName(number) 依接收的参数取得星期的名称,可接收的参数为1 到7,星期天为1、星期一为2、星期二为3 依此类推。
| 环境变量 |
变量值 |
| ALL_HTTP |
HTTP_CONNECTION:Keep-Alive HTTP_ACCEPT:image/gif, image/x-xbitmap, image/jpeg, image/pjpeg, application/x-shockwave-flash, application/vnd.ms-excel, application/vnd.ms-powerpoint, application/msword, */* HTTP_ACCEPT_ENCODING:gzip, deflate HTTP_ACCEPT_LANGUAGE:zh-cn HTTP_COOKIE:ASP.NET_SessionId=5dchvi3oayuayd55zlrx35av HTTP_HOST:localhost HTTP_USER_AGENT:Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.0; .NET CLR 1.1.4322) |
| ALL_RAW |
Connection: Keep-Alive Accept: image/gif, image/x-xbitmap, image/jpeg, image/pjpeg, application/x-shockwave-flash, application/vnd.ms-excel, application/vnd.ms-powerpoint, application/msword, */* Accept-Encoding: gzip, deflate Accept-Language: zh-cn Cookie: ASP.NET_SessionId=5dchvi3oayuayd55zlrx35av Host: localhost User-Agent: Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.0; .NET CLR 1.1.4322) |
| APPL_MD_PATH |
/LM/w3svc/1/root/Temp/WebApp |
| APPL_PHYSICAL_PATH |
c:\inetpub\wwwroot\Temp\WebApp\ |
| AUTH_TYPE |
|
| AUTH_USER |
|
| AUTH_PASSWORD |
|
| LOGON_USER |
|
| REMOTE_USER |
|
| CERT_COOKIE |
|
| CERT_FLAGS |
|
| CERT_ISSUER |
|
| CERT_KEYSIZE |
|
| CERT_SECRETKEYSIZE |
|
| CERT_SERIALNUMBER |
|
| CERT_SERVER_ISSUER |
|
| CERT_SERVER_SUBJECT |
|
| CERT_SUBJECT |
|
| CONTENT_LENGTH |
0 |
| CONTENT_TYPE |
|
| GATEWAY_INTERFACE |
CGI/1.1 |
| HTTPS |
off |
| HTTPS_KEYSIZE |
|
| HTTPS_SECRETKEYSIZE |
|
| HTTPS_SERVER_ISSUER |
|
| HTTPS_SERVER_SUBJECT |
|
| INSTANCE_ID |
1 |
| INSTANCE_META_PATH |
/LM/W3SVC/1 |
| LOCAL_ADDR |
127.0.0.1 |
| PATH_INFO |
/Temp/WebApp/ServerVariables.aspx |
| PATH_TRANSLATED |
c:\inetpub\wwwroot\Temp\WebApp\ServerVariables.aspx |
| QUERY_STRING |
|
| REMOTE_ADDR |
127.0.0.1 |
| REMOTE_HOST |
127.0.0.1 |
| REMOTE_PORT |
4529 |
| REQUEST_METHOD |
GET |
| SCRIPT_NAME |
/Temp/WebApp/ServerVariables.aspx |
| SERVER_NAME |
localhost |
| SERVER_PORT |
80 |
| SERVER_PORT_SECURE |
0 |
| SERVER_PROTOCOL |
HTTP/1.1 |
| SERVER_SOFTWARE |
Microsoft-IIS/5.0 |
| URL |
/Temp/WebApp/ServerVariables.aspx |
| HTTP_CONNECTION |
Keep-Alive |
| HTTP_ACCEPT |
image/gif, image/x-xbitmap, image/jpeg, image/pjpeg, application/x-shockwave-flash, application/vnd.ms-excel, application/vnd.ms-powerpoint, application/msword, */* |
| HTTP_ACCEPT_ENCODING |
gzip, deflate |
| HTTP_ACCEPT_LANGUAGE |
zh-cn |
| HTTP_COOKIE |
ASP.NET_SessionId=5dchvi3oayuayd55zlrx35av |
| HTTP_HOST |
localhost |
| HTTP_USER_AGENT |
Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.0; .NET CLR 1.1.4322) |
posted @ 2005-11-03 19:01 Chark 阅读(320) 评论(0)
编辑
绑定到集合和列表
关键字 ArrayList Select DataTable DataRelation 演示代码
DataGrid、ListBox 和 HTMLSelect 这样的列表服务器控件将集合用作数据源。
这些控件只能绑定到支持 IEnumerable、ICollection 或 IListSource 接口的集合。
最常见的是绑定到 ArrayList、Hashtable、DataView 和 DataReader。
关键字:
AlternatingItemTemplate :指定如何显示每一其它选项。
ItemTemplate :指定如何显示选项。(AlternatingItemTemplate可以覆盖这一模板。)
HeaderTemplate :建立如何显示标题。
FooterTemplate :建立如何显示页脚。
SeparatorTemplate :指定如何显示不同选项之间的分隔符。
DataBinder.Eval() //方法:该方法用在运行时计算绑定表达式。该方法有三个参数:
A、数据项的命名容器:命名容器是一个对象引用,该对象即是计算表达式所针对的对象。如果绑定是针对列表控件(如Repeater、DataList或DataGrid)的,则命名容器将始终是Container.DataItem。如果绑定是针对页面的,则命名容器是Page。
B、 数据字段名:绑定表格的列名(此例如“平方”等)。
C、 格式字符串
如果要求高性能,不建议使用DataBinder.Eval()方法
<%@ Import namespace="System.Data" %>
<%# DataBinder.Eval(Container.DataItem,"xxxx")%> 或者 <%# DataBinder.Eval(Container,"DataItem.xxxx")%>
<%# ((DataRowView)Container.DataItem)["xxxx"]%> 这种用法其实和 <%# ((DictionaryEntry)Container.DataItem).Key%>是一个道理。
<%# ((DataRowView)Container.DataItem).Row.GetChildRows("rebook") %>
DataSource='<%# GetGlobalCategory(int.Parse(DataBinder.Eval(Container.DataItem, "CategoryID").ToString())) %>'>
<%# Container.DataItem.Row.GetChildRows("myrelation") %>
ArrayList //动态数组--实现 IList 接口
DropDown1.SelectedItem.Text; //选择的内容
ArrayList values = new ArrayList();
values.Add ("IN>");
values.Add ("KS");
values.Add ("MD");
values.Add ("MI");
values.Add ("OR");
values.Add ("TN");
DropDown1.DataSource = values;
Select // 控件编程方程生成表格
Select1.Items.Count //合计
Select1.Items[i].Selected //检查被选择中值
Select1.Items[i].Text; //内容
<select id="Select1" Multiple="True" runat="server">
<option value="1" Selected="True"> Item 1 </option>
<option value="2"> Item 2 </option>
<option value="3"> Item 3 </option>
<option value="4"> Item 4 </option>
<option value="5"> Item 5 </option>
<option value="6"> Item 6 </option>
</select>
DataTable //内存中的表
DataSet.Tables.Add(DataTable); //把表赋给DataSet
DataSet //多个表集合
DataTable //内存中数据的一个表
DataColumn //表的列集合
DataRow //表的行集合
DataTable.Columns.Add(DataColumn); //增加1列
DataTable.NewRow() //方法来生成此DataTable结构的新行
DataColumn.Expression //属性的表达式创建一些列
ChildRelations //父表
ParentRelations //子表
DataTable dt = new DataTable();
DataRow dr;
dt.Columns.Add(new DataColumn("整数值", typeof(Int32)));
dt.Columns.Add(new DataColumn("字符串值", typeof(string)));
dt.Columns.Add(new DataColumn("日期时间值", typeof(DateTime)));
dt.Columns.Add(new DataColumn("布尔值", typeof(bool)));
for (int i = 1; i <= 9; i++)
{
dr = dt.NewRow();
dr[0] = i; dr[1] = "项 " + i.ToString();
dr[2] = DateTime.Now; dr[3] = (i % 2 != 0) ? true : false; dt.Rows.Add(dr);
}
dataGrid1.DataSource = new DataView(dt);
DataRelation //在内存中给DataTable间建立关系
// 关系名 父列 子表列 ----建立关系的两个列的 DataType 值必须相同
DataRelation(String, DataColumn, DataColumn)
代码演示
public void Page_Load(object sender, EventArgs e)
{
SqlConnection cnn = new SqlConnection("server=(local);database=pubs;uid=sa;pwd=;");
SqlDataAdapter cmd1 = new SqlDataAdapter("select * from authors",cnn);
DataSet ds = new DataSet();
cmd1.Fill(ds,"authors");
SqlDataAdapter cmd2 = new SqlDataAdapter("select * from titleauthor",cnn);
cmd2.Fill(ds,"titles");
ds.Relations.Add("myrelation"),ds.Tables["authors"].Columns["au_id"],ds.Tables["titles"].Columns["au_id"]);
parent.DataSource = ds.Tables["authors"];
Page.DataBind();
cnn.Close();
}
posted @ 2005-11-03 18:59 Chark 阅读(261) 评论(0)
编辑
<script language="C#" runat=server>
void ServerValidate (object source, ServerValidateEventArgs value)
{
int num = Int32.Parse(value.Value);
if (num%2 == 0)
{
value.IsValid = true;
return;
}
else
value.IsValid = false;
}
</script>
<script language="javascript">
function ClientValidate(source, arguments)
{
if (arguments.Value%2 == 0)
arguments.IsValid = true;
else
arguments.IsValid = false;
}
</script>
<form runat="server">
<asp:CustomValidator id="CustomValidator1" runat="server"
ControlToValidate="Text1"
ClientValidationFunction="ClientValidate" <!-- 客服端器事件名 -->
OnServerValidate="ServerValidate" <!-- 服务器事件名 -->
Display="Static"
Font-Name="verdana" Font-Size="10pt">
不是偶数!
</asp:CustomValidator>
<p>
<asp:Button text="验证" onclick="ValidateBtn_OnClick" runat="server" />
</form>
posted @ 2005-11-03 18:54 Chark 阅读(775) 评论(2)
编辑
Session ViewState Cookie
Session
Session.Add("变量","值"); //存
Session["变量"] = 值; //存
str = Session["变量"]; //取
ViewState
ViewState["变量"] = 值; //存
值 = ViewState["变量"]; //取
Cookie
//创建一个HttpCookie对象
HttpCookie cookie = new HttpCookie (NameField.Text) ;
//设定此cookies值
cookie.Value = ValueField.Text ;
//设定cookie的生命周期,在这里定义为一个小时
DateTime dtNow = DateTime.Now ;
TimeSpan tsMinute = new TimeSpan (0, 1, 0, 0);
cookie.Expires = dtNow + tsMinute ;
cookie [ "姓名" ] = "王天" ;
cookie [ "性别" ] = "男" ;
cookie [ "年龄" ] = "26" ;
Response.Cookies.Add(cookie) ; //加入此cookie
HttpCookie cookie = Request.Cookies [ " Cookie的名称" ] ; //读取
当然上面的代码产生的Cookie在内容上面有点单调了。其实对于内容十分丰富的Cookie来说,他还有许多属性,充分的利用这些属性,才可以利用了Cookie的强大功能。下表是Cookie的一些常用的属性:
属性 描述
Domain 设定/获得Cookie应属于的域名。一旦设定了此属性,则只限定于此域名的Web服务器访问此Cookie。可以设定为"ccw.com.cn"
Path 设定/获得Cookie应属于的路径,如果设定后,则访问此Cookie的Web页面则被限定在此路径里面。其他路径的Web页面则不能访问。
Secure 设定/获得一个标识来表明利用HTTP协议是否能够安全的传输Cookie到客户端的浏览器。
HasKeys 表明是否此Cookie是否是多个字符串组成的。
posted @ 2005-11-03 18:53 Chark 阅读(299) 评论(0)
编辑
posted @ 2005-11-03 18:50 Chark 阅读(3975) 评论(0)
编辑
Visual Studio 2005 Team Edition for Software Architects (VSTA) 提供了一些为设计和部署分布的、面向服务的应用系统的设计器。这些设计工具使架构师和开发人员以一种新的模式设计一个分布式系统,即连接型的应用或者提供服务,或者使用服务。在2005的版本中主要包含用来设计基于Web Services的应用,和为部署而配置可重用系统的工具。本讲座将通过一个端到端的应用设计、开发和部署的场景,来介绍这些分布式系统工具,包括应用、系统、部署和逻辑数据中心的设计工具。我们也将介绍相关的一些扩展性功能,这些功能允许描述更多种的应用和逻辑服务器。
文章来源:
http://www.microsoft.com/china/msdn/events/webcasts/shared/webcast/episode.aspx?newsID=1242326
posted @ 2005-11-03 14:30 Chark 阅读(42) 评论(0)
编辑
使调试变得更加容易!在本次课程中,您将学习到Visual Studio 2005调试器的各种增强特性。包括改进的UI,编辑功能,增强的数据可视化能力,灵活的断点设置,远程调试实现等等功能。您将领略到Visual Stduio已经成为了您调试所需的最佳工具。
文章来源:
http://www.microsoft.com/china/msdn/events/webcasts/shared/webcast/episode.aspx?newsID=1242325
posted @ 2005-11-03 10:00 Chark 阅读(40) 评论(0)
编辑