ADO.NET操作数据库
ADO.NET基本结构
ADO.NET主要利用两个组件来访问和操作数据
(1).NET数据提供程序:访问及处理数据的组件,包括一下4个核心对象
Connection:提供与数据源的连接
Command:用于查询、修改、删除数据的T-SQL命令。
DataReader:从数据源中快速读取数据流
DataAdapter:连接DataSet对象和数据源的桥梁。
(2)数据集DataSet:内存中的数据库,可以存放不同类型的数据源。
11.2连接SQL Server数据库
11.2.1 SqlConnection 类
命名空间using System.Data.SqlClient;
提供对SQL Server数据库的连接
方法一:
SqlConnection myCon = new SqlConnection("Persist Security Info=False;User id=sa;pwd=frock;database=northwind;server=(local)");
//建立连接
myCon.Open();
另一种方式是在配置文件中建立连接,这样有较好的移植性:
在项目中添加Web.config文件,找到<configuration>并添加如下代码:
<configuration>
<connectionStrings>
<add
name="myDb"
connectionString="Persist Security Info=False;User id=sa;pwd=frock;database=northwind;server=(local)"
providerName="System.Data.SqlClient"
/>
</connectionStrings>
在需要使用连接字符串的地方添加如下代码:
/// 读取配置文件,连接SQL Server数据库
public void ConnectDb_config()
{
//得到一个SqlConnection
SqlConnection myCon = new SqlConnection();
//构造连接字符串
ConnectionStringSettings setting = System.Configuration.ConfigurationManager.ConnectionStrings["myDb"];
myCon.ConnectionString = setting.ConnectionString;
//建立连接
myCon.Open();
}
11.2.2 断开数据库 (SqlConnection)
myCon.Close();
11.3 操作数据库
11.3.1 SqlCommand类 SqlDataReader类
(1) 使用SqlCommand的ExecuteReader方法查询数据,并把结果放在一个SqlDataReader中
void SerachDb()
{
//1 连接数据库
//2 实例化一个SqlCommand对象
SqlCommand myCom = new SqlCommand();
//3 利用查询命令赋值SqlCommand的CommandText
myCom.Connection = myCon;
myCom.CommandText = "SELECT * FROM Customers";
//4 查询,并查看是否成功
SqlDataReader sdr = myCom.ExecuteReader();
if (sdr.Read())
Page.Response.Write("查询成功<br />");
//5 断开连接
myCon.Close();
}
(2) SqlDataReader对象提供从SQL数据库中读取行的只进流的方式,只能向后读取。 使用SqlDataReader sdr = myCom.ExecuteReader();语句创建
使用SqlDataReader显示数据
void ShowData()
{
//1 连接数据库
//2 实例化一个SqlCommand对象
SqlCommand myCom = new SqlCommand();
//3 利用查询命令赋值SqlCommand的CommandText
myCom.Connection = myCon;
myCom.CommandText = "SELECT * FROM Customers";
//4 查询,并输出结果
SqlDataReader sdr = myCom.ExecuteReader();
Page.Response.Write("<table border=1px>");
while (sdr.Read())
{
Page.Response.Write("<tr>");
Page.Response.Write("<td>" + sdr.GetString(sdr.GetOrdinal("CustomerID")) + "</td>"); //GetOrdinal()方法得到各个列的序号
Page.Response.Write("<td>" + sdr.GetString(sdr.GetOrdinal("CompanyName")) + "</td>");
Page.Response.Write("</tr>");
}
Page.Response.Write("</table>");
//5 断开连接
myCon.Close();
}
11.3.2 操作数据
通过ExecuteNonQuery方法,SqlCommand可以执行一个UPDATE,DELETE或者INSERT语句。
void UpdateDb()
{
//1 连接数据库
//2 实例化一个SqlCommand对象
SqlCommand myCom= new SqlCommand();
//3 利用修改命令赋值SqlCommand的CommandText
myCom.Connection = myCon;
myCom.CommandText = "UPDATE Customers SET CompanyName='KFC' WHERE CustomerID = 'ALFKI'";
//4 输出影响的行数
int i = myCom.ExecuteNonQuery();
Page.Response.Write(i+"行数据被修改<br />"); //输出:1行被修改。
//5 断开连接
myCon.Close();
}
11.4 内存数据对象DataSet---从数据源中检索出的数据在内存中的缓存,包括表、行、列,还包含数据约束和关系
数据是通过数据适配器从数据源进入到内存数据对象中的。
11.4.1 SqlDataAdapter类
使用SqlDataAdapter在数据库和DataSet之间架起桥梁
void UseDataAdapter()
{
//1 连接数据库
//2 创建一个SqlDataAdapter对象
SqlDataAdapter adapter = new SqlDataAdapter();
//3 利用SqlDataAdapter查询数据,并把数据放在DataSet中
SqlCommand selectCmd = new SqlCommand();
selectCmd.Connection = myCon;
selectCmd.CommandText = "SELECT SupplierID, CompanyName FROM Suppliers;";
adapter.SelectCommand = selectCmd;
DataSet dataSet = new DataSet("Suppliers");
adapter.Fill(dataSet);//Fill数据
Page.Response.Write("已连查询数据,并放入DataSet中<br />");
//4 利用SqlDataAdapter对象操作语句
//4.1 Update
SqlCommand updateCmd = new SqlCommand();
updateCmd.Connection = myCon;
updateCmd.CommandText = "UPDATE Customers SET CompanyName='KFC' WHERE CustomerID = 'ALFKI'";
adapter.UpdateCommand = updateCmd;
//4.2 Delete
SqlCommand deleteCmd = new SqlCommand();
deleteCmd.Connection = myCon;
deleteCmd.CommandText = "DELETE Customers WHERE CustomerID = 'ALFKI'";
adapter.DeleteCommand= deleteCmd;
//4.3 Insert
SqlCommand insertCmd = new SqlCommand();
insertCmd.Connection = myCon;
insertCmd.CommandText = "INSERT INTO Customers(CustomerId) values ('ALFKI')";
adapter.InsertCommand = insertCmd;
//4.4 执行操作
adapter.Update(dataSet);
Page.Response.Write("已连操作数据,包括:修改、删除、插入<br />");
//5 关闭数据库连接
myCon.Close();
Page.Response.Write("已关闭数据库<br />");
}
11.4.2 DataSet 类
public void FillDataSet()
{
//1 连接数据库
//2 使用SqlCommand提交查询命令
SqlCommand selectCMD = new SqlCommand("SELECT top 10 CustomerID, CompanyName FROM Customers", myCon);
//3 获取数据适配器
SqlDataAdapter custDA = new SqlDataAdapter();
custDA.SelectCommand = selectCMD;
//4 填充DataSet
DataSet custDS = new DataSet();
custDA.Fill(custDS, "Customers");
//5 显示其中的DataTable对象中的数据
Page.Response.Write("<table border=1>");
for (int i = 0; i < custDS.Tables[0].Rows.Count; i++)
{
Page.Response.Write("<tr>");
for (int j = 0; j < custDS.Tables[0].Columns.Count; j++)
{
Page.Response.Write("<td>" + custDS.Tables[0].Rows[i].ItemArray[j] + "</td>");
//通过DataSet中的Tables属性获取其中的第一张表,然后利用Rows属性获取表中的行,然后利用行的ItemArray属性获取其中某个单元格的数据。
}
Page.Response.Write("</tr>");
}
Page.Response.Write("</table>");
//6 断开连接
myCon.Close();
}