2007年8月14日

GridBagLayout
【常用构造函数】

    public GridBagLayout()

【特点】:

      GridBagLayout是所有AWT布局管理器当中最复杂的,同时他的功能也是最强大的.这种现象源于它所提供的众多的可配置选项,你几乎可以完全地 控制容器的布局方式.尽管复杂性很明显,只要理解了基本思想,就很容易使用GridBagLayout了.
      GridBagLayout从它的名字中你也可以猜到,它同GridLayout一样,在容器中以网格形式来管理组件.但GridBagLayout功能要来得强大得多.
1、GridBagLayout管理的所有行和列都可以是大小不同的.
2、GridLayout把每个组件限制到一个单元格,而GridLayout并不这样:组件在容器中可以占据任意大小的矩形区域,
      GridBagLayout通常由一个专用类来对他布局行为进行约束,该类叫GridBagConstraints.其中的所有成员都是public的, 因此要学好如何使用GridBagLayout首先要了解有那些约束变量,以及如何设置这些约束变量.
以下是GridBagConstraints的公有成员变量
  public int anchor
  public int fill
  public gridheight
  Public gridweight
  public girdx
  public gridy
  public Insets insets
  public int ipadx
  public int ipady
  public double weightx
  public double weighty
      看起来有很多约束需要进行设置,但事实上许多约束只需设置一次,并对多个组件重用,每次添加组件时只有少数的项需要修改.
      下面是一个具有简单约束的GridBagLayout示例
public class GridBagLayoutExample2 extends JPanel {

public GridBagLayoutExample2() {

this.setLayout(new GridBagLayout());
this.setOpaque(true);
GridBagConstraints c = new GridBagConstraints();
JButton b = new JButton ("One");
c.gridx = 0 ;
c.gridy = 0;
c.gridwidth = 2;
c.gridheight = 1;
this.add(b,c);//button 1 added
c.gridy++;
b= new JButton("Two");
this.add(b,c);

c.gridx = 2;
c.gridy = 0;
c.gridwidth = 2;
c.gridheight = 2;
b = new JButton("Three");
this.add(b,c);

c.gridx = 0 ;
c.gridy = 2;
c.gridwidth = 4;
c.gridheight =1 ;
this.add(new JTextField(35),c);
}

public static void main(String[] args) {
JFrame f = new JFrame("GridBagLayout 2");
JPanel p = new GridBagLayoutExample2();
f.getContentPane().add(p);
f.pack();
f.setDefaultCloseOperation(WindowConstants.EXIT_ON_CLOSE);
f.setVisible(true);

}

}

 attachments/month_200612/4282592102.jpg

图表 1

      上述示例首先生成了约束对象c , 并设置了它的属性gridx , gridy , gridwidth, girdheight四个属性,下面简要介绍这四个属性的作用
gridx, gridy 这个属性是用来描述组件在布局时应处于那个网格位置,即描述网格开始的位置
gridwidth,gridheigh这两个属性用来描述组件在布局中的所占的网格的个数,gridwidth描述了该组件在横向上所占网格的个数,gridheight描述了该组件在纵向上所占网格的个数.
      你也可以通过GridBagConstraints的RELETIVE,和REMAINDER来进行指定,它的用法是:
      当把gridx值设置为GridBagConstriants.RELETIVE时,在一个组件添加时,将被放置在前一个组件的右侧.同理,对gridy 值设置为GridBagConstraints.RELETIVE时,在添加组件时,将被放置在前一个组件的下方,(这是一种根据前一个组件而决定当前组 件的相对放置方式)
      对gridweight和gridheight也可以应用GridBagConstraints的REMAINDER方式,创建的组件会从创建的起点位置 开始一直延伸到容器所能允许的限度为止.该功能使得你可以创建跨越某些行或列的组件,从而改变相应方向上组件的数目,即使其后在布局的其他地方添加额外的 组件也是如此.
      你可以注意到图表1的buttonOne和buttonTwo上下紧靠,你可以通过设置GridBagConstraints成员Insets来调整它周围的空间大小,
new Insets(int top , int left , int bottom, int right)
      c.insets = new Insets(4,4,4,4);

 attachments/month_200612/3633838330.jpg

图表2


      接下去要解决的一个问题是容器缩放时的行为.对于文本栏这个问题是最明显的,无论容器如何变形,它都保持同样的大小.文本区域应该总是跨越在容器的底部,但你肯定不希望在纵向缩放时,文本栏也纵向增长.
      weightx和weighty成员就是用来控制在容器变形时,单元格本身如何缩放.这两个属性都是浮点数值,描述了每个单元格在拉伸时横向或纵向等到的分配比例.如对上例中的weightx设置
      button one 0.4
      button two 0.4
      button three 0.6
      text area 1.0
    则在拉伸过程中,假设拉伸了10个象素,则button one横向得到10*0.4 = 4个象素
    button three得到了剩余的6个象素.在拉伸过程中按钮one和按钮three以0.4:0.6的方式放大
    为了放置纵向拉伸时,文本框的纵向扩展,你可以把weighty设置为0

attachments/month_200612/2303926635.jpg

图表3

attachments/month_200612/3307202865.jpg

图表4

    你可能已经注意到,尽管我们已经将文本框的weight设置为1.0,但它并没有占据额外的可用的横向空间,即并没有在横向拉伸时始终占据整个底部行.
之 所以出现这个问题,是因为单元格和组件之间的区别还没有弄清楚,weightx和weighty值控制的是容器增长时单元格扩展的程度,但它们对各个单元 格中的组件并没有直接的效应.实际上,当窗口扩展时容器的所有单元格都增长了,包括文本框所在的一横行单元格.但文本栏根本没有增长.这是因为在所分配的 单元格内部,组件的增长是由GridBagConstraints对象的fill成员控制的,它可取下列值
GridBagConstraints.NONE 不增长
GridBagConstraints.HORIZONTAL 只横向增长
GridBagConstraints.VERTICAL 只纵向增长
GridBagConstraints.BOTH   双向增长
当你创建一个GridBagConstraints对象时,其fill值设置为NONE,因此在单元格增长时,单元格内部组件不会增长.

attachments/month_200612/5502697404.jpg

图表5

      ipadx和ipady两个属性:
在GridBagLayout 对容器进行布局时,它把每个组件的最小尺寸作为如何分配空间的一个约束条件来考虑;如果一个按钮的最小尺寸是30象素宽,20象素高,而相关联的约束对象 中,ipadx为4,ipady为2,那么按钮的最小尺寸将会成为横向38象素,纵向24象素.
      anchor属性:
当组件在横向或纵向上小于所分配到的单元格面积时,该字段会起作用.在这些情况下,anchor将决定组件如何在可用的空间中对齐.默认情况下,组件固定在单元格的中心,周围均匀分布多余空间.你也可以指定其他对齐方式:
GridBagConstraints.NORTH
GridBagConstraints.SOUTH
GridBagConstraints.NORTHWEST
GridBagConstraints.SOUTHWEST
GridBagConstraints.SOUTHEAST
GridBagConstraints.NORTHEAST
GridBagConstraints.EAST
GridBagConstraints.WEST

attachments/month_200612/8708736807.jpg

图表6

posted @ 2007-08-14 11:34 Willmove 阅读(390) | 评论 (0)编辑


2007年8月13日

     摘要: [目录][上一页][下一页] 第2章 Swing的基本知识   JMenu被Canvas这个组件挡住了,怎么办? 幸运的是,Swing提供了一个机制,它迫使弹出式菜单是重量组件,这样,它们就不会在重量组件下面弹出来。JPopupMenu类提供了一个static方法,该方法可决定弹出式菜单是重量的还是轻量的(注:某些弹出式菜单即可以指定为轻量的,也可以指定为重量的。)  JPopupMenu.set... 阅读全文

posted @ 2007-08-13 10:01 Willmove 阅读(479) | 评论 (1)编辑


2006年11月11日

     摘要:  几个月前因为虚拟主机服务商提供的在线 SQL Sever 管理工具总是出错,我就自己写了这个在线 SQL 管理小工具,但是因为是自己用,写得很简单。因此这个小工具是非常不完善的。使用它需要你具备一定的写 SQL语句的 能力。希望它能为您带来一点点便利,或者能给你增加一点点知识。本文作者:willmove作者主页:http://www.amuhouse.com页面代码如下:<%@P... 阅读全文

posted @ 2006-11-11 21:38 Willmove 阅读(316) | 评论 (1)编辑


2006年8月26日

作者:overred   来源:原创
URL 重写就是把URL地址重新改写(汗^_^)。

详情:http://www.microsoft.com/china/msdn/library/webservices/asp.net/URLRewriting.mspx

优点:把url缩短等

用法:1.下载ms的URLRewrite.dll,放到你的bin下

2.在web.config里设置如下:

<?xml version="1.0" encoding="utf-8" ?>
<configuration>

<configSections>

<section name="RewriterConfig" type="URLRewriter.Config.RewriterConfigSerializerSectionHandler, URLRewriter" />

</configSections>


<RewriterConfig>

<Rules>

<RewriterRule>
<LookFor>~/d(\d+)\.aspx</LookFor>
<SendTo>~/default.aspx?id=$1</SendTo>
</RewriterRule>

</Rules>

</RewriterConfig>

<system.web>


<httpHandlers>

<add verb="*" path="*.aspx"

type="URLRewriter.RewriterFactoryHandler, URLRewriter" />

</httpHandlers>



然后在cs里写:

private void Page_Load(object sender, System.EventArgs e)
{
// 在此处放置用户代码以初始化页面
Response.Write(Request.QueryString["id"]+"<BR>");
Response.Write("haha");
}

只要输入

localhost/overred/d123.aspx(注意:开头必须为d,后为数字)
其实这个d123.aspx是虚拟的,并不是实际存在的。只要符合格式就行。

他就会跳到http://localhost/overred/default.aspx

而且他在default里可以捕捉一些参数比如id,就是你的d后的数字(后必须为数字),这样你就可以显示id为123的文章。

在重写后的url里如果产生回发将会传递到d123.aspx,这样用户在点button时会看到哪个实际的地址,msdn上说的:但从用户的角度考虑,如果单击按钮时突然看到 URL 更改会使他们感到不安。

可见ms把客户捧为他的上帝!(真的?#¥%……—*)

继续引用ms:

出现这种情况的原因是:在呈现 Web 窗体时,它会将其操作属性直接设置为 Request 对象中文件路径的值。当然,在呈现 Web 窗体时,URL 已从 /Products/Beverages.aspx 重写为 ListProductsByCategory.aspx?CategoryID=1,这表明 Request 对象报告用户要访问 ListProductsByCategory.aspx?CategoryID=1。只需使服务器端窗体不呈现操作属性即可解决此问题。(默认情况下,如果窗体不包含操作属性,浏览器将会回发。)

不幸的是,Web 窗体不允许您明确指定操作属性,也不允许您设置某些属性以禁用操作属性的呈现。因此,我们必须自己来扩展 System.Web.HtmlControls.HtmlForm 类,覆盖 RenderAttribute() 方法并明确指出它不会呈现操作属性。

由于继承功能,我们可以获得 HtmlForm 类的所有功能,并且只需添加几行代码即可获得所需的行为。以下显示了自定义类的完整代码:

namespace ActionlessForm {
public class Form : System.Web.UI.HtmlControls.HtmlForm
{
protected override void RenderAttributes(HtmlTextWriter writer)
{
writer.WriteAttribute("name", this.Name);
base.Attributes.Remove("name");

writer.WriteAttribute("method", this.Method);
base.Attributes.Remove("method");

this.Attributes.Render(writer);

base.Attributes.Remove("action");

if (base.ID != null)
writer.WriteAttribute("id", base.ClientID);
}
}
}

已被覆盖的 RenderAttributes() 方法的代码仅包含 HtmlForm 类的 RenderAttributes() 方法的准确代码,而不设置操作属性。(我使用 Lutz Roeder 的 Reflector 来查看 HtmlForm 类的源代码。)

创建此类并对其进行编译之后,要在 ASP.NET Web 应用程序中使用它,应首先将其添加到 Web 应用程序的 References 文件夹中。然后,要使用它来代替 HtmlForm 类,只需在 ASP.NET 网页的顶部添加以下内容即可:

<%@ Register TagPrefix="skm" Namespace="ActionlessForm"
Assembly="ActionlessForm" %>

然后,将 <form runat="server">(如果有)替换为:

<skm:Form id="Form1" method="post" runat="server">

并将右边的 </form> 标记替换为:

</skm:Form>

以上的是继承个form,其实还有更简单的,就是继承page,这样你不需要在aspx页中改任何东西。
代码:
using System;
using System.IO;
using System.Web;
using System.Web.UI;

namespace URl
{
/**//// <summary>
/// 页面基类
/// </summary>
public class OLPage : Page
{
public OLPage()
{
}



/**//// <summary>
/// 重写默认的HtmlTextWriter方法,修改form标记中的value属性,使其值为重写的URL而不是真实URL。
/// </summary>
/// <param name="writer"></param>
protected override void Render(HtmlTextWriter writer)
{

if (writer is System.Web.UI.Html32TextWriter)
{
writer = new FormFixerHtml32TextWriter(writer.InnerWriter);
}
else
{
writer = new FormFixerHtmlTextWriter(writer.InnerWriter);
}

base.Render(writer);
}



}




internal class FormFixerHtml32TextWriter : System.Web.UI.Html32TextWriter
{
private string _url; // 假的URL

internal FormFixerHtml32TextWriter(TextWriter writer):base(writer)
{
_url = HttpContext.Current.Request.RawUrl;
}

public override void WriteAttribute(string name, string value, bool encode)
{
// 如果当前输出的属性为form标记的action属性,则将其值替换为重写后的虚假URL
if (_url != null && string.Compare(name, "action", true) == 0)
{
value = _url;
}
base.WriteAttribute(name, value, encode);
}
}



internal class FormFixerHtmlTextWriter : System.Web.UI.HtmlTextWriter
{
private string _url;
internal FormFixerHtmlTextWriter(TextWriter writer):base(writer)
{
_url = HttpContext.Current.Request.RawUrl;
}

public override void WriteAttribute(string name, string value, bool encode)
{
if (_url != null && string.Compare(name, "action", true) == 0)
{
value = _url;
}

base.WriteAttribute(name, value, encode);
}
}

}


你把他封装成dll,以后只要添加引用就可以拉!



ok ,it is so easy!

posted @ 2006-08-26 00:44 Willmove 阅读(213) | 评论 (2)编辑

作者:Dflying Chen http://dflying.cnblogs.com/

今天来到博客园两个月整了,其间得到了朋友们的大力支持,这两个月中我共计写了63篇随笔,得到了1402条评论。在博客园的这段时间里,我认识了不少朋友,在讨论中,也学到了不少知识。没什么好说的,总结一下发表的文章吧。

下面是我的有关Atlas的文章的目录,会随时保持更新。其中完成的部分以链接标出,未完成在计划中的部分仅仅有文字。朋友们有什么关于分类,关于内容的建议也请告诉我。我也有一些写成书出版的想法,无奈自己实在是没有这方面经验,还请各位给出建议,谢谢。

Atlas基础知识

  1. ASP.NET Atlas入门导引
  2. ASP.NET Atlas整体架构以及实现原理浅析
  3. ASP.NET Atlas XML Script入门

Atlas常见问题

  1. Atlas常见问题
  2. ASP.NET Atlas的相关问题请在本帖中提出

Atlas客户端简单控件

  1. ASP.NET Atlas简单控件介绍——Sys.Component基类与Sys.UI.Control基类
  2. ASP.NET Atlas简单控件介绍——InputControlTextBoxButtonCheckBox
  3. ASP.NET Atlas简单控件介绍——LabelHyperLinkSelectImage

Atlas客户端复杂控件

  1. 使用ASP.NET Atlas ListView控件显示列表数据
  2. 使用ASP.NET Atlas ItemView控件显示集合中的单个数据
  3. 使用 ASP.NET Atlas PageNavigator控件实现客户端分页导航
  4. 使用ASP.NET Atlas SortBehavior实现客户端排序
  5. 使用ASP.NET Atlas XSLTView控件用XSLT修饰并显示XML数据

Atlas客户端数据访问控件

  1. Atlas命名空间Sys.Data下控件介绍——DataSourceXMLDataSource
  2. Atlas命名空间Sys.Data下控件介绍——DataColumnDataRowDataTable
  3. Atlas命名空间Sys.Data下控件介绍——DataViewDataFilter

Atlas客户端面向对象组件

  1. ASP.NET Atlas中创建自定义的Transformer
  2. ASP.NET Atlas中创建自定义的Validator
  3. ASP.NET Atlas中创建自定义的Action
  4. ASP.NET Atlas中创建自定义的Behavior

Atlas客户端拖动支持

  1. 使用ASP.NET Atlas实现拖放(Drag & Drop)效果(上)
  2. 使用ASP.NET Atlas实现拖放(Drag & Drop)效果(下)

Atlas客户端用户验证,用户个性化组件

  1. ASP.NET Atlas中结合Membership进行身份验证
  2. ASP.NET Atlas中使用Profile Service保存用户信息

Atlas客户端控件开发

  1. 使用ASP.NET Atlas编写显示真实进度的ProgressBar(进度条)控件
  2. 使用ASP.NET Atlas开发In Place Editing输入控件
  3. 使用ASP.NET Atlas开发随输入内容自动调整行数的textarea
  4. 使用ASP.NET Atlas开发检测密码强度的自定义Behavior
  5. 使用ASP.NET Atlas开发实时验证用户名是否被注册的自定义Behavior

Atlas中调用Web Service

  1. ASP.NET Atlas中调用Web Service——介绍及简单应用
  2. ASP.NET Atlas中调用Web Service——处理错误,超时以及响应用户的取消操作
  3. ASP.NET Atlas中调用Web Service——批量调用以提高效率
  4. ASP.NET Atlas中调用Web Service——创建Mashup调用远端Web Service(基础知识以及简单示例)
  5. NEW!在ASP.NET Atlas中调用Web Service——创建Mashup调用远端Web Service(Yahoo!天气实例)
  6. NEW!在ASP.NET Atlas中调用Web Service——创建Mashup调用远端Web Service(Google Search实例)
  7. NEW!在ASP.NET Atlas中调用Web Service——应用Cache减小服务器开销
  8. NEW!在ASP.NET Atlas中调用Web Service——在页面加载时调用Web Service
  9. NEW!在ASP.NET Atlas中调用Web Service——直接在ASPX页面上暴露Web Method 

Atlas服务器端控件使用

  1. Atlas UpdatePanel简要介绍
  2. Atlas UpdatePanel使用技巧以及常见问题
  3. 使用ASP.NET Atlas AutoComplete BehaviorAutoComplete Extender实现自动完成功能(上)
  4. 使用ASP.NET Atlas AutoComplete BehaviorAutoComplete Extender实现自动完成功能(下)
  5. Atlas Control Toolkit Demo:从数据库中取得数据并填充CascadingDropDown控件

Atlas服务器端控件开发

  1. NEW!开发ASP.NET Atlas服务器端Extender控件——基本概念以及预先需求
  2. NEW!开发ASP.NET Atlas服务器端Extender控件——编写客户端Behavior
  3. NEW!开发ASP.NET Atlas服务器端Extender控件——编写服务器端Extender & Dflying近期动向
  4. NEW!开发ASP.NET Atlas服务器端Extender控件——在实际开发中使用编写好的控件

Atlas客户端实现源码分析

  1. Atlas揭秘 —— 绑定(Binding

Atlas调试,开发技巧

  1. ASP.NET AtlasJavaScript的扩展
  2. 调试Atlas客户端JavaScript脚本
  3. Atlas服务器端实现中推荐使用Web Service而不是Page Method

Atlas团队相关

  1. 欢迎加入ASP.NET Atlas学习团队!
  2. ASP.NET Atlas学习团队建议收集

Atlas资源相关

  1. ASP.NET Atlas April CTP发布
  2. Atlas Control ToolKit 发布
  3. DflyingAtlas相关介绍/教程文章合辑PDF下载
  4. "Atlas" Control Toolkit更新发布(Version 1.0.60504.0

测试:精明网 阿木小屋

posted @ 2006-08-26 00:34 Willmove 阅读(61) | 评论 (0)编辑

 

 

有关于URL的重写,本文也只是拿来主意。相继有MS的组件“URLRewriter”和在Global.asax里的“Application_BeginRequest()”编码方式,以及IIS里的ISAPI设置。

娜列下来,实现方法也都很简单。

 

方法一:MS组件

这里也不用详解了,相关请看:

http://www.microsoft.com/china/msdn/library/webservices/asp.net/URLRewriting.mspx

用法很简单,只需要把组件URLRewriter.dll拷到应用程序的bin目录下,然后在web.config下加入如下代码:

<configuration></configuration>中加入:

    

<configSections>         
      
<section name="RewriterConfig"  type="URLRewriter.Config.RewriterConfigSerializerSectionHandler, URLRewriter" />
     
</configSections>     
     
<RewriterConfig>
      
<Rules>
          
<RewriterRule>

                   
<LookFor>~/(\d{4})/(\d{2})/Default\.aspx</LookFor>

                   
<SendTo>~/Default.aspx?ID=$1</SendTo>

              
</RewriterRule>

          
</Rules>

     
</RewriterConfig>

 

然后在<system.web></system.web>中加入:

 

 

<httpHandlers>

   
<add verb="*" path="*.aspx" 

        type
="URLRewriter.RewriterFactoryHandler, URLRewriter" />

</httpHandlers>

 

最后在地址栏上键入:http://localhost/Test/2004/12/News.aspx

效果出来了。

上面的<LookFor>~/(\d{4})/(\d{2})/News\.aspx</LookFor>这句这正则表达式URL,即被重写的URL,而<SendTo>~/Default.aspx?ID=$1</SendTo>这一句为原始URL地址。其中的$1为第一个正则表达式值(上面例子为:2004),以此类推,第二个即为$2 

 

方法二:Application_BeginRequest()

在应用程序中新建一个XML文件,文件内容为:文件名ReWriter.config

<?xml version="1.0" encoding="utf-8" ?> 

<ReWriterUrls>

     
<rule>

          
<old>(.*)/News/(\d{4})/Default\.aspx</old>

          
<new>../../Default.aspx?id=$2&amp;type=$3</new>

     
</rule>

</ReWriterUrls>

Global.asax文件中的Application_BeginRequest(Object sender, EventArgs e)加入代码:

      

        try

              {

                   string path=Server.MapPath("~/ReWriter.config");

                   XPathDocument myXPathDocument = new XPathDocument(path);

                   XPathNavigator myXPathNavigator = myXPathDocument.CreateNavigator();

                   XPathNodeIterator myXPathNodeIterator = myXPathNavigator.Select ("//rule");

                   System.Text.RegularExpressions.Regex oReg;

                   string ReWriteUrl;

                   while (myXPathNodeIterator.MoveNext())

                   {

                        //oReg=new Regex(oNode.SelectSingleNode("url/text()").Value);

                        XPathNavigator nav2 = myXPathNodeIterator.Current.Clone();

                       string oldString="",newString="";

                        XPathNodeIterator it2 = nav2.Select("old");

                        while(it2.MoveNext())

                       {

                            oldString = it2.Current.Value;

                            break;

                       }

                       it2 = nav2.Select("new");

                        while(it2.MoveNext())

                       {

                            newString = it2.Current.Value;

                            break;

                       }

                        if(oldString != "" && newString != "")

                       {

                            oReg = new System.Text.RegularExpressions.Regex(oldString);

                            if(oReg.IsMatch(Request.Url.ToString()))

                            {

                                 ReWriteUrl = oReg.Replace(Request.Url.ToString(),newString);

                                 HttpContext.Current.RewritePath(ReWriteUrl);

                                 break;

                            }

                       }

                   }

              }

              catch

              {

              }

 

最后在地址栏上键入:http://localhost/Test/News/2004/Default.aspx

效果出来了。
转载自:http://www.cnblogs.com/hd/archive/2005/06/20/177633.html

posted @ 2006-08-26 00:29 Willmove 阅读(105) | 评论 (1)编辑


2006年5月24日

     摘要: ASP.NET基于角色的窗体安全认证机制作者:Willmove && Heath Stewart主页:http://www.amuhouse.comE-mail: willmove@gmail.com说明:两个月前我刚学 ASP.NET, 在 codeproject.com 看到题目叫 Role-based Security with Forms Authentication 的文... 阅读全文

posted @ 2006-05-24 20:39 Willmove 阅读(822) | 评论 (5)编辑


2006年5月18日

     摘要: 作者:Willmove主页:http://www.amuhouse.comE-mail: willmove@gmail.com声明:系作者原创作品,转载请注明出处。ASP.NET中一般都是使用SQL Server作为后台数据库。一般的ASP.NET数据库操作示例程序都是使用单独的数据访问,就是说每个页面都写连接到数据库,存取数据,关闭数据库的代码。这种方式带来了一些弊端,一个就是如果你的数据库改变... 阅读全文

posted @ 2006-05-18 22:59 Willmove 阅读(1142) | 评论 (5)编辑


2006年5月13日

在lulu师兄的blog看到这篇文章,挺实用的.收藏起来.

MS-SQL server数据库开发精典技巧

1.按姓氏笔画排序:
Select * From TableName order By CustomerName Collate Chinese_PRC_Stroke_ci_as

2.数据库加密:
select encrypt('原始密码')
select pwdencrypt('原始密码')
select pwdcompare('原始密码','加密后密码') = 1--相同;否则不相同 encrypt('原始密码')
select pwdencrypt('原始密码')
select pwdcompare('原始密码','加密后密码') = 1--相同;否则不相同

3.取回表中字段:
declare @list varchar(1000),@sql nvarchar(1000)
select @list=@list+','+b.name from sysobjects a,syscolumns b where a.id=b.id and a.name='表A'
set @sql='select '+right(@list,len(@list)-1)+' from 表A'
exec (@sql)

4.查看硬盘分区:
EXEC master..xp_fixeddrives

5.比较A,B表是否相等:
if (select checksum_agg(binary_checksum(*)) from A)
=
(select checksum_agg(binary_checksum(*)) from B)
print '相等'
else
print '不相等'

6.杀掉所有的事件探察器进程:
DECLARE hcforeach CURSOR GLOBAL FOR Select 'kill '+RTRIM(spid) FROM master.dbo.sysprocesses
Where program_name IN('SQL profiler',N'SQL 事件探查器')
EXEC sp_msforeach_worker '?'
'www.knowsky.com
7.记录搜索:
开头到N条记录
Select Top N * From 表
-------------------------------
N到M条记录(要有主索引ID)
Select Top M-N * From 表 Where ID in (Select Top M ID From 表) order by ID Desc
----------------------------------
N到结尾记录
Select Top N * From 表 order by ID Desc

8.如何修改数据库的名称:
sp_renamedb 'old_name', 'new_name'

9:获取当前数据库中的所有用户表
select Name from sysobjects where xtype='u' and status>=0

10:获取某一个表的所有字段
select name from syscolumns where id=object_id('表名')

11:查看与某一个表相关的视图、存储过程、函数
select a.* from sysobjects a, syscomments b where a.id = b.id and b.text like '%表名%'

12:查看当前数据库中所有存储过程
select name as 存储过程名称 from sysobjects where xtype='P'

13:查询用户创建的所有数据库
select * from master..sysdatabases D where sid not in(select sid from master..syslogins where name='sa')
或者
select dbid, name AS DB_NAME from master..sysdatabases where sid <> 0x01

14:查询某一个表的字段和数据类型
select column_name,data_type from information_schema.columns
where table_name = '表名'

[n].[标题]:
Select * From TableName order By CustomerName

[n].[标题]:
Select * From TableName order By CustomerName

posted @ 2006-05-13 01:25 Willmove 阅读(312) | 评论 (2)编辑


2006年5月10日

     为了更好的学习.net,在博客园申请了一个blog,感谢博客园。
     以后一定要把自己学习的心得体会写下来。

posted @ 2006-05-10 21:25 Willmove 阅读(98) | 评论 (0)编辑


posts - 10, comments - 13, trackbacks - 4, articles - 0

Copyright © Willmove