ADO.NET数据库
ASP.NET提供了ADO.NET技术,它是ASP.NET应用程序与数据库进行交互的一种技术。
ADO.NET技术把对数据库的操作分为几个步骤,并为每个步骤提供对象来封装操作过程,从而使对数据库的操作变得简单易行。
ADO.NET组件通过以下两个主要的组件将数据访问与数据处理分离:
1. ADO.NET体系结构的一个核心元素是.NET数据提供程序,它是专门为数据处理以及快速地只进、只读访问数据而设计的组件,包括Connection、Command、DataReader和DataAdapter对象的组件。
2. DataSet是ADO.NET体系结构中另一个核心组件,它是专门为各种数据源的数据访问独立性而设计的,所以它可以用于多个不同的数据源、XML数据或管理应用程序的本地数据,如内存中的数据高速缓存。
基本的SQL
1.选择数据
SELECT语句语法:
SELECT 列名1,列名2,列名3,...FROM 表名(SELECT * FROM 表名),例如:
SELECT * FROM Student
该SQL语句表示从Student表中选取所有的列。
SELECT 列名1,列名2,列名3,...FROM 表名 ORDER BY 列名1 ASC/DESC,列名2 ASC/DESC,列名3 ASC/DESC...(ASC表示升序,DESC表示降序)
SELECT * FROM Student ORDER BY StuName DESC。
该SQL语句表示从Student表中选取所有的列并按照StuName降序排序。
SELECT 列名1,列名2,列名3,...FROM 表名 WHERE子句 ORDER BY 列名1 ASC/DESC,列名2 ASC/DESC,列名3 ASC/DESC... (WHERE子句是条件子句,WHERE子句能够对条件进行设置,只有满足条件的行才会显示到结果中)。
SELECT * FROM Student WHERE StuClass=‘中药一班’
有时选择条件不止一个,这时需要逻辑连接符把这些条件连接起来,常用的逻辑连接符有AND和OR,AND表示关系与,OR表示关系或。
SELECT * FROM Student WHERE StuClass=‘中药一班’OR StuClass=‘中药二班’
2.插入数据
INSERT INTO 表名(列名1,列名2,列名3,...)
VALUES(值1,值2,值3,...)
向Student表中添加一条数据,SQL语句如下:
INSERT INTO Student(StuName,StuClass,StuSex)
VALUES(‘李莹’,‘中药三班’,‘女’)
也可以采用下面的语句实现:
INSERT INTO Student
VALUES(‘李莹’,‘中药三班’,‘女’)
此语句忽略了列名,此时会按照列在数据表中的排列顺序逐个插入。在执行INSERT语句时值与列的数据类型必须一致,否则会报错。
3.更新数据
UPDATE 表名 SET
列名1=值1,
列名2=值2,
...
WHERE子句
更新Student表中的数据:
UPDATE Student Set
StuClass=“中药四班”,
WHERE StuName=“李莹”
4.删除数据
DELETE FROM 表名 WHRER子句
在VS中执行数据查询
查询数据可以使用SQL语句实现,也可以使用SQL SERVER提供的管理工具来生成和测试SQl语句。在VS中执行数据查询的操作如下:
1.在“服务器资源管理器”窗口中,找到“表”节点。
2.右键单击“表”节点,在弹出的菜单中选择“新建查询”。
3.在弹出的“添加表”对话框中选择要操作的表、视图、函数、同义词,单击“添加”,在新建的查询窗口中会显示被选中的对象。
创建数据库
在编写ASP.NET网站应用程序之前,首先要做的是设计和创建数据库。
连接数据库
.NET Framework数据提供程序使用Connection对象提供与Microsoft SQL Server 的连接。
SqlConnection连接字符串常用参数:
1.Data Source:数据库服务器的名称。
2.Initial Catalog:数据库的名称。
3.Integrated Security:决定连接是否是安全的,取值可以是True、False或SSPI。
4.User ID:SQL Server登录帐户。
5.Password:SQL Server帐户的登录密码。
创建数据库连接
可以通过以下方式创建数据库连接:
1.使用Connection对象创建数据库连接。
![](https://images.cnblogs.com/OutliningIndicators/ContractedBlock.gif)
1 SqlConnection connection=new SqlConnection(); 2 connection.ConnectionString="server=localhost; Integrated Security=True;Initial Catalog=SuperMarket";
2.使用连接字符串来初始化SqlConnection对象创建数据库连接。
![](https://images.cnblogs.com/OutliningIndicators/ContractedBlock.gif)
1 string connectionString = "Data Source=追风的蜗牛;Initial Catalog=Adrotator;Integrated Security=True"; 2 SqlConnection connection = new SqlConnection(connectionString);
3.使用构造函数来初始化SqlConnection对象创建数据库连接。
构造函数
![](https://images.cnblogs.com/OutliningIndicators/ContractedBlock.gif)
1 public class ConnectionString 2 { 3 public static string connectionString = "Data Source=追风的蜗牛;Initial Catalog=Adrotator;Integrated Security=True"; 4 }
4.初始化SqlConnection对象,创建数据库连接。
![](https://images.cnblogs.com/OutliningIndicators/ContractedBlock.gif)
SqlConnection connection = new SqlConnection(ConnectionString.connectionString);
5.获取在配置文件中的<connectionStrings>节中利用键值对存储的数据库连接字符串,创建数据库连接。
利用键值对存储数据库连接字符串。
![](https://images.cnblogs.com/OutliningIndicators/ContractedBlock.gif)
1 <connectionStrings > 2 <add name="connection1" connectionString="Data Source=追风的蜗牛;Initial Catalog=Adrotator;Integrated Security=True"/> 3 </connectionStrings>
获取配置文件中的数据库连接字符串。
![](https://images.cnblogs.com/OutliningIndicators/ContractedBlock.gif)
1 SqlConnection connection = new SqlConnection(System.Web.Configuration.WebConfigurationManager.ConnectionStrings["connection1"].ConnectionString.ToString());
查看连接信息
![](https://images.cnblogs.com/OutliningIndicators/ContractedBlock.gif)
1 try 2 { 3 connection.Open(); 4 Response.Write("服务器版本:" + connection.ServerVersion.ToString()); 5 Response.Write("<br>数据库名称:" + connection.Database.ToString()); 6 Response.Write("<br>数据库连接:" + connection.State.ToString()); 7 connection.Close(); 8 } 9 catch (Exception ex) 10 { 11 Response.Write("连接错误!" + ex.Message.ToString()); 12 } 13 finally 14 { 15 connection.Close(); 16 }
获取数据
1.Command对象
Command对象使用SELECT、INSERT、UPDATE、DELETE等SQL命令与数据源通信,此外,Command对象还可以调用存储过程操作数据库。
创建Command对象的方法:
1.创建Command对象,指定SQL命令,设置可利用的数据库连接。
![](https://images.cnblogs.com/OutliningIndicators/ContractedBlock.gif)
1 SqlCommand command = new SqlCommand(); 2 command.Connection = connection; 3 command.CommandText = "select * from Advertisements";
2.在创建Command对象时指定SQL命令和可利用的数据库连接。
![](https://images.cnblogs.com/OutliningIndicators/ContractedBlock.gif)
1 SqlCommand command = new SqlCommand("select * from Advertisements", connection);
2.DataReader对象
可以使用DataReader从数据库中检索只读、只进的数据流。“只读”,是指在数据阅读器DataReader上不可更新、删除、增加记录。“只进”是指记录的接收是顺序进行且不可后退的。
数据阅读器DataReader接收到的数据是以数据库的记录为单位的。查询结果在查询执行时返回,并存储在客户端的网络缓冲区中,直到用户使用DataReader的Read方法对它们发出请求。
使用DataReader可以提高应用程序的性能,原因是它只要数据可用就立即检索数据,并且在默认情况下一次只在内存中存储一行,减少了系统开销。
在创建一个Command对象的实例之后,可以通过对命令调用ExecuteReader方法来创建DataReader,该方法从在Command对象中指定的数据源检索一些行,填充DataReader。
使用
1.获取数据并绑定到控件中。
在Default.aspx中:
![](https://images.cnblogs.com/OutliningIndicators/ContractedBlock.gif)
1 <div> 2 <asp:Label ID="Label1" Text="请选择:" runat="server" /> 3 <asp:DropDownList ID="DropDownList1" runat="server" AutoPostBack="true" OnSelectedIndexChanged="DropDownList1_SelectedIndexChanged"> 4 <asp:ListItem Text="请选择" Enabled="true"></asp:ListItem> 5 </asp:DropDownList> 6 <br /> 7 <asp:Label ID="Label2" runat="server" Text="广告的详细信息:" /> 8 <br /> 9 <asp:Label ID="Label3" runat="server" Height="200" Width="300" /> 10 </div>
在Default.aspx.sc中:
![](https://images.cnblogs.com/OutliningIndicators/ContractedBlock.gif)
1 protected void Page_Load(object sender, EventArgs e) 2 { 3 if (!this.IsPostBack) 4 { 5 SqlCommand command = new SqlCommand("select AlternateText,ID from Advertisements", connection); 6 SqlDataReader dataReader; 7 try 8 { 9 connection.Open(); 10 dataReader = command.ExecuteReader(); 11 12 while (dataReader.Read()) 13 { 14 ListItem listItem = new ListItem(); 15 listItem.Text = dataReader["AlternateText"].ToString(); 16 listItem.Value = dataReader["ID"].ToString(); 17 DropDownList1.Items.Add(listItem); 18 } 19 dataReader.Close(); 20 } 21 catch (Exception ex) 22 { 23 Label3.Text = "读取失败" + ex.Message.ToString(); 24 } 25 finally 26 { 27 connection.Close(); 28 } 29 } 30 }
2.获取控件数据信息并查询。
在Default.aspx.sc中:
![](https://images.cnblogs.com/OutliningIndicators/ContractedBlock.gif)
1 protected void DropDownList1_SelectedIndexChanged(object sender, EventArgs e) 2 { 3 SqlConnection connection = new SqlConnection(System.Web.Configuration.WebConfigurationManager.ConnectionStrings["connection1"].ConnectionString.ToString()); 4 string selectSql = "select * from Advertisements where ID='" + DropDownList1.SelectedItem.Value + "'";//定义SQL语句获取广告信息 5 6 SqlCommand command = new SqlCommand(selectSql, connection); 7 SqlDataReader dataReader; 8 try 9 { 10 connection.Open(); 11 dataReader = command.ExecuteReader(); 12 dataReader.Read(); 13 string stringText; 14 stringText ="ID:"+ dataReader["ID"].ToString() + "<br>" +"图片地址:"+ dataReader["ImageUrl"].ToString() + "<br>" +"链接地址:"+ dataReader["NavigateUrl"].ToString() + "<br>" +"显示频率:"+ dataReader["Impressions"].ToString() + "<br>" +"描述信息:"+ dataReader["AlternateText"].ToString(); 15 Label3.Text = stringText.ToString(); 16 dataReader.Close(); 17 18 } 19 catch (Exception ex) 20 { 21 Label3.Text = "读取失败" + ex.Message.ToString(); 22 } 23 finally 24 { 25 connection.Close(); 26 } 27 }
3.DataAdapter对象
DataAdapter对象充当数据库和ADO.NET对象模型中非连接对象之间的桥梁,能够用来保存和检索数据。DataAdapter对象类的Fill方法用于将查询结果引入DataSet或DataTable中,以便能够脱机处理数据。根据不同的数据源DataAdapter对象,可以分为四类:
1.SqlDataAdapter:用于对SQL Server数据库执行命令。
2.OleDBDataAdapter:用于对支持OleDB的数据库执行命令。
3.OdbcDataAdapter:用于支持Odbc的数据库执行命令。
4.OracleDataAdapter:用于对Oracle数据库执行命令。
使用SqlDataAdapter的步骤:
1. 建立数据库连接。
2. 建立SqlCommand对象,设置要执行的SQL语句
3. 建立并实例化一个SqlDataAdapter对象。
4. 建立一个DataSet对象,用于接收执行SQL命令返回的数据集。
5. 填充数据集。
6. 绑定数据控件。
7. 关闭数据库连接。
4.DataSet对象
DataSet在ADO.NET对实现从数据库抽取数据起到关键作用,数据从数据库完成数据抽取后存放在DataSet中,是各种数据源中的数据在计算机内存中映射成的缓存,从某种意义上可以把DataSet可以看成是一个数据容器。
DataSet也被称为内存中的数据库,因为在DataSet可以包含很多数据表以及数据表之间的关系。
DataSet在客户端实现读取、更新数据库等过程中起到了中间部件的作用。
DataSet从数据源中获取数据后就会断开与数据源之间的连接。允许在DataSet中定义数据约束和表关系,增加、删除和编辑记录,还可以对DataSet中的数据进行查询、统计等。当完成了各项操作以后还可以把DataSet中的数据送回数据源。DataSet的产生满足了多层分布式程序的需要,它能够在断开数据源的情况下对存放在内存中的数据进行操作,这样可以提高系统整体性能,而且有利于扩展。
创建DataSet的方式
1.建立一个空的数据集,然后再把建立的数据表放到该数据集里。
DataSet dataSet = new DataSet();
2.先建立数据表,然后再建立包含数据表的数据集。
DataSet dataSet = new DataSet(“表名”);
DataSet中经常使用的类
1.DataTable。称为数据表,用来存放数据。一个Dataset对象可以包含多个DataTable,每个DataTable可以包含多个DataRow和DataColumn。
它的创建方式有两种:
1.数据加载DataSet时会自动创建DataTable。
2.以编程方式创建DataTable的对象,然后将对象添加到DataSet的Tables集合中。
从DataSet中提取DataTable
DataSet dataset=new DataSet();
DataTable dataTable=dataset.数据表名
2.DataRow。数据表里的行,是给定DataTable中的一行数据(记录)。DataRow对象的方法提供了对表中数据的增加、删除、更新、查询等功能。
提取表中的一行数据(记录)
DataRow dataRow=DataTable.Row[n];
3.DataColumn。数据表中的列,定义了数据表的数据结构。
获取某列的值需要在数据行的基础上进行
string str=dataRow.Column[“字段名称”].ToString();
或string str=dataRow.Column[“索引”].ToString();
4.DataRelation。
使用DataRelation通过DataColumn对象将两个DataTable对象相互关联,此类关系类似于关系数据库中的主键/外键关系。关系是在父表和子表中匹配的列之间创建的,两个列的数据类型必须相同。
创建DataRelation时,首先要验证是否可以创建关系。在将它添加到DataRelationCollection之后,通过禁止会使关系无效的任何更改来维持此关系。在创建DataRelation和将其添加到DataRelationCollection之间的这段时间,可以对父行或子行进行其他更改,但是会使关系失效,会产生异常。
使用
在配置文件中添加以下内容:
![](https://images.cnblogs.com/OutliningIndicators/ContractedBlock.gif)
1 <connectionStrings > 2 <add name="connection1" connectionString="Data Source=追风的蜗牛;Initial Catalog=Adrotator;Integrated Security=True"/> 3 </connectionStrings>
在Default.aspx.cs中添加以下内容:
![](https://images.cnblogs.com/OutliningIndicators/ContractedBlock.gif)
1 <div> 2 <asp:Label ID="Label1" Text="请选择:" runat="server" /> 3 <asp:DropDownList ID="DropDownList1" runat="server" AutoPostBack="true" OnSelectedIndexChanged="DropDownList1_SelectedIndexChanged"> 4 <asp:ListItem Text="请选择" Enabled="true"></asp:ListItem> 5 </asp:DropDownList> 6 <br /> 7 <asp:Label ID="Label2" runat="server" Text="广告的详细信息:" /> 8 <br /> 9 <asp:Label ID="Label3" runat="server" Height="200" Width="300" /> 10 </div>
Default.aspx.cs中的代码如下:
![](https://images.cnblogs.com/OutliningIndicators/ContractedBlock.gif)
1 using System; 2 using System.Collections.Generic; 3 using System.Data; 4 using System.Data.SqlClient; 5 using System.Linq; 6 using System.Text; 7 using System.Web; 8 using System.Web.UI; 9 using System.Web.UI.WebControls; 10 11 namespace WebApplication1 12 { 13 public partial class Default : System.Web.UI.Page 14 { 15 private static DataSet dataSet = new DataSet(); 16 public class ConnectionString 17 { 18 public static string connectionString = "Data Source=追风的蜗牛;Initial Catalog=Adrotator;Integrated Security=True"; 19 } 20 21 protected void Page_Load(object sender, EventArgs e) 22 { 23 if (!this.IsPostBack) 24 { 25 fillList(); 26 } 27 } 28 29 protected void fillList() 30 { 31 SqlConnection connection = new SqlConnection(System.Web.Configuration.WebConfigurationManager.ConnectionStrings["connection1"].ConnectionString.ToString()); 32 SqlCommand command = new SqlCommand("select * from Advertisements", connection); 33 SqlDataAdapter dataAdapter = new SqlDataAdapter(command); 34 //打开数据库连接,读取信息 35 try 36 { 37 connection.Open(); 38 //填充Dataset 39 dataAdapter.Fill(dataSet, "Advertisements"); 40 } 41 catch (Exception ex) 42 { 43 Label3.Text = "读取错误" + ex.Message.ToString(); 44 } 45 finally 46 { 47 connection.Close(); 48 } 49 foreach (DataRow row in dataSet.Tables["Advertisements"].Rows) 50 { 51 ListItem item = new ListItem(); 52 item.Text = row["AlternateText"].ToString(); 53 item.Value = row["ID"].ToString(); 54 DropDownList1.Items.Add(item); 55 } 56 } 57 58 protected void DropDownList1_SelectedIndexChanged(object sender, EventArgs e) 59 { 60 try 61 { 62 DataRow[] dataRow = dataSet.Tables["Advertisements"].Select("ID=" + DropDownList1.SelectedItem.Value); 63 string stringText = "ID:" + dataRow[0]["ID"].ToString() + "<br/>图片地址:" + dataRow[0]["ImageUrl"].ToString() + "<br/>链接地址:" + dataRow[0]["NavigateUrl"].ToString() + "<br/>显示频率:" + dataRow[0]["Impressions"].ToString() + "<br/>描述:" + dataRow[0]["AlternateText"].ToString(); 64 Label3.Text = stringText.ToString(); 65 } 66 catch (Exception ex) 67 { 68 Label3.Text = "读取失败" + ex.Message.ToString(); 69 } 70 } 71 } 72 }