Archive

Archive for July, 2009

SET NOCOUNT { ON | OFF }讲解

July 7th, 2009 Tony hu No comments

当 SET NOCOUNT 为 ON 时,不返回计数(表示受Transact-SQL 语句影响的行数)。
当 SET NOCOUNT 为 OFF 时,返回计数。

即使当 SET NOCOUNT 为 ON 时,也更新 @@ROWCOUNT 函数。

当 SET NOCOUNT 为 ON 时,将不给客户端发送存储过程中的每个语句的 DONE_IN_PROC 信息。当使用 Microsoft® SQL Server™ 提供的实用工具执行查询时,在 Transact-SQL 语句(如 SELECT、INSERT、UPDATE 和 DELETE)结束时将不会在查询结果中显示”nn rows affected”。

如果存储过程中包含的一些语句并不返回许多实际的数据,则该设置由于大量减少了网络流量,因此可显著提高性能。SET NOCOUNT 设置是在执行或运行时设置,而不是在分析时设置。注释当SET NOCOUNT 为ON 时,不返回计数(表示受Transact-SQL 语句影响的行数)。当SET NOCOUNT 为OFF 时,返回计数。 

 结论:我们应该在存储过程的头部加上SET NOCOUNT ON 这样的话,在退出存储过程的时候加上SET NOCOUNT OFF这样的话,以达到优化.

源文1:http://blog.163.com/tl_jerome/blog/static/465007142007830114518525/
源文2:http://hi.baidu.com/livbirds/blog/item/72fc7dcb9420aefb53664f4c.html

Categories: Database, Sql Server Tags:

清明雨上

July 5th, 2009 Tony hu No comments

窗透初晓日照西桥云自摇
想你当年荷风微摆的衣角
木雕流金岁月涟漪七年前封笔
因为我今生挥毫只为你
雨打湿了眼眶年年倚井盼归堂
最怕不觉泪已拆两行
我在人间彷徨寻不到你的天堂
东瓶西镜放恨不能遗忘
又是清明雨上折菊寄到你身旁
把你最爱的歌来轻轻唱
想你在每个夜晚

远方有琴愀然空灵声声催天雨
涓涓心事说给自己听
月影憧憧烟火几重烛花红
红尘旧梦梦断都成空
雨打湿了眼眶年年倚井盼归堂
最怕不觉泪已拆两行
我在人间彷徨寻不到你的天堂
东瓶西镜放恨不能遗忘
又是清明雨上折菊寄到你身旁
把你最爱的歌来轻轻唱
我在人间彷徨寻不到你的天堂
东瓶西镜放恨不能遗忘
又是清明雨上折菊寄到你身旁
把你最爱的歌来轻轻唱

Categories: ^_^ Tags:

Gridview编辑状态下CheckBoxList和DropDownList数据绑定

July 3rd, 2009 Tony hu No comments

这两天老老大在泰国,我做的POP系统需要让我增加两个功能,其中就用到了在Gridview编辑状态下控件绑定数据库的问题,查询了相关资料后终于搞定了。将主要的代码写在这里,记录一下。

主要就是一个:
e.Row.RowState == DataControlRowState.Edit ||
            e.Row.RowState == (DataControlRowState.Alternate | DataControlRowState.Edit
我觉得主要是用来判断Gridview的行的状态,之前没有加这个条件,所以一直是没有绑定到对象之类的错误提示。 

主要的代码:

protected void GridView1_RowDataBound(object sender, GridViewRowEventArgs e)
{
    //判断是否是DataRow,以防止鼠标经过Header也有效果
    if (e.Row.RowType == DataControlRowType.DataRow)
    {
        //行的状态是: 编辑状态 或者 (交替行且是编辑状态)
        if (e.Row.RowState == DataControlRowState.Edit ||
            e.Row.RowState == (DataControlRowState.Alternate | DataControlRowState.Edit)
            )
        {
            //下面是绑定CheckBoxList,根据Gridview中的显示的值,更改CheckBoxList的选中状态
            Label lab = (Label)e.Row.FindControl(“TxtPrinter”);
            CheckBoxList chk = (CheckBoxList)e.Row.FindControl(“OperatorList”);                   
            string txtPrinter = lab.Text;
            if (txtPrinter != “”)
            {
                for (int i = 0; i < chk.Items.Count; i++)
                {
                    if (txtPrinter.IndexOf(chk.Items[i].Text.ToString()) >= 0)
                    {
                        chk.Items[i].Selected = true;
                    }
                }
            }
            //下面是绑定DropDownList,根据Gridview Cells中显示的内容查找数据库,如果存在相关信息就显示DropDownList,并绑定
            DropDownList printroll = (DropDownList)e.Row.FindControl(“PrintRollList”);
            TextBox txt_printroll = ((TextBox)e.Row.FindControl(“txtPrintroll”));
            BLL.printroll bll = new BLL.printroll();
            string pid = bll.GetID(txt_printroll.Text.Trim());
            if (pid == “–”)
            {
                printroll.Visible = false;
            }
            else
            {
                DataTable dt = bll.GetChildList(Convert.ToInt32(pid));
                if (dt.Rows.Count != 0)
                {
                    printroll.DataSource = dt;
                    printroll.DataTextField = dt.Columns["printroll"].ToString();
                    printroll.DataValueField = dt.Columns["printroll"].ToString();
                    printroll.DataBind();

                    printroll.Items.Insert(0, “–PrintRoll–”);
                    printroll.Items[0].Value = “0″;
                    printroll.Visible = true;
                }
            }                   
        }
    }

}

Categories: ASP.net, Web Tags:

SQL Union和SQL Union All用法介绍

July 1st, 2009 Tony hu No comments
今天遇到一个问题,将一个表中的两列(Column A, Column B) 数据合并一列,而且需要将Column B内容接在Column A的后面,感谢下面的博文帮我解决了这个问题,转来和大家一起分享。——Tony Hu

 

UNION 指令的目的是将两个 SQL 语句的结果合并起来。从这个角度来看, UNIONJOIN 有些许类似,因为这两个指令都可以由多个表格中撷取资料。 UNION 的一个限制是两个 SQL 语句所产生的栏位需要是同样的资料种类。另外,当我们用 UNION这个指令时,我们只会看到不同的资料值 (类似 SELECT DISTINCT)。 union只是将两个结果联结起来一起显示,并不是联结两个表…………
假设我们有以下的两个表格
Store_Information 表格

store_name Sales Date
Los Angeles $1500 Jan-05-1999
San Diego $250 Jan-07-1999
Los Angeles $300 Jan-08-1999
Boston $700 Jan-08-1999
Internet Sales 表格

Date Sales
Jan-07-1999 $250
Jan-10-1999 $535
Jan-11-1999 $320
Jan-12-1999 $750
而我们要找出来所有有营业额 (sales) 的日子。要达到这个目的,我们用以下的 SQL 语句:
SELECT Date FROM Store_Information
UNION
SELECT Date FROM Internet_Sales
结果:
Date
Jan-05-1999
Jan-07-1999
Jan-08-1999
Jan-10-1999
Jan-11-1999
Jan-12-1999
有一点值得注意的是,如果我们在任何一个 SQL 语句 (或是两句都一起) 用 “SELECT DISTINCT Date” 的话,那我们会得到完全一样的结果。

SQL Union All
UNION ALL 这个指令的目的也是要将两个 SQL 语句的结果合并在一起。 UNION ALLUNION 不同之处在于 UNION ALL 会将每一笔符合条件的资料都列出来,无论资料值有无重复。
UNION ALL
我们用和上一页同样的例子来显示出 UNION ALLUNION 的不同。同样假设我们有以下两个表格,

Store_Information 表格

store_name Sales Date
Los Angeles $1500 Jan-05-1999
San Diego $250 Jan-07-1999
Los Angeles $300 Jan-08-1999
Boston $700 Jan-08-1999
Internet Sales 表格

Date Sales
Jan-07-1999 $250
Jan-10-1999 $535
Jan-11-1999 $320
Jan-12-1999 $750
而我们要找出有店面营业额以及网络营业额的日子。要达到这个目的,我们用以下的 SQL 语句:
SELECT Date FROM Store_Information
UNION ALL
SELECT Date FROM Internet_Sales
结果:
Date
Jan-05-1999
Jan-07-1999
Jan-08-1999
Jan-08-1999
Jan-07-1999
Jan-10-1999
Jan-11-1999
Jan-12-1999

 

来源:http://brucezheng.javaeye.com/blog/70300

Categories: Database, Sql Server Tags: ,