生成随机编码 | ||||
--取得随机数的视图
CREATE VIEW v_RAND AS SELECT re=STUFF(RAND(),1,2,'') GO
--生成随机编号的函数
CREATE FUNCTION f_RANDBH(@BHLen int) RETURNS varchar(50) AS BEGIN DECLARE @r varchar(50) IF NOT(ISNULL(@BHLen,0) BETWEEN 1 AND 50) SET @BHLen=10
SELECT @r=CHAR(
CASE WHEN SUBSTRING(re,1,1)>5 THEN 97 ELSE 65 end +(SUBSTRING(re,1,1) +SUBSTRING(re,2,1) +SUBSTRING(re,3,1))%26) +CHAR( CASE WHEN SUBSTRING(re,4,1)>5 THEN 97 ELSE 65 end +(SUBSTRING(re,4,1) +SUBSTRING(re,5,1) +SUBSTRING(re,6,1))%26) FROM v_RAND WHILE LEN(@r)<@BHLen SELECT @r=@r+CHAR( CASE WHEN SUBSTRING(re,1,1)>5 THEN 97 ELSE 65 end +(SUBSTRING(re,1,1) +SUBSTRING(re,2,1) +SUBSTRING(re,3,1))%26) +CHAR( CASE WHEN SUBSTRING(re,4,1)>5 THEN 97 ELSE 65 end +(SUBSTRING(re,4,1) +SUBSTRING(re,5,1) +SUBSTRING(re,6,1))%26) FROM v_RAND RETURN(LEFT(@r,@BHLen)) END GO
--调用
SELECT dbo.f_RANDBH(6),dbo.f_RANDBH(8) --结果: YZVBOj LASCrhSO | ||||
| ||||
| ||||
| ||
SQL语句导入导出大全 | ||||
/******* 导出到excel /*********** 导入Excel /*动态文件名 SELECT cast(cast(科目编号 as numeric(10,2)) as nvarchar(255))+' ' 转换后的别名 /********************** EXCEL导到远程SQL
/** 导出文本文件 导出到TXT文本,用逗号分开
--/* dBase III文件 --/* FoxPro 数据库 /**************导入DBF文件****************/ insert into openrowset('MSDASQL', 说明:
/*************导入Access********************/ 文件名为参数 SELECT * ********************* 导入 xml 文件 DECLARE @idoc int -- Execute a SELECT statement using OPENXML rowset provider.
??????? /**********************Excel导到Txt****************************************/ 假设Excel中有两列,第一列为姓名,第二列为很行帐号(16位)
insert into
如果你想直接插入并生成文本文件,就要用bcp declare @sql varchar(8000),@tbname varchar(50) --首先将excel表内容导入到一个全局临时表 --然后用bcp从全局临时表导出到文本文件 --删除临时表
用bcp实现的存储过程
--导入调用示例 */ if @tbname like '%.%.%' --如果指定了表名,则直接导出单个表 set @m_tbname='declare #tb cursor for select name from '+@tbname+'..sysobjects where xtype=''U'''
delete from openquery(mailser,'select * from yulin') select * from openquery(mailser,'select * from yulin') update openquery(mailser,'select * from yulin where id=15')set disorder=555,catago=888 insert into openquery(mailser,'select disorder,catago from yulin')values(333,777)
补充: 对于用bcp导出,是没有字段名的. 用openrowset导出,需要事先建好表. 用openrowset导入,除ACCESS及EXCEL外,均不支持非本机数据导入 | ||||
| ||||
| ||||
| ||
金额阿拉伯数字转换为中文的自定义函数 | ||||
CREATE FUNCTION ChangeBigSmall
(@ChangeMoney money) RETURNS VarChar(100) AS BEGIN Declare @String1 char(20) Declare @String2 char(30) Declare @String4 Varchar(100) Declare @String3 Varchar(100) --从原A值中取出的值 Declare @i int --循环变量 Declare @J Int --A的值乘以100的字符串长度 Declare @Ch1 Varchar(100) --数字的汉语读法 Declare @Ch2 Varchar(100) --数字位的汉字读法 Declare @Zero Int --用来计算连续有几个零 Declare @ReturnValue VarChar(100) Select @ReturnValue = '' Select @String1 = '零壹贰叁肆伍陆柒捌玖' Select @String2 = '万仟佰拾亿仟佰拾万仟佰拾元角分' Select @String4 = Cast(@ChangeMoney*100 as int) select @J=len(cast((@ChangeMoney*100) as int)) Select @String2=Right(@String2,@J) Select @i = 1 while @i<= @j Begin Select @String3 = Substring(@String4,@i,1) if @String3<>'0' Begin Select @Ch1 = Substring(@String1, Cast(@String3 as Int) + 1, 1) Select @Ch2 = Substring(@String2, @i, 1) Select @Zero = 0 --表示本位不为零 end else Begin If (@Zero = 0) Or (@i = @J - 9) Or (@i = @J - 5) Or (@i = @J - 1) Select @Ch1 = '零' Else Select @Ch1 = '' Select @Zero = @Zero + 1 --表示本位为0 --如果转换的数值需要扩大,那么需改动以下表达式 I 的值。 Select @Ch2 = '' If @i = @J - 10 Begin Select @Ch2 = '亿' Select @Zero = 0 end If @i = @J - 6 Begin Select @Ch2 = '万' Select @Zero = 0 end if @i = @J - 2 Begin Select @Ch2 = '元' Select @Zero = 0 end If @i = @J Select @Ch2 = '整' end Select @ReturnValue = @ReturnValue + @Ch1 + @Ch2 select @i = @i+1 end --最后将多余的零去掉 If CharIndex('仟仟',@ReturnValue) <> 0 Select @ReturnValue = Replace(@ReturnValue, '仟仟', '仟') If CharIndex('佰佰',@ReturnValue) <> 0 Select @ReturnValue = Replace(@ReturnValue, '佰佰', '佰') If CharIndex('零元',@ReturnValue) <> 0 Select @ReturnValue = Replace(@ReturnValue, '零元', '元') If CharIndex('零万',@ReturnValue) <> 0 Select @ReturnValue = Replace(@ReturnValue, '零万', '万') If CharIndex('零亿',@ReturnValue) <> 0 Select @ReturnValue = Replace(@ReturnValue, '零亿', '亿') If CharIndex('零整',@ReturnValue) <> 0 Select @ReturnValue = Replace(@ReturnValue, '零整', '整') If CharIndex('零佰',@ReturnValue) <> 0 Select @ReturnValue = Replace(@ReturnValue, '零佰', '零') If CharIndex('零仟',@ReturnValue) <> 0 Select @ReturnValue = Replace(@ReturnValue, '零仟', '零') If CharIndex('元元',@ReturnValue) <> 0 Select @ReturnValue = Replace(@ReturnValue, '元元', '元') return @ReturnValue END | ||||
| ||||
| ||||
| ||
金额阿拉伯数字转换为中文的存储过程 | ||||
Create Procedure AtoC @ChangeMoney Money as Set Nocount ON Declare @String1 char(20) Declare @String2 char(30) Declare @String4 Varchar(100) Declare @String3 Varchar(100) --从原A值中取出的值 Declare @i int --循环变量 Declare @J Int --A的值乘以100的字符串长度 Declare @Ch1 Varchar(100) --数字的汉语读法 Declare @Ch2 Varchar(100) --数字位的汉字读法 Declare @Zero Int --用来计算连续有几个零 Declare @ReturnValue VarChar(100) Select @ReturnValue = '' Select @String1 = '零壹贰叁肆伍陆柒捌玖' Select @String2 = '万仟佰拾亿仟佰拾万仟佰拾元角分' Select @String4 = Cast(@ChangeMoney*100 as int) select @J=len(cast((@ChangeMoney*100) as int)) Select @String2=Right(@String2,@J) Select @i = 1 while @i<= @j Begin Select @String3 = Substring(@String4,@i,1) if @String3<>'0' Begin Select @Ch1 = Substring(@String1, Cast(@String3 as Int) + 1, 1) Select @Ch2 = Substring(@String2, @i, 1) Select @Zero = 0 --表示本位不为零 end else Begin If (@Zero = 0) Or (@i = @J - 9) Or (@i = @J - 5) Or (@i = @J - 1) Select @Ch1 = '零' Else Select @Ch1 = '' Select @Zero = @Zero + 1 --表示本位为0 --如果转换的数值需要扩大,那么需改动以下表达式 I 的值。 Select Ch2 = '' If @i = @J - 10 Begin Select @Ch2 = '亿' Select @Zero = 0 end If @i = @J - 6 Begin Select @Ch2 = '万' Select @Zero = 0 end if @i = @J - 2 Begin Select @Ch2 = '元' Select @Zero = 0 end If @i = @J Select @Ch2 = '整' end Select @ReturnValue = @ReturnValue + @Ch1 + @Ch2 select @i = @i+1 end --最后将多余的零去掉 If CharIndex('仟仟',@ReturnValue) <> 0 Select @ReturnValue = Replace(@ReturnValue, '仟仟', '仟') If CharIndex('佰佰',@ReturnValue) <> 0 Select @ReturnValue = Replace(@ReturnValue, '佰佰', '佰') If CharIndex('零元',@ReturnValue) <> 0 Select @ReturnValue = Replace(@ReturnValue, '零元', '元') If CharIndex('零万',@ReturnValue) <> 0 Select @ReturnValue = Replace(@ReturnValue, '零万', '万') If CharIndex('零亿',@ReturnValue) <> 0 Select @ReturnValue = Replace(@ReturnValue, '零亿', '亿') If CharIndex('零整',@ReturnValue) <> 0 Select @ReturnValue = Replace(@ReturnValue, '零整', '整') If CharIndex('零佰',@ReturnValue) <> 0 Select @ReturnValue = Replace(@ReturnValue, '零佰', '零') If CharIndex('零仟',@ReturnValue) <> 0 Select @ReturnValue = Replace(@ReturnValue, '零仟', '零') If CharIndex('元元',@ReturnValue) <> 0 Select @ReturnValue = Replace(@ReturnValue, '元元', '元') Select @ReturnValue GO | ||||
| ||||
| ||||
| ||
12月13日 | ||||
执子之手,与子偕老 | ||||
执子之手,与子偕老,这该是一幅两个人同撑起一方天空的风景,象两棵独立的大树,我们共同撑起一方天空,枝叶在蓝天下盛放,树根在地底下相互扶持,风也罢霜也罢,雨也罢雪也罢,执子之手,每一刻都是如此的美好,每一刻都是一首动人的情诗,每一刻都值得用所有的时光去回味……
执子之手,与子偕老,这是一种并肩站立,共同凝望太阳升起、落下的感觉;是一种天变地变情不变的感觉,只是想紧紧握住你的手,什么话也不说,慢慢地陪你走过今生今世,来生来世……
执子之手,与子偕老,当你哭泣的时候,有人陪你伤心,倾听你诉说,为你抚平凌乱的发和憔悴的颜容,告诉你明天依旧阳光灿烂;当你笑容明媚的时候,整个世界都和你一起明媚,而他静静地站在一旁,微笑着看着你和阳光一般地灿烂……
| ||||
| ||||
| ||||
| ||
母亲的谎言 | ||||
儿时,小男孩家很穷,吃饭时,饭常常不够吃,母亲就把自己碗里的饭分给孩子吃。母亲说,孩子们,快吃吧,我不饿!——母亲撒的第一个谎。
男孩长身体的时候,勤劳的母亲常用周日休息时间去县郊农村河沟里捞些鱼来给孩子们补钙。鱼很好吃,鱼汤也很鲜。孩子们吃鱼的时候,母亲就在一旁啃鱼骨头,用舌头舔鱼骨头上的肉渍。男孩心疼,就把自己碗里的鱼夹到母亲碗里,请母亲吃鱼。母亲不吃,母亲又用筷子把鱼夹回男孩的碗里。母亲说,孩子,快吃吧,我不爱吃鱼!——母亲撒的第二个谎。 上初中了,为了缴够男孩和哥姐的学费,当缝纫工的母亲就去居委会领些火柴盒拿回家来,晚上糊了挣点分分钱补点家用。有个冬天,男孩半夜醒来,看到母亲还躬着身子在油灯下糊火柴盒。男孩说,母亲,睡了吧,明早您还要上班呢。母亲笑笑,说,孩子,快睡吧,我不困!——母亲撒的第三个谎。 高考那年,母亲请了假天天站在考点门口为参加高考的男孩助阵。时逢盛夏,烈日当头,固执的母亲在烈日下一站就是几个小时。考试结束的铃声响了,母亲迎上去递过一杯用罐头瓶泡好的浓茶叮嘱孩子喝了,茶亦浓,情更浓。望着母亲干裂的嘴唇和满头的汗珠,男孩将手中的罐头瓶反递过去请母亲喝。母亲说,孩子,快喝吧,我不渴!——母亲撒的第四个谎。 父亲病逝之后,母亲又当爹又当娘,K着自己在缝纫社里那点微薄收入含辛茹苦拉扯着几个孩子,供他们念书,日子过得苦不堪言。胡同路口电线杆下修表的李叔叔知道后,大事小事就找岔过来打个帮手,搬搬煤,挑挑水,送些钱粮来帮补男孩的家里。人非草木,孰能无情。左邻右舍对此看在眼里,记在心里!——母亲撒的第五个谎 孩和她的哥姐大学毕业参加工作后,下了岗的母亲就在附近农贸市场摆了个小摊维持生活。身在外地工作的孩子们知道后就常常寄钱回来补贴母亲,母亲坚决不要,并将钱退了回去。母亲说,我有钱!——母亲撒的第六个谎。 男孩留校任教两年,后又考取了美国一所名牌大学的博士生,毕业后留在美国一家科研机构工作,待遇相当丰厚,条件好了,身在异国的男孩想把母亲接来享享清福却被老人回绝了。母亲说,我不习惯!——母亲撒的第七个谎。晚年,母亲患了胃癌,住进了医院,远在大西洋彼岸的男孩乘飞机赶回来时,术后的母亲已是奄奄一息了。母亲老了,望着被病魔折磨得死去活来的母亲,男孩悲痛欲绝,潸然泪下。母亲却说,孩子,别哭,我不疼。——母亲撒的第八个谎。 说完,在“谎言”里度过了一生的母亲终于闭上了眼睛。 母爱是伟大的! | ||||
| ||||
| ||||
| ||
人生中10件无能为力的事 | ||||
倒向你的墙!
离你而去的人
流逝的时间
没有选择的出身
莫名其妙的孤独
无可奈何的遗忘 永远的过去
别人的嘲笑
不可避免的死亡 不可救药的喜欢 | ||||
| ||||
| ||||
| ||
12月6日 | ||||
生成流水号 | ||||
--生成流水号
--创建测试表
create table test(id varchar(18), --流水号,日期(8位)+时间(4位)+流水号(4位) name varchar(10) --其他字段 ) go
--创建生成流水号的触发器
create trigger t_insert on test INSTEAD OF insert as declare @id varchar(18),@id1 int,@head varchar(12) select * into #tb from inserted set @head=convert(varchar,getdate(),112)+replace(convert(varchar(5),getdate(),108),':','') select @id=max(id) from test where id like @head+'%' if @id is null set @id1=0 else set @id1=cast(substring(@id,13,4) as int) update #tb set @id1=@id1+1 ,id=@head+right('0000'+cast(@id1 as varchar),4) insert into test select * from #tb go --插入数据,进行测试 insert into test(name) select 'aa' union all select 'bb' union all select 'cc'
--修改系统时间,再插入数据测试一次
insert into test(name) select 'aa' union all select 'bb' union all select 'cc'
--显示测试结果
select * from test --删除测试环境 drop table test
/*--测试结果
id name ------------------ ---------- 2004022720430001 aa 2004022720430002 bb 2004022720430003 cc 2004022720430004 aa 2004022720430005 bb 2004022720430006 cc
(所影响的行数为 6 行)
--*/ | ||||
| ||||
| ||||
| ||
生成纯字母随机编号的示例(大小写混合).sql | ||||
--取得随机数的视图
CREATE VIEW v_RAND AS SELECT re=STUFF(RAND(),1,2,'') GO
--生成随机编号的函数
CREATE FUNCTION f_RANDBH(@BHLen int) RETURNS varchar(50) AS BEGIN DECLARE @r varchar(50) IF NOT(ISNULL(@BHLen,0) BETWEEN 1 AND 50) SET @BHLen=10
SELECT @r=CHAR(
CASE WHEN SUBSTRING(re,1,1)>5 THEN 97 ELSE 65 end +(SUBSTRING(re,1,1) +SUBSTRING(re,2,1) +SUBSTRING(re,3,1))%26) +CHAR( CASE WHEN SUBSTRING(re,4,1)>5 THEN 97 ELSE 65 end +(SUBSTRING(re,4,1) +SUBSTRING(re,5,1) +SUBSTRING(re,6,1))%26) FROM v_RAND WHILE LEN(@r)<@BHLen SELECT @r=@r+CHAR( CASE WHEN SUBSTRING(re,1,1)>5 THEN 97 ELSE 65 end +(SUBSTRING(re,1,1) +SUBSTRING(re,2,1) +SUBSTRING(re,3,1))%26) +CHAR( CASE WHEN SUBSTRING(re,4,1)>5 THEN 97 ELSE 65 end +(SUBSTRING(re,4,1) +SUBSTRING(re,5,1) +SUBSTRING(re,6,1))%26) FROM v_RAND RETURN(LEFT(@r,@BHLen)) END GO
--调用
SELECT dbo.f_RANDBH(6),dbo.f_RANDBH(8) --结果: YZVBOj LASCrhSO | ||||
| ||||
| ||||
| ||
C++编程人员容易犯的10个C#错 | ||||
C++编程人员容易犯的10个C#错误
我们知道, C#的语法与C++非常相似,实现从C++向C#的转变,其困难不在于语言本身,而在于熟悉.NET的可管理环境和对.NET框架的理解。
错误2:Finalize和Dispose使用谁?
在本例的第一部分中,Font对象是在Using语句中创建的。当Using语句结束时,系统就会调用Dispose,对Font对象进行处理。在本例的第二部分,Font对象是在Using语句外部创建的,在决定使用它时,再将它放在Using语句内,当Using语句结束时,系统就会调用 Dispose。 如果被解包的对象是无效的,或是一个不同数据类型对象的索引,就会产生InvalidCastException异外。
错误7:类成员变量的初始化 要实现上面代码的目的,需要使用一个goto语句: | ||||
| ||||
| ||||
| ||
用C#实现生成PDF文档 | ||||
using System;
using System.IO; using System.Text; using System.Collections; namespace PDFGenerator { public class PDFGenerator { static float pageWidth = 594.0f; static float pageDepth = 828.0f; static float pageMargin = 30.0f; static float fontSize = 20.0f; static float leadSize = 10.0f; static StreamWriter pPDF=new StreamWriter("E://myPDF.pdf"); static MemoryStream mPDF= new MemoryStream(); static void ConvertToByteAndAddtoStream(string strMsg) { Byte[] buffer=null; buffer=ASCIIEncoding.ASCII.GetBytes(strMsg); mPDF.Write(buffer,0,buffer.Length); buffer=null; } static string xRefFormatting(long xValue) { string strMsg =xValue.ToString(); int iLen=strMsg.Length; if (iLen<10) { StringBuilder s=new StringBuilder(); int i=10-iLen; s.Append('0',i); strMsg=s.ToString() + strMsg; } return strMsg; } static void Main(string[] args) { ArrayList xRefs=new ArrayList(); //Byte[] buffer=null; float yPos =0f; long streamStart=0; long streamEnd=0; long streamLen =0; string strPDFMessage=null; //PDF文档头信息 strPDFMessage="%PDF-1.1/n"; ConvertToByteAndAddtoStream(strPDFMessage); xRefs.Add(mPDF.Length); strPDFMessage="1 0 obj/n"; ConvertToByteAndAddtoStream(strPDFMessage); strPDFMessage="<< /Length 2 0 R >>/n"; ConvertToByteAndAddtoStream(strPDFMessage); strPDFMessage="stream/n"; ConvertToByteAndAddtoStream(strPDFMessage); /**/PDF文档描述 streamStart=mPDF.Length; //字体 strPDFMessage="BT/n/F0 " + fontSize +" Tf/n"; ConvertToByteAndAddtoStream(strPDFMessage); //PDF文档实体高度 yPos = pageDepth - pageMargin; strPDFMessage=pageMargin + " " + yPos +" Td/n" ; ConvertToByteAndAddtoStream(strPDFMessage); strPDFMessage= leadSize+" TL/n" ; ConvertToByteAndAddtoStream(strPDFMessage); //实体内容 strPDFMessage= "(http://www.wenhui.org)Tj/n" ; ConvertToByteAndAddtoStream(strPDFMessage); strPDFMessage= "ET/n"; ConvertToByteAndAddtoStream(strPDFMessage); streamEnd=mPDF.Length; streamLen=streamEnd-streamStart; strPDFMessage= "endstream/nendobj/n"; ConvertToByteAndAddtoStream(strPDFMessage); //PDF文档的版本信息 xRefs.Add(mPDF.Length); strPDFMessage="2 0 obj/n"+ streamLen + "/nendobj/n"; ConvertToByteAndAddtoStream(strPDFMessage); xRefs.Add(mPDF.Length); strPDFMessage="3 0 obj/n<</Type/Page/Parent 4 0 R/Contents 1 0 R>>/nendobj/n"; ConvertToByteAndAddtoStream(strPDFMessage); xRefs.Add(mPDF.Length); strPDFMessage="4 0 obj/n<</Type /Pages /Count 1/n"; ConvertToByteAndAddtoStream(strPDFMessage); strPDFMessage="/Kids[/n3 0 R/n]/n"; ConvertToByteAndAddtoStream(strPDFMessage); strPDFMessage="/Resources<</ProcSet[/PDF/Text]/Font<</F0 5 0 R>> >>/n"; ConvertToByteAndAddtoStream(strPDFMessage); strPDFMessage="/MediaBox [ 0 0 "+ pageWidth + " " + pageDepth + " ]/n>>/nendobj/n"; ConvertToByteAndAddtoStream(strPDFMessage); xRefs.Add(mPDF.Length); strPDFMessage="5 0 obj/n<</Type/Font/Subtype/Type1/BaseFont/Courier/Encoding/WinAnsiEncoding>>/nendobj/n"; ConvertToByteAndAddtoStream(strPDFMessage); xRefs.Add(mPDF.Length); strPDFMessage="6 0 obj/n<</Type/Catalog/Pages 4 0 R>>/nendobj/n"; ConvertToByteAndAddtoStream(strPDFMessage); streamStart=mPDF.Length; strPDFMessage="xref/n0 7/n0000000000 65535 f /n"; for(int i=0;i<xRefs.Count;i++) { strPDFMessage+=xRefFormatting((long) xRefs[i])+" 00000 n /n"; } ConvertToByteAndAddtoStream(strPDFMessage); strPDFMessage="trailer/n<</n/Size "+ (xRefs.Count+1)+"/n/Root 6 0 R/n>>/n"; ConvertToByteAndAddtoStream(strPDFMessage); strPDFMessage="startxref/n" + streamStart+"/n%%EOF/n"; ConvertToByteAndAddtoStream(strPDFMessage); mPDF.WriteTo(pPDF.BaseStream); mPDF.Close(); pPDF.Close(); } } } | ||||
| ||||
| ||||
| ||
c#中结构与类的区别 | ||||
一.类与结构的示例比较:
结构示例: public struct Person { string Name; int height; int weight public bool overWeight() { //implement something } } 类示例: public class TestTime { int hours; int minutes; int seconds; public void passtime() { //implementation of behavior } } 调用过程: public class Test { public static ovid Main { Person Myperson=new Person //声明结构 TestTime Mytime=New TestTime //声明类 } } 从上面的例子中我们可以看到,类的声明和结构的声明非常类似,只是限定符后面是 struct 还是 class 的区别,而且使用时,定义新的结构和定义新的类的方法也非常类似。那么类和结构的具体区别是什么呢? 二 .类与结构的差别 1. 值类型与引用类型 结构是值类型:值类型在堆栈上分配地址,所有的基类型都是结构类型,例如:int 对应System.int32 结构,string 对应 system.string 结构 ,通过使用结构可以创建更多的值类型 类是引用类型:引用类型在堆上分配地址 堆栈的执行效率要比堆的执行效率高,可是堆栈的资源有限,不适合处理大的逻辑复杂的对象。所以结构处理作为基类型对待的小对象,而类处理某个商业逻辑 因为结构是值类型所以结构之间的赋值可以创建新的结构,而类是引用类型,类之间的赋值只是复制引用 注: 1.虽然结构与类的类型不一样,可是他们的基类型都是对象(object),c#中所有类型的基类型都是object 2.虽然结构的初始化也使用了New 操作符可是结构对象依然分配在堆栈上而不是堆上,如果不使用“新建”(new),那么在初始化所有字段之前,字段将保持未赋值状态,且对象不可用 2.继承性 结构:不能从另外一个结构或者类继承,本身也不能被继承,虽然结构没有明确的用sealed声明,可是结构是隐式的sealed . 类:完全可扩展的,除非显示的声明sealed 否则类可以继承其他类和接口,自身也能被继承 注:虽然结构不能被继承 可是结构能够继承接口,方法和类继承接口一样 例如:结构实现接口 interface IImage { void Paint(); } struct Picture : IImage { public void Paint() { // painting code goes here } private int x, y, z; // other struct members } 3.内部结构: 结构: 没有默认的构造函数,但是可以添加构造函数 没有析构函数 没有 abstract 和 sealed(因为不能继承) 不能有protected 修饰符 可以不使用new 初始化 在结构中初始化实例字段是错误的 类: 有默认的构造函数 有析构函数 可以使用 abstract 和 sealed 有protected 修饰符 必须使用new 初始化 三.如何选择结构还是类 讨论了结构与类的相同之处和差别之后,下面讨论如何选择使用结构还是类: 1. 堆栈的空间有限,对于大量的逻辑的对象,创建类要比创建结构好一些 2. 结构表示如点、矩形和颜色这样的轻量对象,例如,如果声明一个含有 1000 个点对象的数组,则将为引用每个对象分配附加的内存。在此情况下,结构的成本较低。 3. 在表现抽象和多级别的对象层次时,类是最好的选择 4. 大多数情况下该类型只是一些数据时,结构时最佳的选择 | ||||
| ||||
| ||||
| ||
C#获取本地计算机名,IP,MAC地址 | ||||
using System; | ||||
| ||||
| ||||
| ||
C#和SQL数据浏览分页 |
![]() 如果需要考虑如时间的过滤、其他条件的加入,可以在SQL语句进行编辑,普通的网站,下面的数据浏览分页 就可以了。 aspx代码: <%@ Page language="c#" Codebehind="StockOrderFormBrower.aspx.cs" AutoEventWireup="false" Inherits="GSP.StockOrderFormBrower" %> <HEAD> </HTML> aspx.cs代码: using System; namespace ASWBLM
private static int page_count = 10;//初始化页面记录数
Init_Brower();//初始化浏览 #region Web 窗体设计器生成的代码 } try Response.Write("</a>"); Response.Write("<td align=/"right/">"); Response.Write("</tr>");
/// <summary> SqlCommand MyComm = new SqlCommand(strCount,SqlCon);
vCommond = "SELECT TOP "+page_count+" {0},{1},{2},{3} FROM [UnionInfo]"; } if (IsLast)//判断“最后一页” } vCommond = string.Format(vCommond,"Id","Title","SummaryDateTime","ReadTimes");//这个是数据表的字段
/// <summary>
本文没有列出SQL语句,是希望我和我的好朋友们的劳动成果已经用于商业用途了,还有就是希望各位自己动手写写,应该没有问题的了 |