DATASET读取XML
private void Button1_Click(object sender, System.EventArgs e)
{
SqlConnection cn=new SqlConnection("server=.;database=pubs;uid=sa;pwd=");
SqlDataAdapter da=new SqlDataAdapter("select * from titles",cn);
DataSet ds=new DataSet();
da.Fill(ds);
ds.WriteXml(Server.MapPath("titles.xml"));
}
private void Button2_Click(object sender, System.EventArgs e)
{
// FileStream myfs=new FileStream(Server.MapPath("titles.xml"),FileMode.Open,FileAccess.Read);//使用FileStream对象打开xml文件
// StreamReader myreader=new StreamReader(myfs);//将StreamReader对象附加到FileStream对象上,可以将FileStream对象中的xml文件读取到StreamReader对象中
// DataSet ds=new DataSet();//定义数据集,它能够读取和存储xml,从数据库读取数据和从xml读取数据没有区别
// ds.ReadXml(sr);//DataSet对象的ReadXml方法可以从StreamReader对象中读取xml数据
// dgMyGrid.DataSource=ds;//将xml数据读入到DataSet后,sql数据和xml数据之间没有区别,DataGrid以同样方法绑定至DataSet
// dgMyGrid.DataBind();
DataSet ds=new DataSet();
ds.ReadXml(Server.MapPath("titles.xml"));
dgMyGrid.DataSource=ds;
dgMyGrid.DataBind();
}
//Panel 横向滚动,纵向自动扩展
//<asp:panel style="overflow-x:scroll;overflow-y:auto;"></asp:panel>
总结:
在网络状态较好的情况下,Redirect(url)方法效率最高!!
Server.Transfer方法和Server.Execute方法最灵活!!
Server.Execute方法占用资源最多.
private void Button1_Click(object sender, System.EventArgs e)
{
Label2.Text="You choose:<b>";
foreach(ListItem lst in CheckBoxList1.Items)
{
if(lst.Selected==true)
{
Label2.Text+="<br>" + lst.Text;
}
}
Label2.Text+="</b>";
for(int i=0;i<this.CheckBoxList1.Items.Count;i++)
{
if(this.CheckBoxList1.Items[i].Selected == true)
{
Label3.Text+="<br>" + CheckBoxList1.Items[i].Text;
}
}
Label3.Text+="</b>";
}
private void CheckBox1_CheckedChanged(object sender, System.EventArgs e)
{
foreach(object control in Form1.Controls)
{
if(control is CheckBox)
{
CheckBox checkbox=control as CheckBox;
checkbox.Checked=CheckBox1.Checked;
}
}
}
private void Page_Load(object sender, System.EventArgs e)
{
if(!this.IsPostBack)
{
ArrayList ary=new ArrayList();
ary.Add("c");
ary.Add("c++");
ary.Add("c#");
ary.Add("asp");
ary.Add("asp.net");
ary.Add("vb");
ary.Add("winform");
ary.Add("java");
ary.Add("j2ee");
ListBox1.DataSource=ary;
ListBox1.DataBind();
ListBox1.SelectionMode=ListSelectionMode.Multiple;
ListBox1.AutoPostBack=false;
ListBox2.SelectionMode=ListSelectionMode.Multiple;
ListBox2.AutoPostBack=false;
}
}
private void Button1_Click(object sender, System.EventArgs e)
{
for(int i=0;i<ListBox1.Items.Count;i++)
ListBox2.Items.Add(ListBox1.Items[i].Text);
ListBox1.Items.Clear();
}
private void Button4_Click(object sender, System.EventArgs e)
{
for(int i=0;i<ListBox2.Items.Count;i++)
ListBox1.Items.Add(ListBox2.Items[i].Text);
ListBox2.Items.Clear();
}
private void Button2_Click(object sender, System.EventArgs e)
{
int i=0;
while(i<=ListBox1.Items.Count-1)
{
if(ListBox1.Items[i].Selected==true)
{
ListBox2.Items.Add(ListBox1.Items[i].Text);
ListBox1.Items.RemoveAt(i);
}
else
{
i++;
}
}
}
private void Button3_Click(object sender, System.EventArgs e)
{
int i=0;
while(i<=ListBox2.Items.Count-1)
{
if(ListBox2.Items[i].Selected==true)
{
ListBox1.Items.Add(ListBox2.Items[i].Text);
ListBox2.Items.RemoveAt(i);
}
else
{
i++;
}
}
}
private void Page_Load(object sender, System.EventArgs e)
{
if(!this.IsPostBack)
{
course();
site();
hashTable();
}
}
void course()
{
Hashtable ht=new Hashtable();
ht.Add("c","s1课程");
ht.Add("c++","s2课程");
ht.Add("c#","y2课程");
RadioButtonList1.DataSource=ht;
RadioButtonList1.DataValueField="key";
RadioButtonList1.DataTextField="value";
RadioButtonList1.DataBind();
RadioButtonList1.AutoPostBack=true;
}
void site()
{
Hashtable site=new Hashtable();
site.Add("sohu.gif","搜狐");
site.Add("sina.gif","新浪");
site.Add("netease.gif","网易");
site.Add("yahoo.jpg","雅虎");
RadioButtonList2.DataSource=site;
RadioButtonList2.DataValueField="key";
RadioButtonList2.DataTextField="value";
RadioButtonList2.DataBind();
RadioButtonList2.AutoPostBack=true;
}
#region Web 窗体设计器生成的代码
override protected void OnInit(EventArgs e)
{
//
// CODEGEN: 该调用是 ASP.NET Web 窗体设计器所必需的。
//
InitializeComponent();
base.OnInit(e);
}
/// <summary>
/// 设计器支持所需的方法 - 不要使用代码编辑器修改
/// 此方法的内容。
/// </summary>
private void InitializeComponent()
{
this.RadioButtonList2.SelectedIndexChanged += new System.EventHandler(this.RadioButtonList2_SelectedIndexChanged);
this.RadioButtonList1.SelectedIndexChanged += new System.EventHandler(this.RadioButtonList1_SelectedIndexChanged);
this.Load += new System.EventHandler(this.Page_Load);
}
#endregion
private void RadioButtonList1_SelectedIndexChanged(object sender, System.EventArgs e)
{
Label2.Text="You choosed:" +RadioButtonList1.SelectedItem.Text+"——"+RadioButtonList1.SelectedItem.Value;
}
private void RadioButtonList2_SelectedIndexChanged(object sender, System.EventArgs e)
{
this.Image1.ImageUrl =Server.MapPath("")+@"\image\"+RadioButtonList2.SelectedItem.Value;
}
void hashTable()
{
Hashtable ht=new Hashtable();
ht.Add("c","s1课程");
ht.Add("c++","s2课程");
ht.Add("c#","y2课程");
IDictionaryEnumerator ide=ht.GetEnumerator();
while(ide.MoveNext())
{
ListBox1.Items.Add(ide.Key.ToString());
ListBox2.Items.Add(ide.Value.ToString());
}
}
private void Button8_Click(object sender, System.EventArgs e)
{
TreeNode nodeRoot=new TreeNode();
nodeRoot.Target="root";
nodeRoot.Text="老祖宗";
nodeRoot.ImageUrl=Server.MapPath("")+@"\image\book1.ico";
nodeRoot.ExpandedImageUrl=Server.MapPath("")+@"\image\book2.ico";
nodeRoot.SelectedImageUrl=Server.MapPath("")+@"\image\book2.ico";
MyTree.Nodes.Add(nodeRoot);
}
private void Button1_Click(object sender, System.EventArgs e)
{
TreeNode nodeSelect=MyTree.GetNodeFromIndex(MyTree.SelectedNodeIndex);
TreeNode nodeAdd=new TreeNode();
nodeAdd.Text=nodeSelect.Text+"的崽";
nodeSelect.Nodes.Add(nodeAdd);
}
private void Button2_Click(object sender, System.EventArgs e)
{
TreeNode nodeDelete=MyTree.GetNodeFromIndex(MyTree.SelectedNodeIndex);
nodeDelete.Remove();
}
private void Button3_Click(object sender, System.EventArgs e)
{
MyTree.Nodes.Clear();
}
private void Button4_Click(object sender, System.EventArgs e)
{
TreeNode nodeUpdate=MyTree.GetNodeFromIndex(MyTree.SelectedNodeIndex);
nodeUpdate.Text+="(已经被修改)";
}
private void Button5_Click(object sender, System.EventArgs e)
{
TreeNode nodeCut=MyTree.GetNodeFromIndex(MyTree.SelectedNodeIndex);
Session["cut"]=nodeCut;
nodeCut.Remove();
}
private void Button6_Click(object sender, System.EventArgs e)
{
TreeNode nodeSelect=MyTree.GetNodeFromIndex(MyTree.SelectedNodeIndex);
TreeNode nodePaste=(TreeNode)Session["cut"];
nodeSelect.Nodes.Add(nodePaste);
}
private void Button7_Click(object sender, System.EventArgs e)
{
ListBox1.Items.Clear();
GetAllNodeText(MyTree.Nodes);
}
void GetAllNodeText(TreeNodeCollection tnc)
{
foreach(TreeNode node in tnc)
{
if(node.Nodes.Count!=0)
GetAllNodeText(node.Nodes);
ListBox1.Items.Add(node.Text);
}
}
private void Button3_Click(object sender, System.EventArgs e)
{
// Generate the Label controls.
int numlabels = Int32.Parse(DropDown1.SelectedItem.Value);
for (int i=1; i<=numlabels; i++)
{
Label l = new Label();
l.Text = "Label" + (i).ToString();
l.ID = "Label" + (i).ToString();
Panel4.Controls.Add(l);
Panel4.Controls.Add(new LiteralControl("<br>"));
}
// Generate the Textbox controls.
int numtexts = Int32.Parse(DropDown2.SelectedItem.Value);
for (int i=1; i<=numtexts; i++)
{
TextBox t = new TextBox();
t.Text = "TextBox" + (i).ToString();
t.ID = "TextBox" + (i).ToString();
Panel4.Controls.Add(t);
Panel4.Controls.Add(new LiteralControl("<br>"));
}
}
动态加载TABLE控件
public class TableControls : System.Web.UI.Page
{
protected System.Web.UI.WebControls.Table Table1;
protected System.Web.UI.WebControls.Button Button2;
private void Page_Load(object sender, System.EventArgs e)
{
for(int i=0;i<count;i++)
{
Add();
}
}
#region Web 窗体设计器生成的代码
override protected void OnInit(EventArgs e)
{
//
// CODEGEN: 该调用是 ASP.NET Web 窗体设计器所必需的。
//
InitializeComponent();
base.OnInit(e);
}
/// <summary>
/// 设计器支持所需的方法 - 不要使用代码编辑器修改
/// 此方法的内容。
/// </summary>
private void InitializeComponent()
{
this.Button2.Click += new System.EventHandler(this.Button2_Click);
this.Load += new System.EventHandler(this.Page_Load);
}
#endregion
static int count;
void Add()
{
TextBox tb=new TextBox();
TableCell tc=new TableCell();
tc.Controls.Add(tb);
TableRow tr=new TableRow();
tr.Cells.Add(tc);
Table1.Rows.Add(tr);
}
private void Button2_Click(object sender, System.EventArgs e)
{
Add();
count++;
}
}
private void Button1_Click(object sender, System.EventArgs e)
{
for (int i = 0; i <4; i++)
{
TableRow tempRow = new TableRow();
for (int j = 0; j < 4; j++)
{
TableCell tempCell = new TableCell();
tempCell.Text = "Position(" + i + "," + j + ")";
if (CheckBox1.Checked==true)
{
tempCell.BorderStyle=BorderStyle.Inset;
tempCell.BorderWidth=Unit.Pixel(1);
}
tempRow.Controls.Add(tempCell);
}
Table1.Rows.Add(tempRow);
}
}
private void Button2_Click(object sender, System.EventArgs e)
{
for (int i = 0; i <4; i++)
{
TableRow tempRow = new TableRow();
for (int j = 0; j < 4; j++)
{
TableCell tempCell = new TableCell();
Label tempLabel=new Label();
tempLabel.Text = "Position(" + i + "," + j + ")";
tempCell.Controls.Add(tempLabel);
Image img=new Image();
img.ImageUrl=Server.MapPath("") + @"\image\"+(j+1)+".jpg";
tempCell.Controls.Add(img);
if (CheckBox1.Checked==true)
{
tempCell.BorderStyle=BorderStyle.Inset;
tempCell.BorderWidth=System.Web.UI.WebControls.Unit.Pixel(1);
}
tempRow.Controls.Add(tempCell);
}
Table1.Rows.Add(tempRow);
}
}
private void Button3_Click(object sender, System.EventArgs e)
{
// Create more rows for the table.
for (int i = 0; i < 4; i++)
{
TableRow tempRow = new TableRow();
for (int j = 0; j < 4; j++)
{
TableCell tempCell = new TableCell();
Label tempLabel=new Label();
tempLabel.Text = "Position(" + i + "," + j + ")";
tempCell.Controls.Add(tempLabel);
Image img=new Image();
img.ImageUrl=Server.MapPath("") + @"\image\"+(j+1)+".jpg";
tempCell.Controls.Add(img);
if (CheckBox1.Checked==true)
{
tempCell.BorderStyle=BorderStyle.Inset;
tempCell.BorderWidth=Unit.Pixel(1);
}
tempRow.Controls.Add(tempCell);
}
Table1.Rows.Add(tempRow);
}
// Create a TableItemStyle object that can be set as the default style for all cells in the table.
TableItemStyle tableStyle = new TableItemStyle();
tableStyle.HorizontalAlign = HorizontalAlign.Center;
tableStyle.VerticalAlign = VerticalAlign.Middle;
tableStyle.Width = Unit.Pixel(100);
// Apply the TableItemStyle to all rows in the table.
foreach (TableRow r in Table1.Rows)
foreach (TableCell c in r.Cells)
c.ApplyStyle(tableStyle);
// Create a header for the table.
TableHeaderCell header = new TableHeaderCell();
header.RowSpan = 1;
header.ColumnSpan = 4;
header.Text = "Table of (x,y) Values";
header.Font.Bold = true;
header.BackColor =System.Drawing.Color.CornflowerBlue;
header.HorizontalAlign = HorizontalAlign.Center;
header.VerticalAlign = VerticalAlign.Middle;
// Add the header to a new row.
TableRow headerRow = new TableRow();
headerRow.Cells.Add(header);
// Add the header row to the table.
Table1.Rows.AddAt(0, headerRow);
}
}
}
namespace ContainerControl
{
/// <summary>
/// WebForm8 的摘要说明。
/// </summary>
public class TableSave : System.Web.UI.Page
{
protected System.Web.UI.WebControls.Table Table1;
protected System.Web.UI.WebControls.Label Label1;
protected System.Web.UI.WebControls.Button Button1;
private void Page_Load(object sender, System.EventArgs e)
{
for(int i=0;i<count;i++)
{
TextBox tb=new TextBox();
Button bt=new Button();
bt.Text=i.ToString();
bt.Click+=new EventHandler(bt_Click);
TableCell tc=new TableCell();
tc.Controls.Add(tb);
tc.Controls.Add(bt);
TableRow tr=new TableRow();
tr.Cells.Add(tc);
Table1.Rows.Add(tr);
}
}
#region Web 窗体设计器生成的代码
override protected void OnInit(EventArgs e)
{
//
// CODEGEN: 该调用是 ASP.NET Web 窗体设计器所必需的。
//
InitializeComponent();
base.OnInit(e);
}
/// <summary>
/// 设计器支持所需的方法 - 不要使用代码编辑器修改
/// 此方法的内容。
/// </summary>
private void InitializeComponent()
{
this.Button1.Click += new System.EventHandler(this.Button1_Click);
this.Load += new System.EventHandler(this.Page_Load);
}
#endregion
static int count;
private void Button1_Click(object sender, System.EventArgs e)
{
TextBox tb=new TextBox();
Button bt=new Button();
bt.Text=count.ToString();
bt.Click+=new EventHandler(bt_Click);
TableCell tc=new TableCell();
tc.Controls.Add(tb);
tc.Controls.Add(bt);
TableRow tr=new TableRow();
tr.Cells.Add(tc);
Table1.Rows.Add(tr);
count++;
}
private void bt_Click(object sender, EventArgs e)
{
Button btt=sender as Button;
int index=int.Parse(btt.Text);
TextBox t= Table1.Rows[index].Cells[0].Controls[0] as TextBox;
Label1.Text=t.Text;
}
}
public class TableShowImage : System.Web.UI.Page
{
protected System.Web.UI.WebControls.Table Table1;
private void Page_Load(object sender, System.EventArgs e)
{
TableCell tc1=new TableCell();
tc1.Text="图片";
TableCell tc2=new TableCell();
tc2.Text="名称";
TableCell tc3=new TableCell();
tc3.Text="大小";
TableRow tr1=new TableRow();
tr1.Cells.Add(tc1);
tr1.Cells.Add(tc2);
tr1.Cells.Add(tc3);
Table1.Rows.Add(tr1);
string[] files=Directory.GetFiles(Server.MapPath("")+@"\image\Computer");
foreach(string file in files)
{
System.Web.UI.WebControls.Image img=new System.Web.UI.WebControls.Image();
img.ImageUrl=file;
TableCell tcImage=new TableCell();
tcImage.Controls.Add(img);
FileInfo f=new FileInfo(file);
TableCell tcName=new TableCell();
tcName.Text=f.Name;
TableCell tcLength=new TableCell();
tcLength.Text=f.Length.ToString();
TableRow trImage=new TableRow();
trImage.Cells.Add(tcImage);
trImage.Cells.Add(tcName);
trImage.Cells.Add(tcLength);
Table1.Rows.Add(trImage);
}
Table1.BorderStyle=BorderStyle.Inset;
Table1.BorderWidth=Unit.Pixel(1);
}
字符串转化。
人民币currency:ToString("c")
十进制decimalist:ToString("d")
指数exponent:ToString("e")
浮点float:ToString("f") ToString("f1")
常规general:ToString("g")
数字numeric:ToString("n")
百分比percentage:ToString("p")
十六进制hex:ToString("x")
private void Button1_Click(object sender, System.EventArgs e)
{
SqlConnection cn=new SqlConnection();
String str;
SqlCommand cmd;
SqlDataReader dr;//只进、只读、逐行访问、独占连接,类似于ADO中的Recordset
cn.ConnectionString="server=.;database=pubs;uid=sa;pwd=";
str="select * from employee where minit='B'";
cmd=new SqlCommand(str,cn);
cn.Open();
dr=cmd.ExecuteReader(CommandBehavior.CloseConnection);//在执行该命令时,如果关闭关联的 DataReader 对象,则关联的 Connection 对象也将关闭。
if(!dr.HasRows)
return;
DataTable dt=new DataTable("employee");//定义数据表dt
DataRow dw;//定义数据行dw
for(int i=0;i<dr.FieldCount;i++)//循环每一列
{
dt.Columns.Add(new DataColumn(dr.GetName(i)));//获取每一列的名称
}
while (dr.Read()) //向前逐行读取数据
{
dw=dt.NewRow();//在数据表中定义新行
for(int i=0;i<dr.FieldCount;i++)//循环每一列
{
dw[i]=dr.GetValue(i);//设置行的每一列的值
dw[i]=dr[i];//设置行的每一列的值
}
dt.Rows.Add(dw);//将数据行添加到数据表中
}
DataGrid1.DataSource=dt;
DataGrid1.DataBind();
//---------------------------------只进----------------------------------------------
DataGrid2.DataSource=dr;
DataGrid2.DataBind();
dr.Close();//当正在使用 SqlDataReader 时,关联的 SqlConnection 在忙于服务 SqlDataReader,而且除了关闭以外不能对 SqlConnection 执行其他任何操作。除非调用 SqlDataReader 的 Close 方法,否则会一直处于此状态。
// cn.Close();
string str2="select * from employee where minit='F'";
SqlCommand cmd2=new SqlCommand(str2,cn);
cn.Open();
SqlDataReader dr2;
using(dr2=cmd2.ExecuteReader(CommandBehavior.CloseConnection))//using 语句定义一个范围,在此范围的末尾将处理对象。
{
DataGrid3.DataSource=dr2;
DataGrid3.DataBind();
}
// DataGrid4.DataSource=dr2;
// DataGrid4.DataBind();
string str3="select * from employee where minit='M'";
SqlCommand cmd3=new SqlCommand(str3,cn);
cn.Open();
using(SqlDataReader dr3=cmd3.ExecuteReader())//using 语句定义一个范围,在此范围的末尾将处理对象。
{
DataGrid4.DataSource=dr3;
DataGrid4.DataBind();
}
}
private void Button2_Click(object sender, System.EventArgs e)
{
SqlConnection cn=new SqlConnection("server=.;database=northwind;uid=sa;pwd=;");
SqlCommand cmd = new SqlCommand("SELECT CategoryID, CategoryName FROM Categories order by CategoryID;" +
"SELECT EmployeeID, LastName FROM Employees order by EmployeeID", cn);
cn.Open();
SqlDataReader myReader = cmd.ExecuteReader();
// SqlDataReader myReader = cmd.ExecuteReader(CommandBehavior.SingleResult);
// SqlDataReader myReader = cmd.ExecuteReader(CommandBehavior.SingleRow);
Label1.Text="";
do
{
Label1.Text+="<b>"+myReader.GetName(0)+"----"+ myReader.GetName(1)+"<br></b>";
while (myReader.Read())
Label1.Text+=myReader.GetInt32(0)+"----"+ myReader.GetString(1)+"<br>";
} while (myReader.NextResult());
myReader.Close();
cn.Close();
}
private void Button3_Click(object sender, System.EventArgs e)
{
SqlConnection cn=new SqlConnection("server=.;database=northwind;uid=sa;pwd=;");
SqlCommand cmd = new SqlCommand("SELECT * FROM Categories order by CategoryID",cn);
cn.Open();
SqlDataReader myReader = cmd.ExecuteReader();
DataTable schemaTable = myReader.GetSchemaTable();
Label1.Text="";
foreach (DataRow myRow in schemaTable.Rows)
{
Label1.Text+="<br>";
foreach (DataColumn myCol in schemaTable.Columns)
Label1.Text+=myCol.ColumnName + " = " + myRow[myCol]+"<br>";
}
myReader.Close();
cn.Close();
}
}
private void Button3_Click(object sender, System.EventArgs e)
{
SqlConnection cn=new SqlConnection("server=.;database=pubs;uid=sa;pwd=");
SqlCommand cmd=new SqlCommand("select * from titles where title=@title",cn);
cmd.Parameters.Add("@title",TextBox1.Text);
cn.Open();
SqlDataReader dr=cmd.ExecuteReader();
DataGrid1.DataSource=dr;
DataGrid1.DataBind();
dr.Close();
cn.Close();
}
private void Button4_Click(object sender, System.EventArgs e)
{
SqlConnection cn=new SqlConnection("server=.;database=pubs;uid=sa;pwd=");
SqlCommand cmd=new SqlCommand("select * from titles where title like @title",cn);
cmd.Parameters.Add("@title","%"+TextBox1.Text+"%");
cn.Open();
SqlDataReader dr=cmd.ExecuteReader();
DataGrid1.DataSource=dr;
DataGrid1.DataBind();
dr.Close();
cn.Close();
}
private void Button1_Click(object sender, System.EventArgs e)
{
SqlCommand cmd=new SqlCommand();
cmd.CommandText="usp_titles";
cmd.CommandType=CommandType.StoredProcedure;
//自行设定参数
SqlParameter pa;
//存储过程的第一个参数是输出值
pa=cmd.Parameters.Add("@return",SqlDbType.Int);
pa.Direction=ParameterDirection.ReturnValue;
//存储过程的输入参数(名称必须和存储过程中的参数名称相同)
pa=cmd.Parameters.Add("@type",SqlDbType.VarChar);
pa.Direction=ParameterDirection.Input;
pa.Value=this.TextBox1.Text;
//存储过程的最后一个参数是输出值
pa=cmd.Parameters.Add("@count",SqlDbType.Int);
pa.Direction=ParameterDirection.Output;
//建立与数据库的连接
SqlConnection cn=new SqlConnection("server=.;database=pubs;uid=sa;pwd=;");
cn.Open();
cmd.Connection=cn;
//将数据读取到数据对象中
SqlDataReader dr =cmd.ExecuteReader();
this.DataGrid1.DataSource=dr;
this.DataGrid1.DataBind();
Response.Write(cmd.Parameters[0]+":"+cmd.Parameters[0].Value +"<br>");
dr.Close();//必须关闭SqlDataReader对象后才能读取输出参数以及返回值
cn.Close();
Response.Write(cmd.Parameters[1]+":"+cmd.Parameters[1].Value + "<br>");
Response.Write(cmd.Parameters[2]+":"+cmd.Parameters[2].Value + "<br>");
}
private void Button2_Click(object sender, System.EventArgs e)
{
SqlConnection sqlCon = new SqlConnection("server=.;database=pubs;uid=sa;pwd=;");
SqlCommand cmd = new SqlCommand("usp_titles",sqlCon);
cmd.CommandType = CommandType.StoredProcedure;
//从数据库获取参数
//从 SqlCommand 指定的存储过程中检索参数信息,并填充指定的 SqlCommand 对象的 Parameters 集。
sqlCon.Open();
SqlCommandBuilder.DeriveParameters(cmd);
//给各个参数赋值
cmd.Parameters[0].Direction = ParameterDirection.ReturnValue;
cmd.Parameters[1].Value = this.TextBox1.Text;
cmd.Parameters[2].Direction = ParameterDirection.Output;
SqlDataReader sqlDr =cmd.ExecuteReader();
this.DataGrid1.DataSource=sqlDr;
this.DataGrid1.DataBind();
sqlDr.Close();
sqlCon.Close();
Response.Write(cmd.Parameters[0]+":"+cmd.Parameters[0].Value +"<br>");
Response.Write(cmd.Parameters[1]+":"+cmd.Parameters[1].Value + "<br>");
Response.Write(cmd.Parameters[2]+":"+cmd.Parameters[2].Value + "<br>");
}
private void Button1_Click(object sender, System.EventArgs e)
{
SqlConnection cn=new SqlConnection();
SqlCommand cmd=new SqlCommand();
SqlDataAdapter da;
DataSet ds=new DataSet();
cn.ConnectionString="Data Source=.;Initial Catalog=pubs;User ID=sa;password=";
cmd.Connection=cn;
da=new SqlDataAdapter(cmd);
cmd.CommandText="select au_id,au_fname,au_lname from Authors";
da.Fill(ds,"Authors");
cmd.CommandText="select au_id,title_id from TitleAuthor";
da.Fill(ds,"TitleAuthor");
cmd.CommandText="select title_id,title from Titles";
da.Fill(ds,"Titles");
DataRelation Titles_TitleAuthors=new DataRelation("",ds.Tables["Titles"].Columns["title_id"],ds.Tables["TitleAuthor"].Columns["title_id"]);
ds.Relations.Add(Titles_TitleAuthors);
DataRelation Authors_TitleAuthors=new DataRelation("",ds.Tables["Authors"].Columns["au_id"],ds.Tables["TitleAuthor"].Columns["au_id"]);
ds.Relations.Add(Authors_TitleAuthors);
lblList.Text="每位作者及其写的书"+"<br>";
foreach(DataRow rowAuthor in ds.Tables["Authors"].Rows)
{
lblList.Text +="<br>" + rowAuthor["au_fname"]+" " + rowAuthor["au_lname"] + "<br>";
foreach(DataRow rowTitleAuthors in rowAuthor.GetChildRows(Authors_TitleAuthors))
{
foreach(DataRow rowTitle in rowTitleAuthors.GetParentRows(Titles_TitleAuthors))
{
lblList.Text +=rowTitle["Title"] + "<br><b>";
}
}
}
}
private void Button2_Click(object sender, System.EventArgs e)
{
SqlConnection cn=new SqlConnection();
SqlCommand cmd=new SqlCommand();
SqlDataAdapter da;
DataSet ds=new DataSet();
cn.ConnectionString="Data Source=.;Initial Catalog=northwind;User ID=sa;password=";
cmd.Connection=cn;
da=new SqlDataAdapter(cmd);
cmd.CommandText="select customerid,contactname from customers";
da.Fill(ds,"customers");
cmd.CommandText="select customerid,orderdate from orders";
da.Fill(ds,"orders");
DataRelation drC_O=new DataRelation("c_o",ds.Tables["customers"].Columns["customerid"],ds.Tables["orders"].Columns["customerid"]);
ds.Relations.Add(drC_O);
lblList.Text="每位顾客及其订货日期"+"<br>";
foreach(DataRow drC in ds.Tables["customers"].Rows)
{
lblList.Text += drC["contactname"] + "<br>";
foreach(DataRow drO in drC.GetChildRows(drC_O))
{
lblList.Text +=drO["orderdate"] + "<br>";
}
}
}
private void Button3_Click(object sender, System.EventArgs e)
{
// SqlConnection cn=new SqlConnection("server=.;database=northwind;uid=sa;pwd=");
// SqlCommand cmd=new SqlCommand();
// cmd.Connection=cn;
// SqlDataAdapter da=new SqlDataAdapter(cmd);
// DataSet ds=new DataSet();
//
// cmd.CommandText="select Customerid,contactname from customers";
// da.Fill(ds,"customers");
// cmd.CommandText="select customerid,orderdate from orders";
// da.Fill(ds,"orders");
//
// DataRelation dr=new DataRelation("c_o",ds.Tables["customers"].Columns["customerid"],ds.Tables["orders"].Columns["customerid"]);
// ds.Relations.Add(dr);
//
// for(int i=0;i<ds.Tables["customers"].Rows.Count;i++)
// {
// DataRow dw=ds.Tables["customers"].Rows[i];
// TreeNode tr=new TreeNode();
// tr.Text=dw["contactname"].ToString();
// TreeView1.Nodes.Add(tr);
// DataRow[] dwa=dw.GetChildRows(dr);
// for(int j=0;j<dwa.Length;j++)
// {
// TreeNode tr2=new TreeNode ();
// tr2.Text=dwa[j]["orderdate"].ToString();
// TreeView1.Nodes[i].Nodes.Add(tr2);
// }
//
// }
}
}
private void btnOk_Click(object sender, System.EventArgs e)
{
// string url="ChampionVoteResult.aspx";
// string para1="?name="+Server.UrlEncode(tb1.Text);
// string para2="&phone="+Server.UrlEncode(tb2.Text);
// HyperLink1.NavigateUrl=url+para1+para2;
// Response.Redirect(url+para1+para2);
// Response.Cookies["user"]["name"]=tb1.Text;
// Response.Cookies["user"]["phone"]=tb2.Text;
// Response.Cookies["user"].Expires=DateTime.Now.AddHours(1);
// Response.Cookies["name"].Value=tb1.Text;
// Response.Cookies["name"].Expires=DateTime.Now.AddDays(1);
// Response.Cookies["phone"].Value=tb2.Text;
// Response.Cookies["phone"].Expires=DateTime.Now.AddDays(1);
Server.Transfer("ChampionVoteResult.aspx");
}
// private void btnAbandon_Click(object sender, System.EventArgs e)
// {
// Session.Abandon();
// }
//
// private void btnVar_Click(object sender, System.EventArgs e)
// {
// Session["Name"]=txtVar.Text;
// Session.Timeout=int.Parse(txtTime.Text);
// }
//
// private void btnShow_Click(object sender, System.EventArgs e)
// {
// name.Text=(string)Session["Name"];
// time.Text=Session.Timeout.ToString();
// }
}
}
ViewState是ASP.NET中用来保存WEB控件回传时状态值一种机制。在WEB窗体(FORM)的设置为runat="server",这个窗体(FORM)会被附加一个隐藏的属性_VIEWSTATE。_VIEWSTATE中存放了所有控件在ViewState中的状态值。
ViewState是类Control中的一个域,其他所有控件通过继承Control来获得了ViewState功能。它的类型是system.Web.UI.StateBag,一个名称/值的对象集合。
当请求某个页面时,ASP.NET把所有控件的状态序列化成一个字符串,然后做为窗体的隐藏属性送到客户端。当客户端把页面回传时,ASP.NET分析回传的窗体属性,并赋给控件对应的值。当然这些全部是由ASP.NET负责的,对用户来说是透明的。
使用ViewState的条件
如果要使用 ViewState,则在 ASPX 页面中必须有一个服务器端窗体标记 (<form runat=server>)。窗体字段是必需的,这样包含 ViewState 信息的隐藏字段才能回传给服务器。而且,该窗体还必须是服务器端的窗体,这样在服务器上执行该页面时,ASP.NET 页面框架才能添加隐藏的字段。
Page 的 EnableViewState 属性值为 true。
控件的 EnableViewState 属性值为 true。
页面本身将 20 字节左右的信息保存在 ViewState 中,用于在回传时将 PostBack 数据和 ViewState 值分发给正确的控件。因此,即使该页面或应用程序禁用了 ViewState,仍可以在 ViewState 中看到少量的剩余字节。
设置ViewState
ViewState可以在控件,页,程序,全局配置中设置。缺省情况下 EnableViewState 为 true 。如果要禁止所有页面 ViewState 功能,可以在程序配置中把 EnableViewState 设为 false 。
在控件中:
<asp:DataGridEnableViewState="false"%>
或
DataGrid1.EnableViewState= false;
在页中:
<%@ PageEnableViewState="false" %>
或
Page.EnableViewState= false;
在程序中:
在web.config中加入
<pages enableViewState="false" />
在全局配置:
在machine.config中修改
<pages enableViewState="false" />
EnableViewState优先级别:
全局配置 < 程序 < 页< 控件
注意:下列服务器控件不能禁止ViewState
Textbox
Checkbox
Checkbox List
RadioButtonList
上面控件的状态通过IPostBackEventHandler 和 IPostBackDataHandler接口处理,而不是ViewState的机制,所以EnableViewState没有效果。
ViewState对象
在页面回传间通信,ASP中一般利用窗体的属性和 session 来存放数据,在 ASP.NET 中也可以使用 ViewState 对象来做同样的处理。
在ViewState存放数据:
ViewState[key]= value;
或
ViewState.Add(key,value);
取出数据:
TempStr =ViewState[key];
key不存在时返回空。
不能通过ViewState对象来访问控件的值。
动态建立控件的ViewState:
当需要动态地建立一个服务器控件,如下建立了一个 RadioButton 控件并加入到窗体控件集合中:
RadioButton rb = new RadioButton();
Page.Controls[1].Controls.Add(pc);
上面的代码增加一个控件到控件集合末,同样也可以插入到已有控件中的任何位置。
RadioButton rb = new RadioButton();
Page.Controls[1].Controls.AddAt(1,pc);
通常,这些动态生成的控件的状态也需要生成到 ViewState 中去,但这个功能并没有完全实现,特别是生成的控件插入到已有的控件中时。
当动态生成控件和已有控件并存时 ViewState 的结果是不可预料的。在页面回传时,首先非动态生成的控件在ASPX页中被生成,并在 Page_Init 和 Page_Load 事件中读取 ViewState。当页面的控件读取 ViewState 的值时,那些动态生成的控件却还没有被生成,所以当动态生成的控件被
生成时,页面就会省略掉ViewState或者以剩下或许错误的 ViewState 来填充控件。
所以,当需要插一个动态生成的控件到已有控件中去时,最好把这个控件的 ViewState 通过EnableViewState禁止掉。
提醒:
1. 当存在页面回传时,不需要维持控件的值就要把 ViewState 禁止。
2. ViewState的索引是大小写敏感的。
3. ViewState不是跨页面的。
4. 为了能包存在 ViewState 中,对象必须是可流化或者定义了 TypeConverter。
5. 控件 TextBox 的 TextMode 属性设置为 Password时,它的状态将不会被保存在 ViewState 中,这应该是出于安全性的考虑。
6. 在页面没有回传 或 重定向 或 在回传中转到(transfer)其他页面时不要使用 ViewState。
7. 在动态建立控件时要小心它的 ViewState。
8. 当禁止一个程序的 ViewState 时,这个程序的所有页面的 ViewState 也被禁止了。
9. 只有当页面回传自身时ViewState 才是持续的。
最后略提一句在Stryon(http://www.stryon.com.cn)公司的产品iNET(转换.NET APP成Java代码,http://208.49.57.227:8080/downloads/Default.aspx )中用Java 实现ViewState ,使用上没什么区别。
using System;
using System.Security.Cryptography;
using System.Text.RegularExpressions;
using System.Web;
using System.Collections;
namespace CookieLogin
{
/// <summary>
/// Users 的摘要说明。
/// </summary>
public class Users
{
public const string CK_UserCookie="UserCookie";
public const string CK_UserName="UserName";
public const string CK_UserPassword="UserPassword";
/// <summary>
/// 用户登录,将用户名保存到用户的 Cookie 中
/// </summary>
/// <param name="userName">用户名称</param>
/// <param name="userPwd">用户密码</param>
/// <param name="saveCookie">是否记住用户名称</param>
/// <returns>如果用户登陆成功则返回真值</returns>
public static bool UserLogin(string userName, string userPwd, bool saveCookie)
{
// 将用户的密码以MD5算法加密
string userMd5Pwd=GetMd5Password(userPwd);
if(JudgeUser(userName, userMd5Pwd))
{
if(saveCookie)
{
// 设置 COOKIE 信息
HttpCookie cookie=new HttpCookie(Users.CK_UserCookie);
cookie.Values.Add(Users.CK_UserName, userName);
cookie.Values.Add(Users.CK_UserPassword, userMd5Pwd);
// COOKIE 永不过期
cookie.Expires=new DateTime(9999, 12, 31);
// 保存用户的 COOKIE
HttpContext.Current.Response.Cookies.Add(cookie);
}
return true;
}
else
{
return false;
}
}
/// <summary>
/// 判断用户名称与密码是否匹配
/// </summary>
/// <param name="userName">用户名称</param>
/// <param name="userMd5Pwd">加密后密码</param>
/// <returns>如果用户名称与密码匹配则返回真值</returns>
public static bool JudgeUser(string userName, string userMd5Pwd)
{
Hashtable UserList=new Hashtable();
UserList.Add("admin",GetMd5Password("999"));
UserList.Add("guest",GetMd5Password("111"));
if(!UserList.ContainsKey(userName))
return false;
if(UserList[userName].ToString()!=userMd5Pwd)
return false;
return true;
}
/// <summary>
/// 注销用户登录,清除用户 Cookie
/// </summary>
public static void Logout()
{
//从相应Response中得到Cookies
HttpCookie cookie=HttpContext.Current.Response.Cookies[Users.CK_UserCookie];
if( cookie!=null)
cookie.Expires=DateTime.Now;
}
/// <summary>
/// 用户是否设置为自动登录
/// </summary>
/// <returns>如果用户Cookies信息正确则返回真值</returns>
public static bool AutoLogin()
{
//从请求Request中得到Cookies
HttpCookie cookie=HttpContext.Current.Request.Cookies[Users.CK_UserCookie];
if(cookie!=null)
{
string userName=cookie.Values[Users.CK_UserName];
string userMd5Pwd=cookie.Values[Users.CK_UserPassword];
if(userName!=null && userMd5Pwd!=null)
return JudgeUser(userName, userMd5Pwd);
else
return false;
}
else
{
return false;
}
}
/// <summary>
/// 将用户密码以 Md5 加密算法加密
/// </summary>
/// <param name="userPwd">获取加密后的密码字符串</param>
/// <returns>加密前的密码字符串</returns>
public static string GetMd5Password(string userPwd)
{
// 将密码字符串转化成字节数组
byte[] byteArray=GetByteArray(userPwd);
// 计算Md5密码
byteArray=(new MD5CryptoServiceProvider()).ComputeHash(byteArray);
// 将字节码转化成字符串并返回
return BitConverter.ToString(byteArray);
}
/// <summary>
/// 将字符串翻译成字节数组
/// </summary>
/// <param name="src">字符串</param>
/// <returns>字节数组</returns>
private static byte[] GetByteArray(string src)
{
byte[] byteArray=new byte[src.Length];
for(int i=0; i<src.Length; i++)
byteArray[i]=Convert.ToByte(src[i]);
return byteArray;
}
}
}