Weather

衣带渐宽终不悔,为伊消得人憔悴
随笔 - 5, 文章 - 0, 评论 - 38, 引用 - 1
数据加载中……

2006年4月13日

T-SQL小技巧:做项目时遇到我就会记在这里(20060415日11点更新)

近来才发现,数据库编程多利用一些数据库技术能简化好多的代码并且提高效率。

CREATE PROCEDURE Exist_A 
@AREA nchar(4)

AS

SELECT 
FKEY,TYPE
='缺收'------------(1)
FROM 
[T_INFO_TEMP_QJ_ZDZRJK] 
WHERE 
[MS] = @AREA 

UNION----------------------(2)

SELECT 
FKEY,TYPE
='缺发'
FROM 
[T_INFO_TEMP_QJ_ZDZSJK] 
WHERE 
[MS] = @AREA

GO

这段代码创建一个存储过程Exist_A,从收和发两个库中取出纪录和在一起返回。我在每个库中只取出一个关键字FKEY字段,TYPE是不存在的字段,但是我还需要标示返回的记录中哪个是来自缺收的库中、哪个是来自缺发的库中。
(1)TYPE='缺收'人为的在返回的结果集中加了一个字段,字段名是TYPE、字段值是'缺收'
如:返回的结果可能是
                                      FKEY                  TYPE
                                 200604130001            缺收
                                 200604130002            缺收
                                 200604130001            缺发

(2)缺收和缺发是分别存在两个库中,我需要知道全部的缺,就用到了联合UNION,它是把两个Select语句的结果集合并起来。
----------------------------------------------------------------------------------------------------20060413日14点更新
取得时间的函数:
    函数                                                            结果
getdate()---------------------------------------2006-04-13 17-22-34
year(getdate())--------------------------------2006
year('2006-04-13')----------------------------2006
month(getdate())------------------------------04
month('2006-04-13')--------------------------04
day(getdate())---------------------------------13
day('2006-04-13')----------------------------13
getname(hh,getdate())-----------------------17
datediff(dd,'2006-04-13','2006-04-16')---3//相差3天
datediff(dd,'2006-04-13','2008-04-16')---2//相差2年
dateadd(year,10,'2006-04-13')--------------2016-04-13
----------------------------------------------------------------------------------------------------20060413日17点更新
--1.给表中字段添加描述信息
CREATE   table T2 (id int , name char (20))
GO
EXEC   sp_addextendedproperty 'MS_Description''Employee ID''user', dbo, 'table', T2, 'column', id

EXEC   sp_updateextendedproperty 'MS_Description''this is a test''user', dbo, 'table', T2, 'column', id

--2.修改数据库名称
EXEC sp_renamedb 'old_db_name''new_db_name'

--3.修改数据表名称和字段名称
EXEC sp_rename 'old_table_name''new_table_name'--修改数据表名称
EXEC sp_rename 'table_name.[old_column_name]''new_column_name''COLUMN'--修改字段名称

--4.给定存储过程名,获取存储过程内容
exec sp_helptext sp_name
----------------------------------------------------------------------------------------------------20060414日21点更新
读取磁盘文件
if exists (select * from tempdb..sysobjects where id = object_id(N'tempdb..#T'))
   drop table [#T]

Create table #T(id int identity(1,1) not null, remark varchar(8001) null)
Insert into #T
Exec master.dbo.xp_cmdshell 'type c:\data.txt'
select * from #T
----------------------------------------------------------------------------------------------------20060414日22点更新
http://billchen.cnblogs.com/category/34157.html
里面有
根据SortOrder控制排序的存储过程、NULL值相关两篇文章
----------------------------------------------------------------------------------------------------20060415日11点更新

posted @ 2006-04-13 14:07 ZhangBUG 阅读(112) | 评论 (0)编辑

第一贴:庆祝内蒙古.NET俱乐部成立!

首先感谢dudu给我们提供了一个平台!
这里成立的初衷是给我们在内蒙的.NET爱好者提供一个网上交流的平台,期待您的加入!
想加入的朋友请在下面回复,谢谢!

为了不再让新加的朋友等待,想加的朋友可以加我的QQ:3737546  MSN:zhangbug.net@hotmail.com

posted @ 2006-04-13 13:07 ZhangBUG 阅读(239) | 评论 (38)编辑

2006年4月12日

WebCast:ASP.NET中的错误处理和程序优化

今天观看了邵志东老师的ASP.NET中的错误处理和程序优化讲座,主要内容包括
• 错误类型以及处理方式
• 提高数据访问性能
• 服务器控件的使用
• 缓存的使用
• 提高性能的实用技巧
最后总结时邵志东老师为我们提出了以下几点提高性能的建议
• 尽量用SQL返回DataGrid需要绑定的DataSet,尽量不要对DataSet进行二次加工,特别不要对DataSet进行大量删除,实践证明这很慢。不如复制部分数据。
• 尽量把查询数据的数据库操作次数压缩到最少,尽量1-2次数据库操作就可完成;
• 注意优化数据库查询操作
• 不要在页面加载时默认选择全部数据,尽管可以方便后续操作,但用户会以为“还没有操作就这么慢”
• 建议尽量用比较高效的SQL代替后续复杂的DataSet二次加工提高性能的实用技巧
• 仅在需要的时候打开数据库连接
• 一旦数据库操作完毕,一定关闭连接
• 在关闭连接时记得删除临时对象
• 在关闭连接前,确保关闭任何用户定义事务
• 显示非交互性数据,使用SQLDataReader可以获得最佳性能
• 注意共享那些经过复杂处理或漫长查询才得到的数据
• 在页面跳转时记得终止当前页面的处理
• 有大量连接的字符串操作不要使用 ,改用StringBuilder

本次课程是WebCast中ASP.NET开发实践系列课程中的一讲。

posted @ 2006-04-12 01:11 ZhangBUG 阅读(152) | 评论 (1)编辑

C#2.0:调用存储过程

    做项目的时候用到了,.NET1.1和2.0版本的使用方法也略有不同,记在这里。

        string ConnStr = System.Configuration.ConfigurationManager.AppSettings["ConnectionString"];        
        SqlConnection conn 
= new SqlConnection(ConnStr);
        SqlCommand cmd 
= new SqlCommand();
        cmd.Connection 
= conn;
        conn.Open();
        cmd.CommandText 
= "[EachRows_M]";
        cmd.CommandType 
= System.Data.CommandType.StoredProcedure;
        cmd.Parameters.Add(
"@ETIME", SqlDbType.VarChar, 3);
        cmd.Parameters[
"@ETIME"].Value = ETIME;
        SqlDataAdapter adapter 
= new SqlDataAdapter(cmd);
        DataSet MyDs 
= new DataSet();
        adapter.Fill(MyDs);
        conn.Close();

posted @ 2006-04-12 00:40 ZhangBUG 阅读(200) | 评论 (0)编辑

C#2.0:DataSet和XML之间的操作

    不知道这样是不是走了弯路,不过总算是一种方法。我应用的时候是用这个方法返回一个DataSet,用AJAX.NET控件在客户端用JS接收,不知道为什么用DataSet的Merge(FoundRows)方法而不通过DataTable填充时在客户端接收出错,提示Table.0.Rows不存在或不是对象。
    仅供参考。
        //读取XML文件到DataSet
            DataSet ds = new DataSet();
            MyXmlPath 
= "C:\\Message.xml";
            FileStream fs 
= new FileStream(MyXmlPath, FileMode.Open);
            ds.ReadXml(fs, XmlReadMode.ReadSchema);
            fs.Close();
        
//筛选行存入DataSet
            DataRow[] FoundRows;
            
string Expression = "AREA IN ('" + Area + "','')";
            
string SortOrder = "DAY DESC";
            FoundRows 
= ds.Tables[0].Select(Expression, SortOrder);
            DataTable Mydt 
= new DataTable();
            Mydt.Columns.Add(
"FKEY");
            Mydt.Columns.Add(
"IIIII");
            Mydt.Columns.Add(
"NAME");
            Mydt.Columns.Add(
"AREA");
            Mydt.Columns.Add(
"X");
            Mydt.Columns.Add(
"Y");
            Mydt.Columns.Add(
"BKIND");
            Mydt.Columns.Add(
"SKIND");
            Mydt.Columns.Add(
"DAY");
            Mydt.Columns.Add(
"ETIME");
            Mydt.Columns.Add(
"TYPE");
            Mydt.Columns.Add(
"MAIN");
            Mydt.Columns.Add(
"TTIME");
            
foreach (DataRow dr in FoundRows)
            
{
                Mydt.Rows.Add(dr.ItemArray);
            }

            DataSet Myds 
= new DataSet();
            Myds.Tables.Add(Mydt);
        
//保存到XML文件
            Myds.WriteXml(MyXmlPath, XmlWriteMode.WriteSchema);

posted @ 2006-04-12 00:38 ZhangBUG 阅读(316) | 评论 (0)编辑