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

2008年1月17日

1.
for(var num=1;num<20;num++)
{
var re=new   RegExp("\\\[face"+num+"\\\]","gm");  
aa=aa.replace(re,"http://imgs.soufun.com/pic/UserAlbum/mk"+num+".gif");
}


2. 返回匹配结果

<script>
var aa="[face1][face2][face3][face4][face5][face6][face1][face1]werwerwerewr";

//for(var num=1;num<20;num++)
//{
//var re=new   RegExp("\\\[face.*?\\\]","gm");
var re=/\[face.*?\]/g; 
//aa=aa.replace(re,"http://imgs.soufun.com/pic/UserAlbum/mk"+num+".gif");
var tmp=aa.match(re);
//}
for(var i=0;i<tmp.length;i++)
{
aa=aa.replace(tmp[i],"http://imgs.soufun.com/pic/UserAlbum/mk"+tmp[i].substring(5,tmp[i].length-1)+".gif")

}
alert(aa);
</script>


posted @ 2008-06-30 11:03 yuanws 阅读(14) | 评论 (0)编辑

在本文中,我们仍然使用在一步一步学Silverlight 2系列(12):数据与通信之WebClient中用过的示例,只不过稍微做一点小的改动,使用WebRequest提交书籍编号数据,并根据书籍号返回价格信息。最终运行的结果如下图:

TerryLee_Silverlight2_0062

编写界面布局,XAML如下:

<Grid Background="#46461F">
<Grid.RowDefinitions>
<RowDefinition Height="40"></RowDefinition>
<RowDefinition Height="*"></RowDefinition>
<RowDefinition Height="40"></RowDefinition>
</Grid.RowDefinitions>
<Grid.ColumnDefinitions>
<ColumnDefinition></ColumnDefinition>
</Grid.ColumnDefinitions>
<Border Grid.Row="0" Grid.Column="0" CornerRadius="15"
Width="240" Height="36"
Margin="20 0 0 0" HorizontalAlignment="Left">
<TextBlock Text="书籍列表" Foreground="White"
HorizontalAlignment="Left" VerticalAlignment="Center"
Margin="20 0 0 0"></TextBlock>
</Border>
<ListBox x:Name="Books" Grid.Row="1" Margin="40 10 10 10"
SelectionChanged="Books_SelectionChanged">
<ListBox.ItemTemplate>
<DataTemplate>
<StackPanel>
<TextBlock Text="{Binding Name}" Height="32"></TextBlock>
</StackPanel>
</DataTemplate>
</ListBox.ItemTemplate>
</ListBox>
<Border Grid.Row="2" Grid.Column="0" CornerRadius="15"
Width="240" Height="36" Background="Orange"
Margin="20 0 0 0" HorizontalAlignment="Left">
<TextBlock x:Name="lblPrice" Text="价格:" Foreground="White"
HorizontalAlignment="Left" VerticalAlignment="Center"
Margin="20 0 0 0"></TextBlock>
</Border>
</Grid>
编写HttpHandler,注意我使用了context.Request.Form["No"],在后面我们将使用WebRequest在RequestReady方法中将数据写入请求流:
public class BookHandler : IHttpHandler
{
public static readonly string[] PriceList = new string[] {
"66.00",
"78.30",
"56.50",
"28.80",
"77.00"
};
public void ProcessRequest(HttpContext context)
{
context.Response.ContentType = "text/plain";
context.Response.Write(PriceList[Int32.Parse(context.Request.Form["No"])]);
}
public bool IsReusable
{
get
{
return false;
}
}
}

在界面加载时绑定书籍列表,关于数据绑定可以参考一步一步学Silverlight 2系列(11):数据绑定

private void UserControl_Loaded(object sender, RoutedEventArgs e)
{
List<Book> books = new List<Book>() {
new Book("Professional ASP.NET 3.5"),
new Book("ASP.NET AJAX In Action"),
new Book("Silverlight In Action"),
new Book("ASP.NET 3.5 Unleashed"),
new Book("Introducing Microsoft ASP.NET AJAX")
};
Books.ItemsSource = books;
}

接下来在SelectionChanged事件中实现用户选择书籍时,我们使用WebRequest提交书籍编号,并且获得价格数据,仍然采用异步模式,提供RequestReady和ResponseReady两个回调函数:

private string bookNo;
void Books_SelectionChanged(object sender, SelectionChangedEventArgs e)
{
bookNo = Books.SelectedIndex.ToString();
Uri endpoint = new Uri("http://localhost:49955/BookHandler.ashx");
WebRequest request = WebRequest.Create(endpoint);
request.Method = "POST";
request.ContentType = "application/x-www-form-urlencoded";
request.BeginGetRequestStream(new AsyncCallback(RequestReady), request);
request.BeginGetResponse(new AsyncCallback(ResponseReady), request);
}

实现RequestReady方法,将书籍的编号写入请求流中。

void RequestReady(IAsyncResult asyncResult)
{
WebRequest request = asyncResult.AsyncState as WebRequest;
Stream requestStream = request.EndGetRequestStream(asyncResult);
using (StreamWriter writer = new StreamWriter(requestStream))
{
writer.Write(String.Format("No={0}", bookNo));
writer.Flush();
}
}

实现ResponseReady方法,显示返回的结果。

void ResponseReady(IAsyncResult asyncResult)
{
WebRequest request = asyncResult.AsyncState as WebRequest;
WebResponse response = request.EndGetResponse(asyncResult);
using (Stream responseStream = response.GetResponseStream())
{
StreamReader reader = new StreamReader(responseStream);
lblPrice.Text = "价格:" + reader.ReadToEnd();
}
}

最后运行的结果如下:

TerryLee_Silverlight2_0059

用户选择一本书籍后,将显示其价格:

TerryLee_Silverlight2_0062

posted @ 2008-06-18 14:58 yuanws 阅读(8) | 评论 (0)编辑

编写一个简单的示例,在该示例中,选择一本书籍之后,我们通过Web Client去查询书籍的价格,并显示出来,最终的效果如下:

TerryLee_Silverlight2_0059

编写界面布局,XAML如下:

<Grid Background="#46461F">
<Grid.RowDefinitions>
<RowDefinition Height="40"></RowDefinition>
<RowDefinition Height="*"></RowDefinition>
<RowDefinition Height="40"></RowDefinition>
</Grid.RowDefinitions>
<Grid.ColumnDefinitions>
<ColumnDefinition></ColumnDefinition>
</Grid.ColumnDefinitions>
<Border Grid.Row="0" Grid.Column="0" CornerRadius="15"
Width="240" Height="36"
Margin="20 0 0 0" HorizontalAlignment="Left">
<TextBlock Text="书籍列表" Foreground="White"
HorizontalAlignment="Left" VerticalAlignment="Center"
Margin="20 0 0 0"></TextBlock>
</Border>
<ListBox x:Name="Books" Grid.Row="1" Margin="40 10 10 10"
SelectionChanged="Books_SelectionChanged">
<ListBox.ItemTemplate>
<DataTemplate>
<StackPanel>
<TextBlock Text="{Binding Name}" Height="32"></TextBlock>
</StackPanel>
</DataTemplate>
</ListBox.ItemTemplate>
</ListBox>
<Border Grid.Row="2" Grid.Column="0" CornerRadius="15"
Width="240" Height="36" Background="Orange"
Margin="20 0 0 0" HorizontalAlignment="Left">
<TextBlock x:Name="lblPrice" Text="价格:" Foreground="White"
HorizontalAlignment="Left" VerticalAlignment="Center"
Margin="20 0 0 0"></TextBlock>
</Border>
</Grid>

为了模拟查询价格,我们编写一个HttpHandler,接收书籍的No,并返回价格:

public class BookHandler : IHttpHandler
{
public static readonly string[] PriceList = new string[] {
"66.00",
"78.30",
"56.50",
"28.80",
"77.00"
};
public void ProcessRequest(HttpContext context)
{
context.Response.ContentType = "text/plain";
context.Response.Write(PriceList[Int32.Parse(context.Request.QueryString["No"])]);
}
public bool IsReusable
{
get
{
return false;
}
}
}

在界面加载时绑定书籍列表,关于数据绑定可以参考一步一步学Silverlight 2系列(11):数据绑定

void UserControl_Loaded(object sender, RoutedEventArgs e)
{
List<Book> books = new List<Book>() {
new Book("Professional ASP.NET 3.5"),
new Book("ASP.NET AJAX In Action"),
new Book("Silverlight In Action"),
new Book("ASP.NET 3.5 Unleashed"),
new Book("Introducing Microsoft ASP.NET AJAX")
};
Books.ItemsSource = books;
}

接下来当用户选择一本书籍时,需要通过Web Client去获取书籍的价格,在Silverlight 2中,所有的网络通信API都设计为了异步模式。在声明一个Web Client实例后,我们需要为它注册DownloadStringCompleted事件处理方法,在下载完成后将会被回调,然后再调用DownloadStringAsync方法开始下载。

void Books_SelectionChanged(object sender, SelectionChangedEventArgs e)
{
Uri endpoint = new Uri(String.Format("http://localhost:49955/BookHandler.ashx?No={0}",Books.SelectedIndex));
WebClient client = new WebClient();
client.DownloadStringCompleted += new DownloadStringCompletedEventHandler(client_DownloadStringCompleted);
client.DownloadStringAsync(endpoint);
}
void client_DownloadStringCompleted(object sender, DownloadStringCompletedEventArgs e)
{
if (e.Error == null)
{
lblPrice.Text = "价格:" + e.Result;
}
else
{
lblPrice.Text = e.Error.Message;
}
}

注意大家可以在Web Application Project的属性页中,把ASP.NET Development Server的端口号设置为一个固定的端口号:

TerryLee_Silverlight2_0060

最后完整的代码如下:

public partial class Page : UserControl
{
public Page()
{
InitializeComponent();
}
void UserControl_Loaded(object sender, RoutedEventArgs e)
{
List<Book> books = new List<Book>() {
new Book("Professional ASP.NET 3.5"),
new Book("ASP.NET AJAX In Action"),
new Book("Silverlight In Action"),
new Book("ASP.NET 3.5 Unleashed"),
new Book("Introducing Microsoft ASP.NET AJAX")
};
Books.ItemsSource = books;
}
void Books_SelectionChanged(object sender, SelectionChangedEventArgs e)
{
Uri endpoint = new Uri(String.Format("http://localhost:49955/BookHandler.ashx?No={0}",Books.SelectedIndex));
WebClient client = new WebClient();
client.DownloadStringCompleted += new DownloadStringCompletedEventHandler(client_DownloadStringCompleted);
client.DownloadStringAsync(endpoint);
}
void client_DownloadStringCompleted(object sender, DownloadStringCompletedEventArgs e)
{
if (e.Error == null)
{
lblPrice.Text = "价格:" + e.Result;
}
else
{
lblPrice.Text = e.Error.Message;
}
}
}

运行后效果如下:

TerryLee_Silverlight2_0059

当我们选择其中一本书籍时,将会显示出它的价格:

TerryLee_Silverlight2_0061

结束语

posted @ 2008-06-18 14:57 yuanws| 编辑

update  tags   set  usednumber=usednumber+(select b.usednumber
from  tag_tousenumber b
where tags.tagname=b.tagname and tags.channelid=b.channelid and datediff(day,b.addeddate,getdate())<1)

 

posted @ 2008-05-20 11:28 yuanws 阅读(14) | 评论 (0)编辑

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 阅读(36) | 评论 (0)编辑

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 阅读(6) | 评论 (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 阅读(137) | 评论 (5)编辑

一. 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 阅读(20) | 评论 (0)编辑