维纳斯
在程序中寻找自由与成就感~~~~
摘要: 前言:前几篇博客介绍了SqlDataReader、弱类型DataSet对数据的操作,现在讲述一下强类型DataSet(Typed DataSet)1.弱类型DataSet的缺点(1)只能通过列名引用,dataset.Table[0].Rows[0]["Age"],如果写错了列名编译时不会发现错误,因此开发时必须要记着列名。(2)int age=Convert.ToInt32(dataset.Table[0].Rows[0]["Age"]),取到的字段的值是object类型,必须小心翼翼的进行类型转换,不仅麻烦,而且容易出错。(3)将DataSet传递给其 阅读全文
posted @ 2012-11-21 19:56 维纳斯 阅读(792) 评论(0) 推荐(0) 编辑
摘要: 1.DataSet在上两篇博客中,每次读取数据都要创建连接,执行Command得到SqlDataReader太麻烦,所以我们需要封装一个方法。在项目中添加类,名为SQLHelper.cs,封装的方法,代码如下: 1 class SQLHepler 2 { 3 static string connStr = ConfigurationManager.ConnectionStrings["connStr"].ConnectionString; 4 public static int ExecuteNonQuery(string sql, params... 阅读全文
posted @ 2012-11-21 13:44 维纳斯 阅读(255) 评论(0) 推荐(0) 编辑
摘要: 上篇ADO.Net里边最后介绍了一下字符串拼接的登录方式,现在将几种登陆方式做一下详细的介绍。1.字符串拼接的登录方式 1 static void Main(string[] args) 2 { 3 4 string dataDir = AppDomain.CurrentDomain.BaseDirectory; 5 if (dataDir.EndsWith(@"\bin\Debug\") || dataDir.EndsWith(@"\bin\Release\")) 6 { 7 ... 阅读全文
posted @ 2012-11-20 21:02 维纳斯 阅读(231) 评论(0) 推荐(0) 编辑
摘要: 前言:以前很习惯性的就利用第三方(即一个中间变量)来交换两个数的值,后来在一次面试中,那个经理问我怎么交换两个变量的值,我就很熟悉的说用一个中间变量。后来经理说不借助中间变量应该怎么交换,当时我没想出来,现在把交换两个变量的值总结了一下,既有自己的理解也有百度上的东西。(1)先说一下我们经常用的那个方法,即借助一个中间变量。代码如下:1 int a, b, temp;2 a = 10;3 b = 5;4 temp = a;5 a = b;6 b = t... 阅读全文
posted @ 2012-11-17 21:20 维纳斯 阅读(11847) 评论(4) 推荐(2) 编辑
摘要: 前言:从今天开始回顾一下以前学过的知识。1.变量的命名规则:必须以字母或者下划线(_),其后的字符可以是任意个数字、字母、下划线,不能全部使用C#的关键字,比如class、namespace、new、void等。判断方式:VS中亮蓝色的就是关键字。这也是类、函数等的命名规则。C#中建议变量的开头用小写。2.转义符:主要用来消除紧随其后的原有字符的含义。转义字符是一个字符,它由“\”和“一个字母”来组成具有特殊意义的一个字符。char a="\''";//在内存中表示一个字符。\\反斜线 \b 退格 \"双引号 \0空格 \n换行 \t表示多个空格, 阅读全文
posted @ 2012-11-16 23:00 维纳斯 阅读(239) 评论(0) 推荐(0) 编辑
摘要: 1.首先讲解一下什么是线程(该定义是参考线程的百度百科)线程,有时被称为轻量级进程(Lightweight Process,LWP),是程序执行流的最小单元。一个标准的线程由线程ID,当前指令指针(PC),寄存器集合和堆栈组成。另外,线程是进程中的一个实体,是被系统独立调度和分派的基本单位,线程自己不拥有系统资源,只拥有一点在运行中必不可少的资源,但它可与同属一个进程的其它线程共享进程所拥有的全部资源。一个线程可以创建和撤消另一个线程,同一进程中的多个线程之间可以并发执行。由于线程之间的相互制约,致使线程在运行中呈现出间断性。线程也有就绪、阻塞和运行三种基本状态。每一个程序都至少有一个线程,若 阅读全文
posted @ 2012-11-16 08:00 维纳斯 阅读(9029) 评论(1) 推荐(1) 编辑
摘要: 前言:Web开发是和Http协议打交道的,所以必须了解http协议。(1)Http协议版本:Http/0.9、http/1.0、http/1.1。(2)Http协议分析工具:DebugBar,Http(S)标签的内容。免费的,只能分析当前浏览器中的内容;Httpwatch,收费的,只能分析当前浏览器中的内容,推荐使用;HttpAnalyzer,收费的,能分析计算机上所有的Http请求数据。(3)Http协议的几个概念:连接(Connection):浏览器和服务器之间传输数据的通道。一般请求完毕就关闭,不会保持连接。请求(Request):浏览器向服务器发送的“我要…”的消息,包含请求的类型、请 阅读全文
posted @ 2012-11-14 21:52 维纳斯 阅读(1552) 评论(0) 推荐(0) 编辑
摘要: 1.下面讲一下全局变量和局部变量的区别新建一个web页面,拖一个label控件,id为Label1;一个Button控件,id为Button1: 1 private int i = 0;//每次请求来了都会new一个新的实现了IhttpHandlder接口的类“变量1”的实例进行处理,用完了就GC掉,所以不会保持上次的值。 2 3 private static int j = 0;//所有的访问者都王文同一个实例 4 protected void Page_Load(object sender, EventArgs e) 5 { 6 7 } 8 ... 阅读全文
posted @ 2012-11-13 07:54 维纳斯 阅读(206) 评论(0) 推荐(0) 编辑
摘要: 1.http协议是无状态的,不会记得上次和网页“发生了什么”。服务器不记得上次给了浏览器什么,浏览器需要记住这些值(input就是记到value中,对于其他的值就是要放到隐藏字段中,比如viewstate),下次再提交到服务器的时候就是要把上次的值提交到服务器,让它想起来。如果要知道上一次的状态,一个方法是在对浏览器响应结束之前将状态信息保存到页面表单中,下次页面再向服务器发出请求时带上这些状态信息,这样服务器就能根据这些状态信息还原上次的状态了,类似于去看病的病历本。2.状态信息保存到隐藏字段中的缺点:加大网站的流量、降低访问速度、机密数据放到表单中会有数据欺骗等安全性问题。3.表单时和页面 阅读全文
posted @ 2012-11-11 15:18 维纳斯 阅读(186) 评论(0) 推荐(0) 编辑
摘要: 前言:昨天没有把自己的笔记写在博客上,现附上:实现数字在div上的增加:1.新建一个htm文件1 <form action="div自增.ashx">2 <input type="hidden" name="isPostBack" value="true" />3 <input type="hidden" name="IncValue"value="@value" />4 <input type="sub 阅读全文
posted @ 2012-11-11 15:04 维纳斯 阅读(236) 评论(0) 推荐(0) 编辑
摘要: 1.在winForm程序中事件的方法如下:1 private void btnJianDao_Click(object sender, EventArgs e)2 {3 Button button = (Button)sender;//把触发事件的源头转化成Button类4 5 }在该代码中sender表示是谁触发这个事件,e表示和当前事件触发以后各种相关的数据:比如鼠标的位置等等。2.属性和索引器 新建一个类,代码如下: class Person { private strin... 阅读全文
posted @ 2013-01-11 00:14 维纳斯 阅读(239) 评论(0) 推荐(0) 编辑
摘要: 首先最重要的一点就是结构是值类型,而类是引用类型。不能为结构声明一个自己的默认构造函数(无参的) Struct Time { public Time(){……}//编译时会出错 } 之所以不能在struct中声明自己的无参构造函数,是因为编译器将始终生成一个默认构造函数。在类中,只有在你没有写任何构造函数的前提下,编译器才会生成一个默认构造函数。 结构:假设你自己写了一个有参的构造函数,但是你没与在此构造函数中初始化所有的字段,那么编译器将不会再帮你初始化它。(但是在类中是可以的)即必须在结构的所有构造函数中显示的初始化所有字段,否则就会得到编译器错误。 比如:若Time(Time中三个字段, 阅读全文
posted @ 2012-11-23 13:54 维纳斯 阅读(384) 评论(0) 推荐(0) 编辑
摘要: 前言:下面先看一段程序,通过程序来引入拆箱和装箱的概念:1.装箱int i=42;Object o=i;i=50;Console.WriteLine(“i={0},o={1}”,i ,o);//输出为i=50,o=42下面分析一下为什么会是这个结果。实际情况是:首先从内存堆栈中分配一小片内存,来存储int类型的数据42,然后再分配一小片内存来存储一个引用o。接着在内存堆中分配一片内存,将i中值的一个副本存在在该内存中。最后让i的引用指向这个副本。这种将一个数据项从堆栈自动复制到堆得行为成为装箱(Boxing)。若修改一个变量的原始值,不会修改堆上现有的值,因为它只是一个副本。先将图附上,方便理 阅读全文
posted @ 2012-11-23 13:45 维纳斯 阅读(264) 评论(0) 推荐(0) 编辑
摘要: OS和CLR通常将用于容纳数据的内存划分为两个独立的区域,每个区域都采用截然不同的方式来管理:堆栈(Stack)和堆(heap)。(1) 调用一个方法时,它的参数以及它的局部变量需要的内存总是从堆栈中获取,方法结束后,为参数和局部变量分配的内存将自动还给堆栈,并可在另一个方法调用时重新使用。(2) 使用new关键字和一次构造函数调用来创建一个对象时,创建对象所需的内存总是从堆中获取,使用引用变量,同一个对象可以从几个地方引用,对对象的最后一次引用消失以后,对象使用的内存就可以供重用(它可能没有被立即回收)。(3) 所有值类型都是在堆栈中创建的,所有引用类型都是在堆中创建的。2.堆内存和堆栈内存 阅读全文
posted @ 2012-11-23 13:27 维纳斯 阅读(1302) 评论(0) 推荐(0) 编辑
摘要: 1.sql(Structured Query Language)语句是和DBMS(数据库管理系统)交谈专用的数据,不同的DBMS都认SQL语法,SQL语句字符串用单引号,SQL语句是大小写不敏感的(不敏感指的是SQL关键字,字符串值还是大小写敏感的)。2.SQL主要分为DDL(数据定义语言)和DML(数据操作语言)两类。Create Table、Drop Table等属于DDL(影响数据库中表结构),Select、Insert、update、delete等属于DML(对数据本身的操作)。3.SQL中经常做主键的两种类型:int(bigint)和uniqueidentifier(又称GUID、U 阅读全文
posted @ 2012-11-22 14:38 维纳斯 阅读(238) 评论(0) 推荐(0) 编辑