ASP 笔记
1 1、迭代器的使用 2 public class DaysofTheWeek:System.Collections.IEnumerable 3 { 4 //定义一周7天 5 string[] m_Days={"Sun","Mon","Tue","Wed","Thr","Fri","Sat"}; 6 //定义迭代器返回内容 7 public System.Collections.IEnumerator GetEnumerator() 8 { 9 for(int i=0;i<my_Days.Length;i++) 10 { 11 yield return m_Days[i];//返回元素值 12 } 13 } 14 } 15 16 protected void Page_Load(object sender,EventArgs e) 17 { 18 //创建类的一个对象 19 DaysOfTheWeek week=new DaysOfTheWeek(); 20 //用foreach遍历并输出结果 21 foreach(string day in week) 22 { 23 Console.Write(day+" "); 24 } 25 } 26 27 2、6个验证控件RequiredFieldValidator 28 29 <asp:TextBox ID="TextBox1" runat="server"></asp:TextBox> 30 <asp:RequiredFieldValidator ID="RequedFieldValidator1" runat="server" 31 32 ControlToValidate="TextBox1" ErrotMessage="必须输入内容"> 33 34 35 CompareValidator 36 <asp:CompareValidator ID="CompareValidator1" runat="server" ControlToCompare="TextBox1" 37 38 ControlToValidate="TextBox2" ErroMessage="两个密码不相同"> 39 </asp:CompareValidator> 40 41 3、DataReader类读取数据 42 Protected static SqlDataReader sdr; 43 SqlConnection conn=new SqlConnection(); 44 conn.ConnectionString=ConfigrationManager.ConnectionStrings 45 46 ["connectionstrig"].ToString(); 47 conn.open(); 48 SqlCommand cmd=new SqlCommand(); 49 comd.Connection=conn; 50 cmd.CommandText="Select * form Works"; 51 sdr=cmd.ExecuteReader();//返回数据集 52 Response.Write(sdr.FieldCount.ToString());//显示字段数 53 if(sdr.HasRows) 54 Response.Write("有记录"); 55 else 56 Response.Write("无记录"); 57 string str=""; 58 while(sdr.Read()) 59 { 60 str=sdr.GetString(0)+","+sdr.GetString(1); 61 } 62 sdr.Close(); 63 Response.Write(str);//显示结果 64 65 4、SqlParameter表示一个参数,默认情况下是input函数,表示的事输入的参数,就是从程序中读取的 66 67 参数,还有输出参数,具体哪一个还需要通过SqlParameters的属性Direcion属性来表示,三种类型参 68 69 数主要有Input,InputOutput,ReturnValue 70 //默认打开的连接名为Connection,testproc 71 SqlCommand command=new SqlCommand("testoroc",connection); 72 command.CommandType=CommandType.StoredProcedure;//命令类型是存储过程 73 SqlParameter parameter=command.Parameters.Add("RRTURU_VALUE"),SqlDbType.Int); 74 //设置存储过程的参数 75 parameter.Direction=ParameterDirection.ReturnValue;//指定参数类型 76 77 parameter=command.Parameters.Add("@InputParm",SqlDbType.NVarChar,12);\\创建一个输入参数 78 parameter.Value="Test Value";\\指定参数的值 79 80 parameter=command.Parameters.Add("@OutputParm",SqlDbType.NVarChar,28); 81 parameter.Direction=ParameerDirection.OutPut;\\指定参数类型为输出参数 82 connecion.open(); 83 SqlDataReader reader=command.ExecuteReader();\\执行获取数据集的命令 84 reader.close();//关闭打开的阅读器 85 Response.Write(command.Parameters["@OutputParm"].value);//输出参数和RetrunValue的值 86 Response.Write(command.Parameters["RETURN_VALUE"].value); 87 5、适配器表示一组SQL命令和一个数据库连接,用于填充DataSet数据集合更新数据源,用作DataSet和 88 89 数据源之间的桥接器,DataAdapter通过映射Fill和Update这两个方法来提供这桥接器。 90 string conn="DataSource=.;Initial Catalog=Nothwind;Itergrated Security=True" 91 string sqlstr="Select * from Catagories"; 92 //利用构造函数,创建DataAdapter 93 SqlDataAdapter da=new SqlDataAdapter(sqlStr,conn); 94 DataSet ds=new DataSet(); 95 Da.Fill(ds,"Catagories"); 96 //以下代码将更新到DataSet里的数据 97 //在DataSet里的名为"Catagories"的DataTable中添加一个用于描述行记录的DataRow对象 98 DataRow dr=ds.Tables["Categories"].NewRow(); 99 //通过DataRow对象添加一条记录 100 dr["CategoryName"]="计算机分类"; 101 dr["Description"]="从计算机分类里单独列出来的一个分支"; 102 ds.Table["Categories"].Rows.Add(dr); 103 //更新到数据库里 104 SqlCommandBuilder scb=new SqlCommandBuilder(da); 105 da.Update(ds,"Categories"); 106 6、DataTable workTable=new DataTable("Works"); 107 DataColumn workCol=workTable.Columns.Add("CustID",typeof(Int32)); 108 workCol.AllowDBNull=false; 109 workCol.Unique=ture; 110 //添加一列内容 111 WorkTable.Columns.Add("CustLName",typeof(String)); 112 或者 113 workTable.Rows.Add(new object[]{1,"Smith","Right",600}); 114 workTable.Rows.Add(new objext[]{1,"Tomas","Edison",900}); 115 7、事务是一个整体操作,共封装了多个操作,一个操作执行不成功,则其他所有的操作都不成功 116 using(SqlConnection conn=new SqlConnection(connectionString)) 117 { 118 conn.open(); 119 SqlCommand cmd=connection.CreateCommand(); 120 SqlTransaction trans; 121 //开始一个本地的事务 122 trans=connection.BeginTransaction("SampleTransaction"); 123 cmd.Connection=conn; 124 cmd.Transaction=trans; 125 try 126 { 127 //第一个操作,更新数据 128 cmd.CommandText="Update moneytable set money=money-200"; 129 cmd.ExecuteNonQuery(); 130 //第二个操作,插入数据 131 cmd.CommandText="Insert into moneyhistory values('name',200,'2006-07-04')"; 132 cmd.ExecuteNonQuery(); 133 trans.Commit(); 134 Response.Write("两条语句都执行完毕"); 135 } 136 catch(Exception ex) 137 { 138 Response.Write("提交错误类型:{0}".ex.GetType()); 139 Response.Write("出错信息:{0}",ex.Message); 140 try 141 { 142 trans.Rollback(); 143 } 144 catch(Exception ex2) 145 { 146 Response.Write("提交错误类型:{0}".ex.GetType()); 147 Response.Write("出错信息:{0}",ex.Message); 148 } 149 } 150 151 } 152 -------------------------------------------------------------------------------------- 153 8、只能对数据控件内的绑定使用Eval()方法 154 当数据可以被修改时还是要使用Bind()方法绑定,一般在数据控件的EditItemTemplate模板和 155 156 InsertItemTemplate模板中要使用Bind()函数 157 -------------------------------------------------------------------------------------- 158 9、ASP.NET的状态管理 159 Cookie与Session对象类似,Session对象的所有信息保存在服务器上,而Cookie对象的所有信息保 160 161 存在客户机上。 162 //传给下个页面这个值 163 Response.Redirect("Update.aspx?id=" + Convert.ToInt32(e.CommandArgument) + ""); 164 获取从页面传来的值Request.QueryString["user"]; 165 ------------------------------------------------------------Cookie的使用 166 ///写入Cookie 167 protected void btnWrite_Click(object sender,EventAgrs e) 168 { 169 HttpCookies CookieTest=new HttpCookie("Password"); 170 CookieTest.value="TestCookieValue";//设置Cookie值 171 Response.Write("<p>Cookie已成功写入"); 172 } 173 //读取Cookie 174 protected void btnRead_Click(object sender,EventArgs e) 175 { 176 string Cookie=Request.Cookies["Password"].Value.ToString(); 177 Response.Write("<p>读出Cookie的值:"); 178 Response.Write("<h3>"+Cookie+"</h3>"); 179 } 180 ------------------------------------------------ 181 if(Session["test"]!=null) 182 { 183 Response.Write(Session["test"].ToString()); 184 }//在另一个页面里也可以用 185 -------------------------------------------------- 186 要使用回话状态的事件处理程序,可以在Global.asax中添加一个名为Application_Start()和 187 188 Application_End()事件处理程序,来对回话状态进行管理 189 void Application_Start(object sender,EventArgs e) 190 { 191 //当应用程序启动时运行的代码 192 } 193 void Application_End(object sender,EventArgs e) 194 { 195 //当应用程序关闭时运行的代码 196 } 197 还可以在Web应用程序的Global.asax文件中,以直接声明的方式向StaticObjects集合中添加对象 198 <object runat="server" scope="application" ID="MyApp" PROGID="MyApp.wyf"></object> 199 然后就可以在应用程序的任何地方通过代码对所定义的应用程序状态访问 200 Label1.Text=MyApp.Title; 201 202 Application["属性名"]存取公用数据,例如访问人数,网页计数器等不随用户变化的数据。 203 204 10、两种验证模型:身份验证和授权验证 205 有些用户可以看到工资单,有的用户看不到。 206 配置身份验证属性 207 <authentication mode="Forms">//基于窗体的 208 <forms name=".ASPXAUTH" loginUrl="default.aspx" protection="All" timeout="30" 209 path="/"//默认路径 210 requireSSL="false" 211 slidingExpiration="UseDeciceProfile" domain="" 212 enableCrossAppRedirects="false"/> 213 <credentials passwordFormat="SHAI"/>//密码的加密方式 214 </forms> 215 <passport redirectUrl="internal"/> 216 </authentication> 217 218 11、应用表单验证 219 <?xml version="1.0"?> 220 <configuration> 221 <system.web> 222 <authentication mode="Forms"/>//将网页的验证模式设置为表单验证 223 <comlication debug="true">//将程序运行模式设置为调试模式 224 </system.web> 225 </configurarion> 226 227 12、窗口验证 228 <Configuration> 229 <system.web> 230 <authentication mode="Windows">//设置验证模式为表单验证模式 231 <comlication debug="true">//将程序运行模式设置为调试模式 232 </system.web> 233 </Configuration> 234 235 protected void Page_load(object sender,EventArgs e) 236 { 237 if(User.IsInRole("Administrators")) 238 { 239 Response.Write("您具备管理员的资格!<br/>"); 240 Response.Write("您的登录名为:"+User.Identity.Name); 241 } 242 } 243 13、不止一个应用程序要在一台计算机上使用基于窗体的身份验证服务,每个应用程序应配置唯一的 244 245 Cookie值,ASP.NET在设置身份验证时,将/用作path值,使Cookies被送回站点的每个应用程序上 246