posts - 18, comments - 15, trackbacks - 0, articles - 1
  博客园 :: 首页 :: 新随笔 :: 联系 :: 订阅 订阅 :: 管理

2008年4月25日

SET ANSI_NULLS ON
GO
SET QUOTED_IDENTIFIER ON
GO
-- =============================================
-- Author:  yuanwensheng
-- Create date: 2008-4-25
-- Description: 相册评论
-- =============================================
alter PROCEDURE SelectComments

@strGetFields varchar(1000) = '*', -- 需要返回的列

@fldName varchar(255)='',      -- 排序的字段名

@PageSize   int = 10,          -- 页尺寸

@PageIndex int = 1,           -- 页码

@OrderType bit = 0, -- 设置排序类型, 非 0 值则降序

@strWhere varchar(1500) = '' -- 查询条件 (注意: 不要加 where)

AS

declare @tblName varchar(255)         --表名

declare @strSQL   varchar(5000)       -- 主语句

declare @strTmp   varchar(110)        -- 临时变量

declare @strOrder varchar(400)        -- 排序类型


declare @sql varchar(2000)            -- 生成临时表时用到的变量
declare @count int                    -- 个人相册的表数量


begin

    --把所有需要的数据导入临时表 开始
    create table #tbTmp(CommentID int,PictureID bigint,UserID bigint,CommentUserID bigint,CommentUserName nvarchar(50),Content nvarchar(1000),AddedTime datetime,tbtable nvarchar(255));  
   --因为要有删除记录操作 所以得CommentID(仅是单表的主键)  和tbtable  组合做主键才可以
    set @count=1;
    if @strWhere!=''
 begin
    set @sql='select *,''PicturesComments_0''  tbtable  from PicturesComments_0 where '+@strWhere;
 end
 else
 begin
  set @sql='select *,''PicturesComments_0'' from PicturesComments_0';
 end
  
    --循环开始
    WHILE   @count<10
 begin

 if @strWhere!=''
 begin
    set @sql=@sql+' union all  select *,''PicturesComments_'+cast(@count as varchar)+''' from PicturesComments_'+cast(@count as varchar)+' where '+@strWhere;
 end
 else
 begin
  set @sql=@sql+' union all  select *,''PicturesComments_'+cast(@count as varchar)+''' from PicturesComments_'+cast(@count as varchar);
 end
  set @count=@count+1;
 end
 --循环结束
    insert into #tbTmp  exec (@sql);


 

   -- 结束
   
    set @tblName = '#tbTmp';

    if @strWhere !=''

    set @strSQL = 'select count(*) as Total from [' + @tblName + '] where '+@strWhere

    else

    set @strSQL = 'select count(*) as Total from [' + @tblName + ']'
    
    exec (@strSQL);

 

if @OrderType != 0

begin

    set @strTmp = '<(select min'

set @strOrder = ' order by [' + @fldName +'] desc'

--如果@OrderType不是0,就执行降序,这句很重要!

end

else

begin

    set @strTmp = '>(select max'

    set @strOrder = ' order by [' + @fldName +'] asc'

end

if @PageIndex<1
begin
set @PageIndex=1
--如果输入负值变为第一页
end

if @PageIndex = 1

begin

--    if @strWhere != '' 
--
--    set @strSQL = 'select top ' + str(@PageSize) +' '+@strGetFields+ ' from [' + @tblName + '] where ' + @strWhere + ' ' + @strOrder
--
--     else

     set @strSQL = 'select top ' + str(@PageSize) +' '+@strGetFields+ ' from ['+ @tblName + '] '+ @strOrder

--如果是第一页就执行以上代码,这样会加快执行速度

end

else

begin

--以下代码赋予了@strSQL以真正执行的SQL代码

set @strSQL = 'select top ' + str(@PageSize) +' '+@strGetFields+ ' from ['

    + @tblName + '] where [' + @fldName + ']' + @strTmp + '(['
 + @fldName + ']) from (select top ' + str((@PageIndex-1)*@PageSize) + ' ['
 + @fldName + '] from [' + @tblName + ']' + @strOrder + ') as tblTmp)'+ @strOrder

--if @strWhere != ''
--
--    set @strSQL = 'select top ' + str(@PageSize) +' '+@strGetFields+ ' from ['
--
--        + @tblName + '] where [' + @fldName + ']' + @strTmp + '(['
--
--        + @fldName + ']) from (select top ' + str((@PageIndex-1)*@PageSize) + ' ['
--
--        + @fldName + '] from [' + @tblName + '] where ' + @strWhere + ' '
--
--        + @strOrder + ') as tblTmp) and ' + @strWhere + ' ' + @strOrder

end

end 

exec (@strSQL)

GO

posted @ 2008-04-25 18:48 yuanws 阅读(9) | 评论 (0)编辑

2008年3月31日

1. 常规写法

 // 创建一个XmlDocument对象,用于载入存储信息的XML文件
            XmlDocument xdoc = new XmlDocument();
            xdoc.Load(Server.MapPath("guestbook.xml"));

            // 创建一个新的guest节点并将它添加到根节点下
            XmlElement parentNode = xdoc.CreateElement("guest");
            xdoc.DocumentElement.PrependChild(parentNode);
          
            // 创建所有用于存储信息的节点
            XmlElement namenode = xdoc.CreateElement("name");
            XmlElement emailNode = xdoc.CreateElement("email");
            XmlElement qqNode = xdoc.CreateElement("qq");
            XmlElement homepageNode = xdoc.CreateElement("homepage");
            XmlElement commentNode = xdoc.CreateElement("comment");

            // 获取文本信息
            XmlText nameText  = xdoc.CreateTextNode(TextBox1.Text);
            XmlText emailText = xdoc.CreateTextNode(TextBox2.Text);
            XmlText qqText = xdoc.CreateTextNode(TextBox3.Text);
            XmlText homepageText = xdoc.CreateTextNode(TextBox4.Text);
            XmlText commentText = xdoc.CreateTextNode(TextBox5.Text);

            // 将上面创建的各个存储信息的节点添加到guest节点下但并不包含最终的值
            parentNode.AppendChild(namenode);
            parentNode.AppendChild(emailNode);
            parentNode.AppendChild(qqNode);
            parentNode.AppendChild(homepageNode);
            parentNode.AppendChild(commentNode);

            // 将上面获取的文本信息添加到与之相对应的节点中
            namenode.AppendChild(nameText);
            emailNode.AppendChild(emailText);
            qqNode.AppendChild(qqText);
            homepageNode.AppendChild(homepageText);
            commentNode.AppendChild(commentText);

            xdoc.Save(Server.MapPath("guestbook.xml"));

xslt转换
            Xml1.DocumentSource = Server.MapPath("guestbook.xml");
            Xml1.TransformSource = Server.MapPath("guestBook.xslt");

绑定gridview 
             DataSet ds = new DataSet();
            ds.ReadXml(Server.MapPath("guestbook.xml"));
            this.GridView1.DataSource = ds.Tables[0].DefaultView;
            this.GridView1.DataBind();

下载文件 guestbookxml 和xslt文件格式

2. linq 

   XDocument xdoc = XDocument.Load(Server.MapPath("guestbook.xml"));//var
            var zz = from p in xdoc.Elements("guestbook").Elements("guest")
                     where  (p.Attribute("style")== null)||(p.Attribute("style").Value!="display")
                     select new { name = p.Element("name").Value, emali = p.Element("email").Value, qq = p.Element("qq").Value };
            GridView1.DataSource = zz;
            GridView1.DataBind();

创建
XDocument xdoc = new XDocument(
                new XDeclaration("1.0", "utf-8", null),
                new XElement("guestbook",
                    new XElement("guest",
                        new XElement("name", "jack"),
                        new XElement("age", "20")),
                    new XElement("guest",
                        new XElement("name", "tom"),
                        new XElement("age", "15"))
                        ));
            xdoc.Save(Server.MapPath("aa.xml"));

查找
  var aa = from a in xdoc.Descendants("name")
                     where a.Value == "jack"
                     select a;
            foreach (var aaa in aa)
            {
                Response.Write(aaa);
            }

posted @ 2008-03-31 15:03 yuanws 阅读(3) | 评论 (0)编辑

1. IList<city> cc = new List<city> { new city { Name = "100", DistanceFromSeattle = 10, Country = "中国" }, new city { Name = "10", DistanceFromSeattle = 20, Country = "美国" } };          
            GridView1.DataSource = from p in cc  where p.DistanceFromSeattle>10 orderby p.DistanceFromSeattle descending select p; // aa.getData().Tables[0];
            
           GridView1.DataBind();

2. DataClasses1DataContext dc = new DataClasses1DataContext();
            GridView1.DataSource = from p in dc.dnt_users where p.username.Length > 5 orderby p.username descending select p;
            GridView1.DataBind(); 

   或者GridView1.DataSource = dc.dnt_users .Where(p=>p.username.Length > 5);
         GridView1.DataBind(); 


   表关联   GridView1.DataSource = from p in dc.dnt_helps
                                   join m in dc.dnt_postids
                                   on p.pid equals m.pid
                                   select new
                                   { p.message, p.id, p.title, m.postdatetime };
            GridView1.DataBind();

3. 存储过程EmployeeDataContext edc = new EmployeeDataContext();
            string firstname = "alice";
            string lastname = "wange";
            this.GridView1.DataSource = edc.ProcInsertEmployee(lastname, firstname);
            //edc.ProcInsertEmployeeResult("alice", "wang");
            this.GridView1.DataBind();

4.添删改操作
     DataClasses1DataContext dc = new DataClasses1DataContext();

添加 dnt_help dp = new dnt_help(); //表dnt_help
            dp.title = "10";
            dp.message = "中国";
            dp.pid = 10;
            dp.orderby = 1;
            dc.dnt_helps.InsertOnSubmit(dp); //插入
            dc.SubmitChanges();              //提交
            BindAll(); //绑定函数

修改 var zz = from p in dc.dnt_helps where p.title == "10" select p;
            foreach (dnt_help dh in zz)
            {
                dh.title = "china";
            }
            dc.SubmitChanges();
            BindAll();

删除 var zz = from p in dc.dnt_helps where p.title == "china" select p;
            if (zz.Count<dnt_help>() > 0)
            {  
                dc.dnt_helps.DeleteOnSubmit(zz.First<dnt_help>()); (1)
                dc.SubmitChanges();  (2)
                BindAll();
            }  //批量删除需要自己做扩展,要么循环(1)+(2),还有就是做存储过程

posted @ 2008-03-31 11:36 yuanws 阅读(125) | 评论 (5)编辑

2008年1月17日

一. HTTP压缩概述

HTTP压缩是在Web服务器和浏览器间传输压缩文本内容的方法。HTTP压缩采用通用的压缩算法如gzip等压缩HTML、JavaScript或CSS文件。压缩的最大好处就是降低了网络传输的数据量,从而提高客户端浏览器的访问速度。当然,同时也会增加一点点服务器的负担。Gzip是比较常见的一种HTTP压缩算法。

本文介绍的HTTP压缩方式,采用的是Windows系统设置的方式,优点是效率较高。


二. HTTP压缩工作原理

Web服务器处理HTTP压缩的工作原理如下:

Web服务器接收到浏览器的HTTP请求后,检查浏览器是否支持HTTP压缩;
如果浏览器支持HTTP压缩,Web服务器检查请求文件的后缀名;
如果请求文件是HTML、CSS等静态文件,Web服务器到压缩缓冲目录中检查是否已经存在请求文件的最新压缩文件;
如果请求文件的压缩文件不存在,Web服务器向浏览器返回未压缩的请求文件,并在压缩缓冲目录中存放请求文件的压缩文件;
如果请求文件的最新压缩文件已经存在,则直接返回请求文件的压缩文件;
如果请求文件是ASPX等动态文件,Web服务器动态压缩内容并返回浏览器,压缩内容不存放到压缩缓存目录中。


三. IIS 6.0中配置HTTP Gzip压缩的步骤:

1) 打开Internet信息服务(IIS)管理器,右击"网站"->"属性",选择"服务"。在"HTTP压缩"框中选中"压缩应用程序文件"和"压缩静态文件",按需要设置"临时目录"和"临时目录的最大限制";

2) 在Internet信息服务(IIS)管理器,右击"Web服务扩展"->"增加一个新的Web服务扩展...",在"新建Web服务扩展"框中输入扩展名"HTTPCompression",添加"要求的文件"为C:\WINDOWS\system32\inetsrv\gzip.dll,其中Windows系统目录根据您的安装可能有所不同,选中"设置扩展状态为允许";

3) 使用文本编辑器打开C:\Windows\System32\inetsrv\MetaBase.xml(建议先备份),找到Location ="/LM/W3SVC/Filters/Compression/gzip",如果需要压缩动态文件,则将HcDoDynamicCompression设置为"TRUE",并在HcScriptFileExtensions中增加您要压缩的动态文件后缀名,如aspx;如果需要压缩静态文件,则将HcDoStaticCompression和HcDoOnDemandCompression设置为"TRUE",并在HcFileExtensions中增加您需要压缩的静态文件后缀名,如xml、css等;HcDynamicCompressionLevel和HcOnDemandCompLevel表示需要的压缩率,数字越小压缩率越低;

4) 编辑完毕后保存MetaBase.xml文件;如果文件无法保存,则可能IIS正在使用该文件。打开"开始"->"管理工具"->"服务",停止"IIS Admin Service"后,即可保存;

5) 最后,重新启动IIS。可以到HTTP压缩测试网站验证结果。

posted @ 2008-01-17 09:29 yuanws 阅读(15) | 评论 (0)编辑

2007年12月25日

     摘要: 自定义一个继承自httphandle的类 Code Code highlighting produced by Actipro CodeHighlighter (freeware)http://www.CodeHighlighter.com/-->  1using System;   2using System.Web; &n...  阅读全文

posted @ 2007-12-25 09:16 yuanws 阅读(29) | 评论 (0)编辑

2007年11月29日

Reading guide: 使用Request.ServerVariables[string name]可以获取的各项变量名称
环境变量 变量值
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 @ 2007-11-29 15:45 yuanws 阅读(22) | 评论 (0)编辑

2007年11月22日

1.
string cnnstring = System.Configuration.ConfigurationSettings.AppSettings["Oracle"].ToString();
      OracleConnection conn=new OracleConnection(cnnstring);
   OracleCommand cmd=new OracleCommand("select spxxid,spdt from jt_j_spxx where spdt is not null order by spxxid desc ",conn);
   //OracleCommand cmd=new OracleCommand("select spxxid,spdt from jt_j_spxx order by spxxid desc ",conn);
            //OracleCommand cmd=new OracleCommand("select spxxid,spdt from jt_j_spxx where spxxid='756336553'",conn);
   conn.Open();
   OracleDataReader myReader;
            myReader = cmd.ExecuteReader();
   while(myReader.Read())
   {
    
    fpath = Server.MapPath(Request.ApplicationPath)+"/image/"+myReader.GetString(0)+".jpg";
                 fs =new FileStream(fpath, FileMode.OpenOrCreate, FileAccess.Write);
                 bw = new BinaryWriter(fs);
    outbyte = (byte[])myReader[1];
    bw.Write(outbyte);
    bw.Flush();
     bw.Close();
                fs.Close();

   }
   myReader.Close();
            conn.Close();

2. 
  upfile(System.Configuration.ConfigurationSettings.AppSettings["ForumUrl"]+"/Movie/default.aspx","~/Movie/index.html");

public void upfile(string url,string mappath)
  {
   try
   {
    Uri UrlPage= new Uri(url);
    HttpWebRequest hwReq = (HttpWebRequest)WebRequest.Create(UrlPage);
    hwReq.Timeout = 50000 ;
    HttpWebResponse hwRes = (HttpWebResponse)hwReq.GetResponse();
    hwReq.Method = "Post";
    hwReq.KeepAlive = true;


    StreamWriter fs =new StreamWriter(Server.MapPath(mappath),false,System.Text.Encoding.UTF8);
    StreamReader  fs2=new StreamReader(hwRes.GetResponseStream(),System.Text.Encoding.UTF8);
    string nextline;
    while((nextline=fs2.ReadLine())!=null)
    {
     fs.WriteLine(nextline);
    }
    fs.Close();
    fs2.Close();
    Response.Write("<script>alert('生成成功');</script>");
   }
   catch
   {
    Response.Write("<script>alert('生成超时,请重新生成');</script>");
   }
    
  }
3.

if(File.Exists(Server.MapPath("../zthtml/temp/"+str))==false)
    {
     Response.Write("<script>alert('没有找到模板,请确定模板的名字正确!');</script>");
    }
    else
    {
     StreamReader objReader = new StreamReader(Server.MapPath("~/zthtml/temp/"+str),System.Text.Encoding.GetEncoding("gb2312"));
           

     string sLine="";
     sLine=objReader.ReadToEnd();
     objReader.Close();


}StreamWriter sw=new StreamWriter(Server.MapPath("~/zthtml/"+str.Substring(0,str.IndexOf(".",1))+".shtml"),false,System.Text.Encoding.GetEncoding("gb2312"),sLine.Length);
    
     sw.Write(sLine);

posted @ 2007-11-22 15:07 yuanws 阅读(16) | 评论 (0)编辑

2007年11月7日

大多数 ADO.NET 数据提供程序使用连接池,以提高围绕 Microsoft 断开连接的 .NET 结构构建的应用程序的性能。应用程序首先打开一个连接(或从连接池获得一个连接句柄),接着运行一个或多个查询,然后处理行集,最后将连接释放回连接池。如果没有连接池,这些应用程序将花费许多额外时间来打开和关闭连接。

当您使用 ADO.NET 连接池来管理基于 Web 的应用程序和客户端/服务器 Web 服务应用程序的连接时,您的客户通常会获得更快的连接和更好的总体性能。但是,当您的应用程序或 Web 站点上突然涌入了同时希望进行连接的大量客户时,会发生什么事情呢?您的应用程序会“沉没”,还是会“游泳”?就像救生员一样,您需要仔细监视连接池,以维护它的良好性能,并防止连接池发生溢出。我们首先探讨连接池可能溢出的原因,然后讨论如何编写代码或使用 Windows 性能监视器来监视连接池。
当您使用连接池时,您需要知道许多有关可伸缩性和性能的详细信息。请记住,您需要监视和管理两个基本因素:每个池管理的连接数和连接池的数量。在一个有效的生产系统中,池的数量通常很少(1 到 10),而且,使用中的连接的总数也很少(少于 12 )有效的查询只用不到一秒钟的时间就可以完成,并断开连接。因此,即使有数百个客户同时访问您的 Web 站点,相对较少的几个连接常常足以处理整个负载。为了使您的应用程序有效地运行,您必须使连接资源处于自己的控制之下,并要监视池的状态,这样,在监视池发生溢出以及您的客户开始抱怨(或离开您的网站)之前您会收到某种警告。

为什么会发生连接池溢出?
参加电子邮件讨论组的人常常抱怨应用程序是如何在测试中是“龙”而在形成为产品时就变成了“虫”的。有时,他们会报告说,当连接了大约 100 个客户端时,应用程序会停止或挂起。请记住,一个池中的默认连接数是 100。如果您尝试从池中打开 100 个以上的连接,ADO.NET 会使应用程序的连接请求排队等候,直到有空闲的连接。应用程序(及其用户)将这种情况视为进入 Web 页的延迟或视为应用程序死锁。让我们首先讨论一下这个问题是如何产生的。

在 ADO.NET 中,SqlClient .NET 数据提供程序为您提供了两种打开和管理连接的方法。首先,当您需要手工管理连接时,可以使用 DataReader 对象。利用这种方法,您的代码将构造一个 SqlConnection 对象,设置 ConnectionString 属性,然后使用 Open 方法来打开连接。当代码完成 DataReader 后,您要在 SqlConnection 对象停止作用之前关闭 SqlConnection。要处理行集,您可以将 DataReader 传递到应用程序中的另一个例程,但仍然需要确保 DataReader 及其连接处于关闭状态。如果您不关闭 SqlConnection,代码会“泄漏”每个操作的连接,于是连接池对连接进行累积,最后便发生溢出。与 ADO 和 Visual Basic (VB) 6.0 中的情况不同,.NET 垃圾回收器不会为您关闭 SqlConnection 并进行清理。我稍后要讨论的 清单 1 显示了如何打开连接和生成 DataReader 以从一个简单的查询返回行集,来向连接池施加压力的。

您也可能在使用 DataAdapter 对象时遇到问题。DataAdapter Fill 和 Update 方法可自动打开 DataAdapter 对象的连接,并在数据 I/O 操作完成后关闭该连接。不过,如果该连接在执行 Fill 或 Update 方法时已经处于打开状态,那么,ADO.NET 在方法执行完以后不会关闭 SqlConnection。这是另一个发生连接“泄漏”的机会。

此外,您还可以使用基于 COM 的 ADO 从 .NET 应用程序创建连接。ADO 利用与 ADO.NET 相同的方式将这些连接组合成池,但不能像您使用 SqlClient ADO.NET 数据提供程序时那样,提供从应用程序监视连接池的方式。

指示 DataReader

孤立连接和溢出池是严重的问题,根据有关这些问题的新闻组讨论的数量来看,它们十分常见。这些问题最有可能是由 DataReader 引起的。为了测试 DataReader 的行为,我编写了一个 Windows 窗体 (WinForms) 示例应用程序,该示例突出了 CommandBeh***ior.CloseConnection 选项。(您可以在 http://www.sqlmag.com 上输入 InstantDoc ID 39031 来下载此应用程序)。您可以在使用 SqlCommand 对象的 ExecuteReader 方法来执行查询并返回 DataReader 时设定此选项。我的测试应用程序显示,如果不显式关闭 DataReader(或 SqlConnection),即使使用此选项,连接池还是会溢出。当代码所请求的连接数超过连接池的容量时,该应用程序就会引发异常。

有些开发人员坚持认为,如果您设置 CommandBeh***ior.CloseConnection 选项,则 DataReader 及其相关联的连接会在 DataReader 完成数据读取时自动关闭。这些开发人员的看法不完全正确 — 只有当您在 ASP.NET Web 应用程序中使用复杂的绑定控件时,该选项才以这种方式工作。在整个 DataReader 结果集中循环到其行集的末尾(也就是说,当 Dr.Read — DataReader 的 Read 方法 — 返回 False 时)还不足以触发连接的自动关闭。不过,如果您绑定到一个复杂的绑定控件(例如,DataGrid),该控件则会关闭 DataReader 和连接 — 前提条件是您设置了 CommandBeh***ior.CloseConnection 选项。

如果您通过使用另一个 Execute 方法(例如,ExecuteScalar、ExecuteNonQuery 和 ExecuteXMLReader)执行查询,则您需要负责打开 SqlConnection 对象,而且,更重要的是,在查询结束时关闭该对象。如果您忘记了进行关闭,孤立连接会迅速地积累起来。

posted @ 2007-11-07 15:15 yuanws 阅读(30) | 评论 (0)编辑

2007年10月12日

request.params其实是一个集合,它依次包括request.querystring、request.form、request.cookies和request.servervariables。



如果要在两个页面传递数据的话,只能用request.querystring、request.form、request.cookies

Request.Params 是在 QueryString、Form、Server Variable 以及 Cookies 找数据,

他首先在 QueryString 集合查找数据,如果在 QueryString 找到数据,就返回数据,如果没有找到就去 Form 集合中查找数据,找到就返回,否则在往下一下个集合查找数据。

Request.Params["id"]

Request.Form["id"]

Request.QueryString["id"]

的用法以及区别?
Request.Params是所有post和get传过来的值的集合,Request.Form是取post传值, Request.QueryString是get传过来的

posted @ 2007-10-12 08:52 yuanws 阅读(37) | 评论 (0)编辑

2007年10月9日

早就期待着的Castle Project 1.0 RC3终于在开发几乎1年后发布了。从Castle Project网站的通告可以看到,新版本给开发人员带来了很多用于为.NET 2.0 Web应用程序而设计的MVC框架的新特性和增强功能。

InfoQ前不久采访过项目创始人Hamilton Verissimo。这个项目最后的一个版本是2006年11月发布的RC2,由于有1整年没有任何改变,所以现在新版本带来了太多的变化。

更新的功能包括:

ActiveRecord

  • 不需要扩展ARBase就能支持多数据集
  • 使用新的Castle Validation实现重构验证支持
  • InPlaceConfigurationSource.Build()
  • 添加HqlNamedQuery
  • 大量的错误修正

DynamicProxy

  • RC3第一次包含DynamicProxy 2(其支持泛型)
  • 比版本1快很多

MicroKernel/Windsor

  • 支持泛型集合
  • 转而使用DynamicProxy 2
  • 添加一些小功能到IKernel和IWindsorContainer的add/resolve方法中
  • 子容器支持得以提升,但是依旧需要一些检查——你可能会在编译的时候得到警告
  • 添加了一个很简单的计算(Eval)支持,你能进行配置
  • DefaultKernel 和 WindsorContainer现在都实现了IServiceProvider

MonoRail

  • 添加了缓存(Cache)支持(查看新的Cache属性)
  • 添加IsPost/IsGet/IsPut/IsHead到Controller
  • 添加自动窗体验证(Auto Form Validation)
  • FormHelper接近完美,依然缺乏多条选择的支持
  • 支持一次注册多个视图引擎(可以和混合视图引擎说拜拜了)——但是还不够好,在内部还有很多不协调的情况
  • 添加了少量视图组件
  • 添加测试控制器、视图组件、向导的支持,而无须使用ASP.NET
  • 添加了JS生成器支持,及UpdatePage/UpdatePageTag视图组件
  • Format支持set操作,例如$Form.Select(”price”, [1..100], “”)是用货币格式来显示选择的元素
  • 添加PaginationHelper.CreateCustomPage,其是处理分页最优化的方式
  • 添加DiggStylePagination视图组件,基于Alex Henderson运作
  • 添加了如下成员到SmartDispatcherController(和验证有关):ValidationSummaryPerInstance : IDictionary、GetErrorSummary(对象实例) : ErrorSummary、HasValidationError(对象实例) : bool
  • 添加ViewComponentDetails属性(就像ControllerDetails)
  • 添加ViewComponentParam属性,它可以告知MonoRail把参数作为属性绑定到你的视图组件上——减少了重复的代码规则
  • 添加UrlHelper/UrlBuilder概念

Aspect#

  • 已经发布

组件

 

  • 添加Castle.Validator
  • 添加Castle.DictionaryAdapter——对这个特性还有点拿不准
  • 加强了Binder(这是它的实现的另外一种重写代码)

其他

  • 创建了using.castleproject.org
  • 创建了api.castleproject.org
  • 在Castle.Services.Transaction和微软System.Transactions之间进行了初步集成
  • 创建了Castle.Core命名空间

posted @ 2007-10-09 17:49 yuanws 阅读(220) | 评论 (0)编辑