变量
枚举: 一个变量类型,内含几个子变量,默认是INT类型的。
enum typename
{
value1,
value2,
....
valueN
}
或
enum typename:underlyingtype //定义下面变量的类型。变量也可赋值,如不赋值,默认value1为0,下面的递增1。
{
value1,
value2,
....
valueN
}
例:enum orientation:byte
{
north=1,
south=2,
east=3,
west=4
}
static void Main(string[] args)
{
orientation mydirection=orientation.north;
console.writeline("mydirection={0}",mydirection);
console.readkey();
}
变量的类型转换:
1、隐式转换:
var1=var2;
2、显式转换:
val1=(int)val2
int intval1=Convert.Toint32(val2)
Convert.Toint32(val)转换为INT
Convert.Toint64(val)转换为long
split()的例子
static void Main(string[] args)
{
string mystring="this is a test";
char[] separator={' '};//指定分开的分隔符
string[] mywords;//定义一个字符串数组
mywords=mystring.split(separator);将字符串分开,保留在数组里
foreach (string word in mywords)
{
console.writeline("{0}", word);
}
console.readkey();
}
类:
public static string aaa;//静态成员变量
public static void aaa();//静态成员函数
{
}
public string aaa;//实体成员变量
public void aaa;//实体成员函数
{
}
在使用上,静态成员变量可以不声明对像直接使用,相反,实体成员就必须先声明对象实体,才能使用。
public:任何外部的类都可以不受限制的存取类数据。
private:限定此类内部使用。
protected:除了类本身可以用外,任何继承此类的类都可以使用。
internal:表示在同一个应用程序(Application)或类库(Library)中都可以使用。
类的事件:
几个英语词:
Event 事件
Event Sender 事件发生者
Event Reciiver 事件接收者
Event Delegate 事件委托
例子:
public partial class lei_jichu:System.Web.UI.Page
{
public class book
{
string title;//标题
int num;//书的库存
double price;//价格
public delegate void TitleChengHendler();//事先声明一个委托,也可以在类的外部声明委托类型
public event TitleChengHendler TitleCheng;//声明一个事件并指定他的委托类型
//下面定义两个函数
public Book()
{
}
public Book(string ntitle, int nnum, double nprice)
{
title=ntitle;
num=nnum;
price=nprice;
}
//下面我们定义了三个可读可写的属性
public string Title
{
get
{return title;}
set
{
title=value;
TitleCheng();//也就是说,如果通过这里修改了这个标题,就会触发这个事件。
}
}
public int Num
{
get
{return num;}
set
{num=value;}
}
public double Price
{
get
{return price;}
set
{price=value;}
}
//继续添加方法
public string BookInfo()
{
sring Html="书名是:" + title + "<br>库存:" + num + "本<br>价格为:" + price + "元/本";
return Html;
}
}
//下面调用类:
protected void Page_Load(object sender,EventArgs e)
{
Book shu=new Book();
shu.TitleCheng+=new Book.TitleChengHendler(shu_TitleCheng);
shu.Title="三国";
shu.Num=5000;
shu.Price=43.6;
Response.Write(Shu.BookInfo());
}
void shu_TitleCheng()
{
Response.Write("事件执行了<br>");
}
}
对象:
1\ request
提交表单有两种,get和post
get(地址栏带参数显示):
request.querystring["变量名"];
post:
request.form["变量名"];
不指定方式的:
request.params["变量名"]; 或request["变量名"];
获取服务器信息:
response.write("当前网页虚拟路径是:" + request.servervariables["url"]);
response.write("<br>当前网页虚拟路径是:" + request.rawurl);
response.write("<br>实际路径:" + request.servervariables["path_translated"]);
response.write("<br>实际路径:" + request.physicalpath);
response.write("<br>服务器名:" + request.servervariables["server_name"]);
response.write("<br>服务器IP:" + request.userhostaddress);
获取浏览器环境:
response.write("<br>这个浏览器是否支持背景音乐:" + request.browser.backgroundsounds]);
response.write("<br>这个浏览器是否支持框架:" + request.browser.frames);
response.write("客户端系统:" + request.browser.platform);
2/ cookie
Cookie是保存在客户端或浏览器中的对象
写入Cookie
httpcookie nc=new httpcookie("newcookie");
nc.values["name"]="Tom";
nc.values["dt"]=DateTime.New.Tostring();
response.cookies.add(nc);
读取Cookie
httpcookie getcook=request.cookies["newcookie"]
response.write(getcook.values["dt"]);
3/response
ContentType属性主要用来描述内容类型,此字符串的格式为type/subtype,前者表示内容分类,后者表示特定的内容类型,可以设置或者获取数据类型,默认值为text/html
如:response.contenttype="image/gif",表示输出gif格式的图像.
response.Expires=5; 获取或设置页面过期时间,单位为分钟.这个例子表示从打开页面的5分钟内,你访问的都是缓存中的数据,而5分钟后就会重新去服务器下载.
response.ContentEncoding();获取或设置内容的编码格式
response.Buffer=false; 设置或获取当前页是否缓存输出,值为bool型,默认为True
response.Flush(); 立即将缓存输出去
response.End();将当前缓冲区内容立即输出,并停止当前页的执行.
response.redirect("url地址"); 将客户端重新定向到新的URL
例子:利用response输出文本文件:
string FileName = Server.MapPath("Readme.txt");
Response.ContentEncoding=System.Text.UnicodeEncoding.Default;
Response.WriteFile(FileName);
4/server
将虚拟路径转换到实际路径
string a=Server.MapPath("~/app_data/a.xml").ToString //将路径指到实际根目录下.
5/Application
是一上共享的对象,当程序开始运行建立直到程序关闭,他的变量是共享的.要使用这个对象需要在系统中建立一个global.asa文件. Application对象在程序中只能有一个.
例:页面统计
在Global.asa文件中:
void Application_Start(object sender,EventArgs e)
{
d //应用程序启动时运行的代码
Application["a"]=0;
}
页面装截文件下:
protectde void Page_Load(object sender,EventArgs e)
{
Application.Lock();
Application["a"]=Application["a"]+1;
Application.unlock();
Response.Write(Application["a"]);
}
/session对象
每个人进到程序时都会建立一个Session对象,也就是说Application对象只有一个,而Session对象有多少人用就有多少个Session,他是不能共享的.Session一般是用来保存用户的信息的.
在Global.asa中:
Void Session_start(object sender,EventArgs e)
{
//在启动会话时运行的代码
Session["name"]="小宇"
}
页面装截文件下:
protectde void Page_Load(object sender,EventArgs e)
{
Application.Lock();
Application["a"]=Application["a"]+1;
Application.unlock();
Response.Write(Application["a"]);
Response.write(session["name"]);
}
/ page对象
protected void page_init(object sender,EventArgs e)
{
//当页面初始化时,例如可以在加载控件之前检测客户端环境变量.他与Load工作方式差不多,但是在Load之前运行,而且,当网页重新加载的时候不会再触发这个事件.
}
protected void page_Load(object sender,EventArgs e)
{
//每次刷新页面,.net都会为他绘制一个全新的页面,并将他按新页面来处理,所以每次从新加载都要触发这个事件.
if(!IsPostBack)
{
DropDownList1.Items.Add("aaaaa")
DropDownList1.Items.Add("bbbbb")
}
}
控件:
1/DropDownList控件
using System;
using System.Data;
using System.Configuration;
using System.Web;
using System.Web.Security;
using System.Web.UI;
using System.Web.UI.WebControls;
using System.Web.UI.WebControls.WebParts;
using System.Web.UI.HtmlControls;
using System.Collections;//因为要使用ArrayList
//DropDownList初始化选择的值内容
public partial class _Default : System.Web.UI.Page
{
protected void Page_Load(object sender, EventArgs e)
{
if (!IsPostBack)
{
ArrayList arr1 = new ArrayList();//注意大小写
arr1.Add ("请选择");
arr1.Add ("刘志东");
arr1.Add ("小宇");
DropDownList1.DataSource =arr1;
DropDownList1.DataBind();
}
}
//根据DropDownList选择的值,Label显示不同的提示.
protected void DropDownList1_SelectedIndexChanged(object sender, EventArgs e)
{
switch (DropDownList1.SelectedValue)
{
case "请选择":
Label1.Text = "就是请选择";
break;
case "刘东":
Label1.Text = "就是刘东";
break;
case "小宇":
Label1.Text = "就是刘东的儿子";
break;
default:
Label1.Text = "在前面选择个";
break;
}
}
}
public class datasource
{
//声明对象
private string Connstring;
private Sqlconnection Sqlconn;
private Sqlcommand Sqlcmd;
private SqlDataAdapter SqlAdapter;
private DataSet ds;
private SqlDataReader SqlReader;
public class datasource() //构造函数
{
//初始化所有的实例
ConnString=ConfigurationManager.ConnectionStrings["pubsConn"].ConnectionString;//webconfig中调用的连接字符串
SqlConn=new SqlConnection(ConnString);
SqlCmd=new SqlCommand();
SqlAdapter=new SqlDataAdapter();
ds=new DataSet();
}
public DataSet TdataSet(string QueryString)//创建一个带参数的dataset方法
{
SqlAdapter.SelectCommand=new SqlCommand(QueryString,SqlConn);
SqlAdapter.Fill(ds,"temp");
return ds;
}
public DataSet TdataSet()//创建一个不带参数的dataset
{
SqlAdapter.SelectCommand=new SqlCommand("select au_id,Au_lnam from XXX");
SqlAdapter.Fill(ds,"temp");
return ds;
}
public SqlDataReader Tsdr()//返回一个只读,向前的数据datareader数据源.不支持服务端的分页,而且需要和数据源一直连接.
{
SqlCmd.CommandText="select au_id,Au_lnam from XXX";
SqlCmd.Connection=SqlConn;
SqlConn.Open();
SqlReader=SqlCmd.ExecuteReader(commandBehavior.CloseConnection);//当datareader关闭时,同时也关闭数据库的连接.
return SqlReader;
}
public void Update(string city,string au_lame)//更新表
{
SqlCmd.CommandText="update [表名] set [au_lname]='" + au_lname +"',[city]='" + city + "'"; //[]内为字段名
SqlCmd.Connection=SqlConn;
SqlConn.Open();
SqlCmd.ExecuteNonQuery();
}
public void Update(string city,string au_lame)//另一种方法更新表,可防止字段值含有单引号出错.
{
SqlCmd.CommandText="update [表名] set [au_lname]=@lname,[city]='" + city + "'"; //[]内为字段名
SqlCmd.Parameters.AddWithValue("@lname", au_lname);
SqlCmd.Connection=SqlConn;
SqlConn.Open();
SqlCmd.ExecuteNonQuery();
}
public Void Delete(string au_id)
{
SqlCmd.CommandText="Delete from [表名] where [au_id]='" + au_id +"' ";
Sqlcmd.connection=SqlConn;
Sqlconn.Open();
SqlCmd.ExecuteNonQuery();
}
}
----------------------------------------------------------------------------------------------
ExecuteNonQuery 执行sqlcommand命令,并返回受影响的行数(INT类型)
ExecuteReader 返回一个只读且只进的数据流,每次只返回一条数据(返回对象类型)
ExecuteScalar 执行查询,并返回查询所返回的结果集中第一行的第一列.忽略其他列或行.
----------------------------------------------------------------------------------------------
一个与GridView绑定的程序
protectde void Page_load(object sender, EventArgs e)
{
if(!IsPostBack)
Bind();
}
private void Bind()
{
SqlConnection con=new SqlConnection(ConfigurationManager.ConnectionString["ConnStr"].connectionString);
SqlDataAdapter sda=new SqlDataAdapter("select * from name",con);
DataSet ds=new DataSet();
sda.Fill(ds,"temp");
con.Close();
GridView1.DataSource=ds.Tables["temp"].DefaultView;
Gridview1.DataBind();
}
private void fill(int id,string name, int age)
{
SqlConnection con=new Sqlconnection(ConfigurationManager.ConnectionString["ConnStr"].connectionString);
SqlDataAdapter sda=new SqlDataAdapter("select * from name",con);
SqlCommandBuilder scbld=new SqlCommandBuilder(sda);
DataSet ds=new DataSet();
try
{
sda.Fill(ds,"temp");
//设置内存表中以id字段排序
ds.Tables["temp"].DefaultView.Sort="id";
//找到我们要的数据所在行的索引
int index=ds.tables["temp"].DefaultView.Find(id);
//修改字段值
ds.Tables["temp"].Rows[index]["name"]=name;
ds.Tables["temp"].Rows[index]["age"]=age;
//得到此次更新影响的行数
int rows=sda.Update(ds,"temp");
Response.Write("成功更新了" + rows + "行数据");
}
catch(Exception e)
{
Response.Write("出现错误, 原因是" + e.Message);
}
finally
{
}
}
-----------------------------------------------------------------------------
DataSet的讲解
给DataSet内存表添加主键
UniqueConstraint uc=new UniqueConstraint("uthc",ds.Tables["user"].Columns["dc_id"],true);//true表示定义为主键,如果是false则不是主键
ds.Tables["user"].Constraints.Add(uc);
给DataSet内存表添加外键
ForeignKeyConstraint fkc=new ForeignKeyConstraint("fthc",ds.Tables["user"].Columns["dc_id"],ds.Tables["book"].Columns["dc_id"]);//["user"]为主表,["book"]为从表.
ds.Tables["book"].Constraints.Add(fkc);//将约束规则加到从表中
-------------------------------------------------------------------------
SqlDataAdapter的用法
1\
SqlDataAdapter da=new SqlDataAdapter("select * from authors", ConfigurationManager.ConnectionString["connstring"].ConnectionString);//注意,第二个参数是调用的数据库连接字符串,而不是Connection连接对象,这是因为在下面,SqlDataAdapter对象在调用Fill方法时会自动创建Connection连接对象,并打开连接.
DataSet ds=new DataSet();
da.Fill(ds,"table");
2\
SqlConnection conn=new SqlConnection(ConfigurationManager.ConnectionString["connstring"].ConnectionString);
SqlDataAdapter da=new SqlDataAdapter();
da.SelectCommand=new SqlCommand("select * from authors",conn);
DataSet ds=new DataSet();
da.Fill(ds,"table");
------------------------------------------------------------------------------------
外键关联
if (!IsPostBack)
{
Sqlconnection conn=new SqlConnection(ConfigurationManager.ConnectionStrings["pubsconn"].ConnectionString);
SqlDataAdapter sda=new SqlDataAdapter();
sda.SelectCommand=new SqlCommand("select title_id,title,type from titles",conn);//主表
DataSet ds=new DataSet();
sda.Fill(ds,"t1");
sda.SelectCommand=new SqlCommand("select stor_id,ord_num,title_id from sales",conn);//从表
sda.Fill(ds,"t2");
UnipueConstraint uc=new UniqueConstraint("t1_uc",ds.Tables["t1"].Columns["title_id"],true);//定义内存主表的主键约束
ds.Tables["t1"].Constraints.Add(uc);
ForeignKeyConstraint fkc=new ForeignKeyConstraint("fkc_au",ds.Tables["t1"].Columns["title_id"],ds.Tables["t2"].Columns["title_id"]);//定义主键外键关联
ds.Tables["t2"].Constraints.Add(fkc);
//或使用这种方法来定义外键关联也可以:
//ds.Relations.Add("fkc_au",ds.Tables["t1"].Columns["title_id"],ds.Tables["t2"].Columns["title_id"])
Session["ds"]=ds;//将ds赋给session对象
Response.Write(ds.Relations.Count);//在这个dataSet中有几个限制条件
GridView1.DataSource=ds.Tables["t1"];
GridView1.DataBind();
GridView2.DataSource=ds.Tables["t2"];
GridView2.DataBind();
}
//当按下GridView表中的删除键时发生的事件
protected void GridView1_RowDeleting(object sender,GridViewDeleteEventArgs e)
{
DataSet ds=(DataSet)Session["ds"];//将保存ds的session对象强制转换为dataset对象
//得到当前选中行的主键的值(前提是在GridView中设置DataKeyNames的属性值为主键名title_id)
string keys=GridView1.DataKeys[e.RowIndex].value.Tostring();
//找到对应主键值的当前行
DataRow dr=ds.Tables["t1"].Rows.Find(keys);
ds.Tables["t1"].Rows.Remove(dr);
GridView1.DataSource = ds.Tables["t1"];
GridView1.DataBind
GridView2.DataSource = ds.Tables["t2"];
GridView2.DataBind
}
--------------------------------------------------------------------------------
Merge方法,他能够把一个dataset, datatable,datarow等合并到一个dataset中去
如两个表合并前如下:
table1: table2:
title_id(设为主键) title type stor_id ord_num title_id
合并后为:
title_id title type stor_id ord_num
例:
if (!IsPostBack)
{
Sqlconnection conn=new SqlConnection(ConfigurationManager.ConnectionStrings["pubsconn"].ConnectionString);
SqlDataAdapter sda=new SqlDataAdapter();
sda.SelectCommand=new SqlCommand("select title_id,title,type from titles",conn);//主表
DataSet ds=new DataSet();
sda.Fill(ds,"t1");
DataSet ds=new DataSet();
sda.SelectCommand=new SqlCommand("select stor_id,ord_num,title_id from sales",conn);
sda.Fill(ds1,"t1");
UnipueConstraint uc=new UniqueConstraint("t1_uc",ds.Tables["t1"].Columns["title_id"],true);//定义内存主表的主键约束
ds.Tables["t1"].Constraints.Add(uc);
Session["ds"]=ds;
Session["ds1"]=ds1;
Response.Write(ds.Relations.Count);
GridView1.DataSource=ds.Tables["t1"];
GridView1.DataBind();
GridView2.DataSource=ds1.Tables["t1"];
GridView2.DataBind();
//合并按钮发生的事件:
DataSet ds=(DataSet)Session["ds"];
DataSet ds1=(DataSet)Session["ds1"];
ds.Merge(ds1);
GridView1.DataSource=ds.Tables["t1"];
GridView1.DataBind();