最近要吧decimal d=15.05000 转化成字符串,但是要去掉后面多余的0,于是发现了ToString("g0");
还发现了其他很多格式化字符串的方法。
2.5ToString("C")           ¥2.50
25.ToString("D5")         00025
25000.ToString("E")      2.500000E+005
2500000.ToString("N")  2,500,000.00X
255.ToString("X")         FF

formatCode 是可选的格式化代码字符串。(详细内容请搜索“格式化字符串”查看)

必须用“{”和“}”将格式与其他字符分开。如果恰好在格式中也要使用大括号,可以用连续的两个大括号表示一个大括号,即: “{{”或者“}}”。

常用格式举例:

(1) int i=12345;

this.textBox1.Text=i.ToString();

//结果 12345(this指当前对象,或叫当前类的实例)

this.textBox2.Text=i.ToString("d8");

//结果 00012345

(2) int i=123;

double j=123.45;

string s1=string.Format("the value is {0,7:d}",i);

string s2=string.Format("the value is {0,7:f3}",j);

this.textBox1.Text=s1 ;

//结果 the value is 123

this.textBox2.Text=s2;

//结果 the value is 123.450

(3)double i=12345.6789;

this.textBox1.Text=i.ToString("f2"); //结果 12345.68

this.textBox2.Text=i.ToString("f6");

//结果 12345.678900

(4)double i=12345.6789;

this.textBox1.Text=i.ToString("n"); //结果 12,345.68

this.textBox2.Text=i.ToString(“n4”); //结果 12,345.6789

(5)double i=0.126;

string s=string.Format("the value is {0:p}",i);

this.textBox1.Text=i.ToString("p"); //结果 12.6%

this.textBox2.Text=s; //结果 the value is 12.6%

(6) DateTime dt =new DateTime(2003,5,25);

this.textBox1.Text=dt.ToString("yy.M.d");

//结果 03.5.25

this.textBox2.Text=dt.ToString(“yyyy年M月”);

//结果 2003年5月

Convert.ToDateTime("2005/12/22 22:22:22").ToString("yyyy/MM/dd HH:mm:ss")
"2005/12/22 22:22:22"

(7) int i=123;

double j=123.45;

string s=string.Format("i:{0,-7},j:{1,7}",i,j);

//-7表示左对齐,占7位

this.textBox1.Text=s ;

//结果i:123 ,j: 123.45 

 

 DateTime.ToString()用法详解

我们经常会遇到对时间进行转换,达到不同的显示效果,默认格式为:2006-6-6 14:33:34
如果要换成成200606,06-2006,2006-6-6或更多的格式该怎么办呢?
这里将要用到:DateTime.ToString的方法(String, IFormatProvider)
示例:
using System;
using System.Globalization;
String format="D";
DateTime date=DataTime.Now;
Response.Write(date.ToString(format, DateTimeFormatInfo.InvariantInfo));
结果输出
Thursday, June 16, 2006

在这里列出了参数format格式详细用法
=======================
格式字符 关联属性/说明
d ShortDatePattern
D LongDatePattern
f 完整日期和时间(长日期和短时间)
F FullDateTimePattern(长日期和长时间)
g 常规(短日期和短时间)
G 常规(短日期和长时间)
m、M MonthDayPattern
r、R RFC1123Pattern
s 使用当地时间的 SortableDateTimePattern(基于 ISO 8601)
t ShortTimePattern
T LongTimePattern
u UniversalSortableDateTimePattern 用于显示通用时间的格式
U 使用通用时间的完整日期和时间(长日期和长时间)
y、Y YearMonthPattern

下表列出了可被合并以构造自定义模式的模式
========================================
这些模式是区分大小写的;例如,识别“MM”,但不识别“mm”。如果自定义模式包含空白字符或用单引号括起来的字符,则输出字符串页也将包含这些字符。未定义为格式模式的一部分或未定义为格式字符的字符按其原义复制。

格式模式 说明 :
d 月中的某一天。一位数的日期没有前导零。
dd 月中的某一天。一位数的日期有一个前导零。
ddd 周中某天的缩写名称,在 AbbreviatedDayNames 中定义。
dddd 周中某天的完整名称,在 DayNames 中定义。
M 月份数字。一位数的月份没有前导零。
MM 月份数字。一位数的月份有一个前导零。
MMM 月份的缩写名称,在 AbbreviatedMonthNames 中定义。
MMMM 月份的完整名称,在 MonthNames 中定义。
y 不包含纪元的年份。如果不包含纪元的年份小于 10,则显示不具有前导零的年份。
yy 不包含纪元的年份。如果不包含纪元的年份小于 10,则显示具有前导零的年份。
yyyy 包括纪元的四位数的年份。
gg 时期或纪元。如果要设置格式的日期不具有关联的时期或纪元字符串,则忽略该模式。
h 12 小时制的小时。一位数的小时数没有前导零。
hh 12 小时制的小时。一位数的小时数有前导零。
H 24 小时制的小时。一位数的小时数没有前导零。
HH 24 小时制的小时。一位数的小时数有前导零。
m 分钟。一位数的分钟数没有前导零。
mm 分钟。一位数的分钟数有一个前导零。
s 秒。一位数的秒数没有前导零。
ss 秒。一位数的秒数有一个前导零。
f 秒的小数精度为一位。其余数字被截断。
ff 秒的小数精度为两位。其余数字被截断。
fff 秒的小数精度为三位。其余数字被截断。
ffff 秒的小数精度为四位。其余数字被截断。
fffff 秒的小数精度为五位。其余数字被截断。
ffffff 秒的小数精度为六位。其余数字被截断。
fffffff 秒的小数精度为七位。其余数字被截断。
t 在 AMDesignator 或 PMDesignator 中定义的 AM/PM 指示项的第一个字符(如果存在)。
tt 在 AMDesignator 或 PMDesignator 中定义的 AM/PM 指示项(如果存在)。
z 时区偏移量(“+”或“-”后面仅跟小时)。一位数的小时数没有前导零。例如,太平洋标准时间是“-8”。
zz 时区偏移量(“+”或“-”后面仅跟小时)。一位数的小时数有前导零。例如,太平洋标准时间是“-08”。
zzz 完整时区偏移量(“+”或“-”后面跟有小时和分钟)。一位数的小时数和分钟数有前导零。例如,太平洋标准时间是“-08:00”。
: 在 TimeSeparator 中定义的默认时间分隔符。
/ 在 DateSeparator 中定义的默认日期分隔符。
% c 其中 c 是格式模式(如果单独使用)。如果格式模式与原义字符或其他格式模式合并,则可以省略“%”字符。
\ c 其中 c 是任意字符。照原义显示字符。若要显示反斜杠字符,请使用“\\”。

只有上面第二个表中列出的格式模式才能用于创建自定义模式;在第一个表中列出的标准格式字符不能用于创建自定义模式。自定义模式的长度至少为两个字符;例如,

DateTime.ToString( "d") 返回 DateTime 值;“d”是标准短日期模式。
DateTime.ToString( "%d") 返回月中的某天;“%d”是自定义模式。
DateTime.ToString( "d ") 返回后面跟有一个空白字符的月中的某天;“d”是自定义模式。

比较方便的是,上面的参数可以随意组合,并且不会出错,多试试,肯定会找到你要的时间格式
如要得到2005年06月 这样格式的时间
可以这样写:
date.ToString("yyyy年MM月", DateTimeFormatInfo.InvariantInfo)
如此类推.

下面列出一些Asp.net中具体的日期格式化用法:
============================================
1.绑定时格式化日期方法:


2.数据控件如DataGrid/DataList等的件格式化日期方法:
e.Item.Cell[0].Text = Convert.ToDateTime(e.Item.Cell[0].Text).ToShortDateString();

3.用String类转换日期显示格式:
String.Format( "yyyy-MM-dd ",yourDateTime);

4.用Convert方法转换日期显示格式:
Convert.ToDateTime("2005-8-23").ToString

("yyMMdd",System.Globalization.DateTimeFormatInfo.InvariantInfo); //支持繁体数据库

5.直接用ToString方法转换日期显示格式:
DateTime.Now.ToString("yyyyMMddhhmmss");
DateTime.Now.ToString("yyyy/MM/dd hh:mm:ss")

6.只显示年月
DataBinder.Eval(Container.DataItem,"starttime","{0:yyyy-M}")

7.显示时间所有部分,包括:年月日时分秒

DataFormatString='{0:yyyy-MM-dd HH24:mm:ss}'>



用DateTime.ToString(string format)输出不同格式的日期
 

 

DateTime.ToString()函数有四个重载。一般用得多的就是不带参数的那个了。殊不知,DateTime.ToString(string format)功能更强大,能输出不同格式的日期。以下把一些情况罗列出来,供大家参考。有些在MSDN上有的就没有列出来了。

1.         y代表年份,注意是小写的y,大写的Y并不代表年份。

2.         M表示月份。

3.         d表示日期,注意D并不代表什么。

4.         hH表示小时,h用的是12小时制,H用的是24小时制。

5.         m表示分钟。

6.         s表示秒。注意S并不代表什么。

格式

输出

示例

y

7

string yy = DateTime.Now.ToString("y-MM")

yy="7-05"

yy

07

string yy = DateTime.Now.ToString("yy-MM")

yy="07-05"

yyy或更多的y

1984

string yy = DateTime.Now.ToString("yyyy");

yy="2007"

M

5.

string mon = DateTime.Parse("1984-05-09")ToString("yyyy-M")

mon = "1984-5"

MM

05.

string mon = DateTime.Parse("1984-05-09")ToString("M")

mon = "05"

MMM

如果是中文版的操作系统,则会输出:五月.

如果是英文操作系统,则输入月份前三个字母的简写:May

string mon = DateTime.Parse("2006-07-01").ToString("MMM")

英文版操作系统:Jul

中文版操作系统:七月

MMMM或更多的M

如果是中文版的操作系统,则会输出:五月.

如果是英文操作系统,则输入月份的全写

string mon = DateTime.Parse("2006-07-01").ToString("MMM")

英文版操作系统:July

中文版操作系统:七月

日期或星期

d

9

string dd= DateTime.Parse("1984-05-09")ToString("d")

dd= "9"

 

dd

09

string dd= DateTime.Parse("1984-05-09")ToString("dd")

dd= "09"

ddd

如果是中文版的操作系统,则会输出星期,如星期三。.

如果是英文操作系统,则输出星期的简写:如

Wed

string dd = DateTime.Parse("2006-07-01").ToString("ddd")

英文版操作系统:Wed

中文版操作系统:星期三

dddd或更多的d

如果是中文版的操作系统,则会输出星期,如星期三。.

如果是英文操作系统,则输出星期:如

Wednesday

string dd = DateTime.Parse("2006-07-01").ToString("dddd")

英文版操作系统:Wednesday

中文版操作系统:星期三

小时

h

小时范围:1-12

string hh = DateTime.Now.ToString(“h”);

hh = 8

hh或更多的h

小时范围:1-12

string hh = DateTime.Now.ToString(“hh”);

hh = 08

H

小时范围:0-23

string hh = DateTime.Now.ToString(“yyyy-H”);

hh = 2006-8

HH或更多的H

小时范围:0-23

string hh = DateTime.Now.ToString(“yyyy-HH”);

hh = 2006-08

string hh = DateTime.Pare(“2006-7-4 18:00:00”).ToString(“yyyy-HH”);

hh = 2006-18

分钟

m

6

string mm = DateTime.Now.ToString("yyyy-MM-dd-m");

mm = “2006-07-01-6”;

mm或更多的m

06

string mm = DateTime.Now.ToString("yyyy-MM-dd-mm");

mm = “2006-07-01-06”;

s

6

string mm = DateTime.Now.ToString("yyyy-MM-dd-s");

mm = “2006-07-01-6”;

ss或更多的s

06

string mm = DateTime.Now.ToString("yyyy-MM-dd-ss");

mm = “2006-07-01-06”;


 
posted @ 2007-11-30 16:04 唐德兵 阅读(86) | 评论 (2)编辑
http://msdn2.microsoft.com/zh-cn/library/system.data.datacolumn.expression(VS.80).aspx

详情见上面的网站!

private void CalcColumns()
{
    DataTable table 
= new DataTable ();
 
    
// Create the first column.
    DataColumn priceColumn = new DataColumn();
    priceColumn.DataType 
= System.Type.GetType("System.Decimal");
    priceColumn.ColumnName 
= "price";
    priceColumn.DefaultValue 
= 50;
     
    
// Create the second, calculated, column.
    DataColumn taxColumn = new DataColumn();
    taxColumn.DataType 
= System.Type.GetType("System.Decimal");
    taxColumn.ColumnName 
= "tax";
    taxColumn.Expression 
= "price * 0.0862";
     
    
// Create third column.
    DataColumn totalColumn = new DataColumn();
    totalColumn.DataType 
= System.Type.GetType("System.Decimal");
    totalColumn.ColumnName 
= "total";
    totalColumn.Expression 
= "price + tax";

    
// Add columns to DataTable.
    table.Columns.Add(priceColumn);
    table.Columns.Add(taxColumn);
    table.Columns.Add(totalColumn);

    DataRow row 
= table.NewRow();
    table.Rows.Add(row);
    DataView view 
= new DataView(table);
    dataGrid1.DataSource 
= view;
}


posted @ 2007-10-24 21:54 唐德兵 阅读(172) | 评论 (0)编辑
--返回指定日期的第一天
select dateadd(day,1 - day('2007-10-30'),'2007-10-30'

--返回指定日期的下一天
select dateadd(day,1,'2007-10-31')
posted @ 2007-10-19 17:05 唐德兵 阅读(23) | 评论 (0)编辑
http://www.cnblogs.com/dlwang2002/archive/2006/12/08/585093.html

这是一个在.net2.0里面新出现的类,用于执行后台比较长的任务而又想能和UI有点操作的应用里面。

普通情况下,你点击一个按钮,去后台执行一个process,如果你想得到结果,就得等这个process结束。通常,可以使用异步执行回调来解决这个问题。现在,backgroundworker给我们实现了这样一种简单的封装,可以把我们的复杂任务交给新的线程去处理,然后继续UI线程。等到我们的任务需要通知UI做什么事情的时候,可以report一下,在其事件里就可以直接使用UI控件,而不需要Control.Invoke去掉用之。

有这样一个应用:客户需要把大量数据(需要执行3天)copy到另外一个机器,中间想能看到有多少数据被复制/失败等(实时报道)。

在这个例子里面,我们的界面可能非常简单:一个开始按钮,一个结束按钮,一个richtextBox来显示运行记录。但是后台执行可能就会比较棘手。如果简单的执行,并且报告,那么整个界面将失去响应(都在同一个线程里面,造成忙碌)。这时候,可以使用这个backgroundworker了。它可以在后台执行,并且报告给界面实时信息,界面不会失去响应。

   先介绍一下backgroundworker的几个属性/方法

   .WorkerReportsProgress:是否可以向外报告进度。

   .WorkerSupportsCancellation :是否可以暂停任务

   . CancellationPending: 是否正在暂停中

   . RunWorkerAsync() : 开始执行任务。触发DoWork事件

   . ReportProgress(int percentPrgress,object userState) : 向外报告进度。触发ProgressChanged事件.其中,参数可以在ProgressChangedEventArgs(worker_ProgressChanged(object sender, ProgressChangedEventArgs e))中得到

   . CancelAsync() :取消(暂停)执行。

   事件

    worker.DoWork += new DoWorkEventHandler(worker_DoWork);//执行任务

 worker.RunWorkerCompleted += new RunWorkerCompletedEventHandler(worker_RunWorkerCompleted);//任务结束时

   worker.ProgressChanged += new ProgressChangedEventHandler(worker_ProgressChanged)//报告状态

 

   按照上边的资料,我们这个应用就可以这样处理之

   formDisplay是用于显示实时状态的窗口。有DisplyMessage方法来显示信息到界面

   在Hanlder类(处理文件copy的)里面:

       static void worker_ProgressChanged(object sender, ProgressChangedEventArgs e)

        {

            //show the message on windows

           formDisplay.DisplyMessage(copy, e.UserState.ToString());//show message.

        }

        static void worker_RunWorkerCompleted(object sender, RunWorkerCompletedEventArgs e)

        {

             string msg = "JOB copy : have been completed";

             formDisplay.DisplyMessage(msg);//show message

        }

         

        static void worker_DoWork(object sender, DoWorkEventArgs e)

        {

            for()

            {

                 //copying

                (sender as BackgroundWorker). ReportProgress(0,xxx complete);//report

}

        }

这样构造的程序里面,才不会出现UI失去响应。

当然,通过写自己的异步处理也可以实现,功能更强大。只不过这个用起来更简单。

至于backgroundworker是怎么实现的呢?这里有人已经做出了一些解答:

http://blog.joycode.com/sunmast/archive/2006/03/02/about_system_componentmodel_asyncoperation.aspx

posted @ 2007-10-11 18:34 唐德兵 阅读(20) | 评论 (0)编辑

游标用于对结果集进行处理,主要是提取结果集里面的数据。

@@FETCH_STATUS

返回被 FETCH 语句执行的最后游标的状态,而不是任何当前被连接打开的游标的状态。

返回值          描述
0                    FETCH 语句成功。
-1                   FETCH 语句失败或此行不在结果集中。
-2                  被提取的行不存在。


下面的示例显示在一个基于游标的进程中 CLOSE 语句的正确位置。


USE pubs
GO
DECLARE authorcursor CURSOR FOR 
SELECT au_fname, au_lname FROM authorsORDER BY au_fname, au_lname
OPEN authorcursor                 --打开游标FETCH NEXT FROM authorcursor
WHILE @@FETCH_STATUS = 0          --提取成功BEGIN   
FETCH NEXT FROM authorcursor 
END
CLOSE authorcursor                --关闭游标
DEALLOCATE authorcursor           --删除游标引用GO

FETCH

从 Transact-SQL 服务器游标中检索特定的一行。

语法

FETCH
        [ [ NEXT | PRIOR | FIRST | LAST
                | ABSOLUTE { n | @nvar }
                | RELATIVE { n | @nvar }
            ]
            FROM
        ]
{ { [ GLOBAL ] cursor_name } | @cursor_variable_name }
[ INTO @variable_name [ ,...n ] ]

参数

NEXT

返回紧跟当前行之后的结果行,并且当前行递增为结果行。如果 FETCH NEXT 为对游标的第一次提取操作,则返回结果集中的第一行。NEXT 为默认的游标提取选项。

PRIOR

返回紧临当前行前面的结果行,并且当前行递减为结果行。如果 FETCH PRIOR 为对游标的第一次提取操作,则没有行返回并且游标置于第一行之前。

FIRST

返回游标中的第一行并将其作为当前行。

LAST

返回游标中的最后一行并将其作为当前行。

ABSOLUTE {n | @nvar}

如果 n@nvar 为正数,返回从游标头开始的第 n 行并将返回的行变成新的当前行。如果 n@nvar 为负数,返回游标尾之前的第 n 行并将返回的行变成新的当前行。如果 n@nvar 为 0,则没有行返回。n 必须为整型常量且 @nvar 必须为 smallinttinyint int

RELATIVE {n | @nvar}

如果 n@nvar 为正数,返回当前行之后的第 n 行并将返回的行变成新的当前行。如果 n@nvar 为负数,返回当前行之前的第 n 行并将返回的行变成新的当前行。如果 n@nvar 为 0,返回当前行。如果对游标的第一次提取操作时将 FETCH RELATIVE 的 n@nvar 指定为负数或 0,则没有行返回。n 必须为整型常量且 @nvar 必须为 smallinttinyint int

GLOBAL

指定 cursor_name 指的是全局游标。

cursor_name

要从中进行提取的开放游标的名称。如果同时有以 cursor_name 作为名称的全局和局部游标存在,若指定为 GLOBAL 则 cursor_name 对应于全局游标,未指定 GLOBAL 则对应于局部游标。

@cursor_variable_name

游标变量名,引用要进行提取操作的打开的游标。

INTO @variable_name[,...n]

允许将提取操作的列数据放到局部变量中。列表中的各个变量从左到右与游标结果集中的相应列相关联。各变量的数据类型必须与相应的结果列的数据类型匹配或是结果列数据类型所支持的隐性转换。变量的数目必须与游标选择列表中的列的数目一致。

注释

如果 SCROLL 选项未在 SQL-92 样式的 DECLARE CURSOR 语句中指定,则 NEXT 是唯一受支持的 FETCH 选项。如果在 SQL-92 样式的 DECLARE CURSOR 语句中指定了 SCROLL 选项,则支持所有的 FETCH 选项。

如果使用 Transact_SQL DECLARE 游标扩展,以下规则适用:

  • 如果指定了 FORWARD-ONLY 或 FAST_FORWARD,NEXT 是唯一受支持的 FETCH 选项。
  • 如果未指定 DYNAMIC、FORWARD-ONLY 或 FAST_FORWARD 选项,并且指定了 KEYSET、STATIC 或 SCROLL 中的某一个,则支持所有 FETCH 选项。
  • DYNAMIC SCROLL 支持除 ABSOLUTE 之外的所有 FETCH 选项。

@@FETCH_STATUS 函数报告上一个 FETCH 语句的状态。相同的信息记录于由 sp_describe_cursor 返回的游标中的 fetch_status 列中。这些状态信息应该用于在对由 FETCH 语句返回的数据进行任何操作之前,以确定这些数据的有效性。有关更多信息,请参见 @@FETCH_STATUS

权限

FETCH 的默认权限为任何合法用户。

示例
A. 在简单的游标中使用 FETCH

下例为 authors 表中姓以字母 B 开头的行声明了一个简单的游标,并使用 FETCH NEXT 逐个提取这些行。FETCH 语句以单行结果集形式返回由 DECLARE CURSOR 指定的列的值。

USE pubs
GO
DECLARE authors_cursor CURSOR FOR
SELECT au_lname FROM authors
WHERE au_lname LIKE "B%"
ORDER BY au_lname

OPEN authors_cursor

-- Perform the first fetch.
FETCH NEXT FROM authors_cursor

-- Check @@FETCH_STATUS to see if there are any more rows to fetch.
WHILE @@FETCH_STATUS = 0
BEGIN
   
-- This is executed as long as the previous fetch succeeds.
   FETCH NEXT FROM authors_cursor
END

CLOSE authors_cursor
DEALLOCATE authors_cursor
GO
au_lname ---------------------------------------- Bennet au_lname ---------------------------------------- Blotchet-Halls au_lname ----------------------------------------
B. 使用 FETCH 将值存入变量

下例与上例相似,但 FETCH 语句的输出存储于局部变量而不是直接返回给客户端。PRINT 语句将变量组合成单一字符串并将其返回到客户端。

USE pubs
GO

-- Declare the variables to store the values returned by FETCH.
DECLARE @au_lname varchar(40), @au_fname varchar(20)


DECLARE authors_cursor CURSOR FOR
SELECT au_lname, au_fname FROM authors
WHERE au_lname LIKE "B%"
ORDER BY au_lname, au_fname

OPEN authors_cursor

-- Perform the first fetch and store the values in variables.
--
 Note: The variables are in the same order as the columns
--
 in the SELECT statement. 

FETCH NEXT FROM authors_cursor
INTO @au_lname@au_fname

-- Check @@FETCH_STATUS to see if there are any more rows to fetch.
WHILE @@FETCH_STATUS = 0
BEGIN

   
-- Concatenate and display the current values in the variables.
   PRINT "Author: " + @au_fname + " " +  @au_lname

   
-- This is executed as long as the previous fetch succeeds.
   FETCH NEXT FROM authors_cursor
   
INTO @au_lname@au_fname
END

CLOSE authors_cursor
DEALLOCATE authors_cursor
GO
Author: Abraham Bennet Author: Reginald Blotchet-Halls
C. 声明 SCROLL 游标并使用其它 FETCH 选项

下例创建一个 SCROLL 游标,使其通过 LAST、PRIOR、RELATIVE 和 ABSOLUTE 选项支持所有滚动能力。

USE pubs
GO

-- Execute the SELECT statement alone to show the 
--
 full result set that is used by the cursor.
SELECT au_lname, au_fname FROM authors
ORDER BY au_lname, au_fname

-- Declare the cursor.
DECLARE authors_cursor SCROLL CURSOR FOR
SELECT au_lname, au_fname FROM authors
ORDER BY au_lname, au_fname

OPEN authors_cursor

-- Fetch the last row in the cursor.
FETCH LAST FROM authors_cursor

-- Fetch the row immediately prior to the current row in the cursor.
FETCH PRIOR FROM authors_cursor

-- Fetch the second row in the cursor.
FETCH ABSOLUTE 2 FROM authors_cursor

-- Fetch the row that is three rows after the current row.
FETCH RELATIVE 3 FROM authors_cursor

-- Fetch the row that is two rows prior to the current row.
FETCH RELATIVE -2 FROM authors_cursor

CLOSE authors_cursor
DEALLOCATE authors_cursor
GO
au_lname au_fname ---------------------------------------- -------------------- Bennet Abraham Blotchet-Halls Reginald Carson Cheryl DeFrance Michel del Castillo Innes Dull Ann Green Marjorie Greene Morningstar Gringlesby Burt Hunter Sheryl Karsen Livia Locksley Charlene MacFeather Stearns McBadden Heather O'Leary Michael Panteley Sylvia Ringer Albert Ringer Anne Smith Meander Straight Dean Stringer Dirk White Johnson Yokomoto Akiko au_lname au_fname ---------------------------------------- -------------------- Yokomoto Akiko au_lname au_fname ---------------------------------------- -------------------- White Johnson au_lname au_fname ---------------------------------------- -------------------- Blotchet-Halls Reginald au_lname au_fname ---------------------------------------- -------------------- del Castillo Innes au_lname au_fname ---------------------------------------- -------------------- Carson Cheryl
posted @ 2007-09-26 16:09 唐德兵 阅读(374) | 评论 (0)编辑
select EmployeeID,FirstName from Employees union select 0,'--请选择员工--' from Employees
SELECT title_id,销量=SUM(qty) FROM sales GROUP BY title_id
UNION
SELECT ‘总销量’,SUM(qty) FROM sales
这样在查询语句中合并结果集之后,直接绑定到.net控件中,效果非常好,可以省略一些代码!

在SQL Server 2000中,用户可以使用UNION语句将两个或两个以上的查询语句产生的结果集合并为一个结果集。其语法格式为:
SELECT 语句
UNION [ALL]
SELECT 语句
 
 ALL关键字为可选项,使用该关键字时,结果集中将包含所有的行。
用户在对结果集进行合并操作时,需要注意以下几方面的限制条件:
 对于UNION中的每一个查询语句,其所选择的列都必须具有相同的列数、相似的数据类型,并且必须以相同的顺序出现。
 合并后的结果集中的列名来自第一个SELECT语句。
 若在UNION中包含有ORDER BY子句,SQL Server则会对最后的结果集排序。
 在合并结果集时,默认情况下是删除结果集中的重复行,除非使用ALL关键字。
posted @ 2007-09-26 10:59 唐德兵 阅读(126) | 评论 (0)编辑
    有时候为了防止重要数据被删除,可以建立触发器,看看下面的代码:
create   Trigger student_delete on student
for delete
as

    
Raiserror('不能删除!',16,1,'提示');
    
Rollback
    
Return

  这样就不能删除了数据了,而且程序还可以通过try catch语句捕获raiserror自定义的错误呢!同样,我们在存储过程中也可以自定义错误,在程序中捕获!
posted @ 2007-09-24 18:40 唐德兵 阅读(154) | 评论 (0)编辑
     摘要: 权限管理几乎是任何系统都有的,有的权限较简单,而有的权限比较复杂,下面的这种方法是控制模块权限的一种常用方法,用户管理:右边的功能列表是所有子菜单的Text属性,使用的是(CheckedListBox)。基本方法是这样的:权限表中存储权限(子菜单的Text属性的值),用户表中存储登录系统的用户,权限表存储用户对应的所有权限(用0和1来表示是否有访问的权限)。设置权限之后登录的效果图如下所示,没有打... 阅读全文
posted @ 2007-08-23 19:12 唐德兵 阅读(136) | 评论 (1)编辑
 public string Sex
        
{
            
get
            
{
                
if (rbMale.Checked)
                
{
                    
return "";
                }

                
else
                
{
                    
return "";
                }

            }

            
set
            
{
                
if ((string)value.Trim() == "")
                
{
                    rbFemale.Checked 
= true;
                }

                
else
                
{
                    rbMale 
= true;
                }

            }

        }


        
public int Age
        
{
            
get
            
{
                
int nAge;

                
try
                
{
                    nAge 
= Int32(txtAge.Text.Trim());
                }

                
catch
                
{
                    nAge 
= 0;
                }

            }

            
set
            
{
                txtAge.Text 
= value.ToString();
            }

        }


        
public string Address
        
{
      &