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()) %>
转载请注明原文地址: https://ibbs.8miu.com/read-31830.html