asp.net技术文章

    技术2022-05-11  70

    ASP.NET技术文章 1.   ADO.NET数据库实例教程 ADO.NET数据库编程比较复杂,名目繁多的类、对象、属性、方法让每一个编程者都感觉恼火。本文旨在介绍ASP.NET Beta2数据库编程的主要内容,帮助编程者最快的了解ADO.NET数据库编程的精髓。   一、 Managed Providers   如果你是初学者,可能你会问,什么是"Managed Providers"?   Managed Providers提供简单的方法连接和访问数据库,有点类似于数据库连接,当然又比它强的多。Managed Providers提供OleDb和SQL Server两种编程接口。因为SQL Server是微软自己的产品,因此,专门提供了一个针对SQL Server的接口,使用这个接口访问SQL Server的效率应该比使用OleDb强。   NameSpaces   本文所有的例子程序都需要使用以下NameSpaces: <%@ Import Namespace="System.Data" %> <%@ Import Namespace="System.Data.Oledb" %>    Connection   为了连接数据库,必须使用OleDbConnection: Dim objConn as New OleDBConnection ("Provider=Microsoft.Jet.OLEDB.4.0; Data Source=e:/sff/site/db/users.mdb")    当然,你也可以将具体的连接方法作为变量使用,在连接数据库以后,必须打开数据库: objConn.Open()    这样,就可以使用数据库了,一般在最后,我们都要求关闭数据库连接: objConn.Close() objConn=Nothing    Command   连接数据库以后,就可以发送命令对数据库进行操作了,OleDbCommand允许发送命令对数据库进行操作。根据发送的SQL语句,我们可以对数据库进行几乎所有操作。 Dim objCmd as New OleDbCommand("SELECT * From users", objConn)    以上语句建立Command,根据习惯不同,也可以使用以下方法: Dim objCmd as New OleDbCommand() objCmd.Connection = objConn objCmd.CommandText = "SELECT * FROM users"    还可以这样: Dim objCmd as New OleDbCommand(SQL String, connection string)    仔细观察上面的语句,我们发现在定义OleDbCommand时,可以同时使用数据库连接OleDbConnection和数据库连接语句。以上代码并没有执行SQL语句,现在我们来看到底怎样执行:   ExecuteNonQuery   当执行没有返回数据的操作的时候,我们可以使用以上方法,比如插入数据、更新数据等操作,具体这样执行: objCmd.ExecuteNoQuery    ExecuteReader   在需要一个Data Reader的时候,我们可以使用以上方法,具体这样执行: Dim objRd as OleDbDataReader objRd = objCmd.ExeuteReader    ExecuteScalar   使用ExecuteScalar方法来取得一个单个地返回数据,比如对数据的统计。   Data Reader   OleDbReader是专门用来读取数据的对象,这个对象除了读数据以外,不能做其他任何数据库操作。尽管比较简单,但是在用来浏览数据的时候效率是非常高的。 Dim objReader as OleDbDataReader objReader = objCmd.ExecuteReader  While objReader.Read Response.Write(objReader.GetString(0) & "<br>") End While    以上语句读取Command的返回结果的第一个字段,这个字段是字符型数据。我们可以使用其他方法取得各种类型的数据:     GetBoolean(x)      GetByte(x)      GetBytes(x)      GetChar(x)      GetChars(x)      GetDataTypeName(x) -取得数据类型    GetDateTime(x)      GetDecimal(x)      GetDefaultStream(x)      GetDouble(x)      GetFieldType(x)      GetFloat(x)      GetGuid(x)      GetInt16(x)      GetInt32(x)      GetInt64(x)      GetName(x) - 取得字段名      GetOrdinal(name) -根据字段名取得字段序号     GetString(x)      GetTimeSpan(x)      GetValue(x)      GetValues(values())    以上方法都是Command返回数据。   Data Adapter   OleDbDataAdapter取得数据并且数据与DataSet之间建一座桥梁,可以这样使用: Dim objAdapter as New OleDbDataAdapter("SELECT * FROM users", objConn)    实现方法有点类似于OleDbCommand。OleDbAdapter可以填充DataSet,也可以修改数据然后提以实现对具体数据的修改: Dim ds as Dataset = New DataSet() objAdapter.Fill(ds, "users")    以上语句实现将SQL语句取得的Users表的数据填充到DataSet。   Mappings   Mappings可以实现对DataSet的列取别名: objAdapter.TableMappings.Add("adbtable", "users") With objAdapter.TableMappings(0).ColumnMappings .Add("PID", "ID") .Add("LastName", "LName") .Add("StreetAddress", "Addy") End With objAdapter.Fill(ds)    当使用了以上代码以后,就可以用ds.Tables("users")来代替ds.Tables("adbtable")了。   Command Builder   在下一章我们可以看到Command Builder的具体使用和强大功能。   练习:   如果你能理解以下代码,你就可以看下一章的内容了: <%@ Import Namespace="System.Data" %> <%@ Import Namespace="System.Data.Oledb" %> <script language="VB" runat="server"> Sub Page_Load(sender as object, e as eventargs) Dim objConn as New OleDBConnection("Provider=Microsoft.Jet.OLEDB.4.0; Data Source=e:/sff/site/db/users.mdb") objConn.Open() Dim ds as Dataset = New DataSet() Dim objAdapter as New OleDbDataAdapter("SELECT * FROM users", objConn) Dim objCmdBld As New OleDbCommandBuilder(objAdapter) objAdapter.Fill(ds, "users") End Sub </script> 2. 访问数据库(Access) 我们这次同样通过例子来看,其中我们用到了System.Data.OleDb.OleDbCommand类,其实,我们在前面执行SELECT的时候也用到了!  下面我写出我的程序:  //修改留言本中特定的数据  public Boolean UpdateNote(Notebook note)  {  Boolean tempvalue=false;  string sqlstr=""; //当时在这里定义,是为了在出现异常的时候看看我的SQL语句是否正确  try  {  //用到了我前面写的那个得到数据库连接的函数  OleDbConnection conn = getConn(); //getConn():得到连接对象,  conn.Open();  //确定我们需要执行的SQL语句,本处是UPDATE语句!  sqlstr = "UPDATE notes SET ";  sqlstr += "title='" + note.title + "',";  sqlstr += "content='" + DealString(note.content) +"',";  sqlstr += "author='" + note.author + "',";  sqlstr += "email='" +note.email +"',";  sqlstr += "http='" +note.http +"'";  //sqlstr += "pic='" +note.pic +"'";  sqlstr += " where id=" + note.id;  //定义command对象,并执行相应的SQL语句  OleDbCommand myCommand = new OleDbCommand(sqlstr,conn);  myCommand.ExecuteNonQuery(); //执行SELECT的时候我们是用的ExecuteReader()  conn.Close();  //假如执行成功,则,返回TRUE,否则,返回FALSE  tempvalue=true;  return(tempvalue);  }  catch(Exception e)  {  throw(new Exception("数据库更新出错:" + sqlstr + "/r" + e.Message))  } }  这个例子是对于特定ID好的记录进行UPDATE操作,具体解释我都写在了程序中,其中的与数据库有关的语句是try内部的那些!  其实,我们同样可以通过上面的那种模式执行INSERT、DELETE操作,下面我把我的程序列到下面!  /*删除特定记录,通过string类型的ID删除字段,在我的程序中,我把这个函数重载了,这样我们就可以通过INT类型的ID参数来删除特定的字段了*/  public Boolean DelNote(string delid)  {  Boolean tempvalue=false;  string sqlstr="";  //连接数据库  try  {  OleDbConnection conn = getConn(); //getConn():得到连接对象  conn.Open();  sqlstr = "delete * from notes where id=" + delid;  //定义command对象,并执行相应的SQL语句  OleDbCommand myCommand = new OleDbCommand(sqlstr,conn);  myCommand.ExecuteNonQuery();  conn.Close();  //假如执行成功,则,返回TRUE,否则,返回FALSE  tempvalue=true;  return(tempvalue);  }  catch(Exception e)  {  throw(new Exception("数据库更新出错:" + sqlstr + "/r" + e.Message))  }  }  细心的朋友们应该能看到,其实这个程序和上面的相比,只是哪个SQL语句不同而已,其他的都基本一样的!同样的,我们想在数据库中插入新的记录的时候也可以用这样的方式,程序如下:  //向留言本中添加数据  public Boolean AddNote(Notebook note)  {  Boolean tempvalue=false; //定义返回值,并设置初值  //下面把note中的数据添加到数据库中!  try{  OleDbConnection conn = getConn(); //getConn():得到连接对象  conn.Open();  //设置SQL语句  string insertstr="INSERT INTO notes(title, content, author, email, http, pic ,hits,posttime) VALUES ('";  insertstr += note.title +"', '";  insertstr += DealString(note.content) + "','";  insertstr += note.author + "','";  insertstr += note.email + "','";  insertstr += note.http + "','";  insertstr += note.pic + "',";  insertstr += note.hits + ",'";  insertstr += note.posttime +"')";  OleDbCommand insertcmd = new OleDbCommand(insertstr,conn)  insertcmd.ExecuteNonQuery()  conn.Close();  tempvalue=true;  }  catch(Exception e)  {  throw(new Exception("数据库出错:" + e.Message))  }  return(tempvalue);  }  //处理数据,在把数据存到数据库前,先屏蔽那些危险字符!  public string DealString(string str)  {  str=str.Replace("<","<");  str=str.Replace(">",">");  str=str.Replace("/r","<br>");  str=str.Replace("/'","’");  str=str.Replace("/x0020"," ");  return(str);  }  //恢复数据:把数据库中的数据,还原成未处理前的样子  public string UnDealString(string str)  {  str=str.Replace("<","<");  str=str.Replace(">",">");  str=str.Replace("<br>","/r");  str=str.Replace("’","/'");  str=str.Replace(" ","/x0020");  return(str);  }  我同时列出了两个函数UnDealString()和DealString( ),他们是对与输入内容做一些事先的处理和还原工作的! 数据存储的一个实例 <% @ Page Language="C#" %> <% @ Import Namespace="System.Data" %> <% @ Import Namespace="System.Data.OleDb" %> <Script Language="C#" Runat="Server"> public string myConnstring="Provider=Microsoft.Jet.OleDb.4.0;Data Source=" + System.Web.HttpContext.Current.Server.MapPath("test.mdb"); OleDbConnection MyConnection; public void Page_Load(Object src,EventArgs e) { //用户提交数据 } public void submit_Click(Object src,EventArgs e) { string username1 = Request.Form["username"]; string address1 = Request.Form["address"]; string school1 = Request.Form["school"]; string strInsert="insert into aspcn(username,address,school) values('"+username1+"','"+address1+"','"+school1+"')"; //开始联结 try { MyConnection = new OleDbConnection(myConnstring); OleDbCommand MyCommand = new OleDbCommand(strInsert,MyConnection); MyConnection.Open(); MyCommand.ExecuteNonQuery(); MyConnection.Close(); Info.Text="数据已经保存"; } catch(Exception ee) { Info.Text="发生错误:"+ee.Message; } } </script> <html> <head> <title></title> </head> <body> <asp:Label id="Info" runat=server /><br> <form runat="server"> 用户名:<input type="text" name="username"  size="20" ><br> 住址:<input type="text" name="address"  size="20" ><br> 学校:<input type="text" name="school" size="20" ><br> <input type="button" value="提交" runat="server" OnServerClick="submit_Click" >     <p>1</p> </form> </body> </html> 有关DataGrid显示数据的问题 经常碰到DataGrid中要显示一个数据,先要用IF语句判断其值,然后决定怎样显示.问题是,DataGrid中不可直接写条件语句,怎样实现呢?这里我用了两种方法。 方法一:在把数据绑定到DataSet后,更改里面的数据,例如: SqlDataAdapter myCmd=new SqlDataAdapter(strSql,myConn);  DataSet ds=new DataSet();  myCmd.Fill(ds,"操作员");  for(int i=0;i<ds.Tables[0].Rows.Count;i++)  {   if(ds.Tables[0].Rows[i]["Oper_state"].ToString()=="1")    ds.Tables[0].Rows[i]["Oper_state"]="有效";   else if(ds.Tables[0].Rows[i]["Oper_state"].ToString()=="0")    ds.Tables[0].Rows[i]["Oper_state"]="冻结"; } MyDataGrid.DataSource=ds.Tables["操作员"].DefaultView; MyDataGrid.DataBind(); 方法二:通过写一个函数,把绑定到DataGrid某一列的数据转化成要显示字符串,例如: SqlDataAdapter myCmd=new SqlDataAdapter(strSql,myConn);  DataSet ds=new DataSet();  myCmd.Fill(ds,"操作员"); MyDataGrid.DataSource=ds.Tables["操作员"].DefaultView; MyDataGrid.DataBind(); 在DataGrid摸版列里这样绑定数据: <%# TurnToStatus(DataBinder.Eval(Container.DataItem,"Oper_state").ToString()) %>

    最新回复(0)