C# 笔记

6 篇文章 0 订阅
 

变量

枚举: 一个变量类型,内含几个子变量,默认是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)
    {
   //应用程序启动时运行的代码
     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();

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值