ADO.NET 简介

原文地址:http://www.dingos.cn/index.php?topic=1431.0

【简介】
【ADO.NET 结构】
【ADO.NET 的基本组件】
【.NET 数据提供程序】
【Connection 对象】访问 ADO.NET 中的数据的最重要组件;指定连接到所需数据库时需要的详细信息;连接过程取决于要访问的数据库;
Connection 对象包含下列两个对象
  • SqlConnection
    引入:"System.Data"、"System.Data.SqlClient"命名空间。
    引用
    sqlcon = new SqlConnection ("server=SQLDB; uid=sa; pwd=password; database=NorthWind");   
  • OleDbConnection
    引入:"System.Data"、"System.Data.OleDb"命名空间。
    引用
    adocon=new OleDbConnection("Provider=SQLOLEDB;   Data Source=SQLDB; Initial Catalog=NorthWind; User Id=sa; pwd=password");   
【Command 对象】在建立连接后使用;要访问数据,用户需要命令数据库获取所需数据;查询被传递给数据库以获取记录
Command 对象包含下列两个对象
  • SqlCommand
    引用
    SqlDataAdapter sqlcom = new SqlCommand("select * from Customers", sqlcon);  
  • OleDbCommand
    OleDbCommand mycommand = new OleDbCommand ("select * from Customers WHERE city=‘London’", adocon); 
【DataReader】用于从数据源获取只读和只进数据
Command.ExecuteReader 从数据源中获取行
SqlDataReader newSqlReader = myCommand.ExecuteReader();

Read 方法用于从查询结果中读取行提供了一组方法,可用于访问本机数据类型的列值
SqlConnection sqlconn = 
new SqlConnection ("server=TEST//TEST; uid=sa; pwd=passwd; database=NorthWind"); 
SqlCommand commnd = 
new SqlCommand("SELECT productid,productname from products where supplierid=1", sqlconn); 
commnd.Connection.Open(); 
SqlDataReader newSqlReader = commnd.ExecuteReader(); 
while (newSqlReader.Read()){ 
MessageBox.Show(newSqlReader.GetInt32(0)+", "+ newSqlReader.GetString(1)); 
}
newSqlReader.Close();  
commnd.Connection.Close ();  
【获取单个值】ExecuteScalar方法获取第一行第一列的值。
SqlCommand ordersCMD = new SqlCommand("SELECT Max(Quantity) FROM [Order details]", sqlconn); 
ordersCMD.Connection.Open();  
int count = Convert.ToInt32 (ordersCMD.ExecuteScalar());  
MessageBox.Show (count.ToString ()); 
ordersCMD.Connection.Close ();
【执行目录操作】与查询不同,目录操作不返回任何行。
Command 对象提供 ExecuteNonQuery 方法。
//修改数据库或目录
string createStr = "CREATE PROCEDURE InsertCust "+   
"(@ComNameEmpName nchar(20),  @Identity int OUT ) AS INSERT INTO Customers (CompanyName)" +
" VALUES(@ComNameEmpName) SET @Identity = @@Identity RETURN @@ROWCOUNT;”; 
SqlCommand createCMD = new SqlCommand(createStr, sqlconn); 
createCMD.Connection.Open (); 
createCMD.ExecuteNonQuery(); 
【修改数据库中的数据】使用 Insert、Update 或 Delete;使用 ExecuteNonQuery 方法
SqlConnection nwindConn = 
new SqlConnection("Data Source = TEST; Integrated Security= SSPI;Initial Catalog = NorthWind;"); 
nwindConn.Open(); 
string insertStr = 
"INSERT INTO Customers (CustomerID, CompanyName) Values('NWIND', 'Northwind Traders')"; 
SqlCommand insertCMD = new SqlCommand(insertStr, nwindConn); 
Int32 recordsAffected = insertCMD.ExecuteNonQuery(); 
MessageBox.Show("Records added"); 
MessageBox.Show(recordsAffected.ToString ()); 
【DataAdapter】
【.NET 数据提供程序事件】
【数据集】ADO.NET 非连接结构的重要组件。

是数据的逻辑显示,它只显示信息,而不考虑数据源;旨在访问任何数据源;使用 XML 管理数据
【使用 C# 代码创建数据集】调用数据集构造函数;指定数据集的名称;默认名称是 NewDataSet;如果使用“数据窗体向导”创建数据窗体,将自动创建数据集。
DataSet empDS = new DataSet("EmpDetails"); 
【类型化和非类型化数据集】
类型化数据集
  • 用于创建项目中已经存在的数据集的实例
  • 继承所有方法、事件和属性
  • 使用基于集合的方法帮助直接访问表名和列名
  • 提高代码的可读性
非类型化数据集
  • 它也是从基本 DataSet 类继承而来
  • 表和列不能用于使用 XML 架构文件派生新类
【DataTable】表示数据集中的一个表
ADO.NET 库的中心对象之一
数据集和 DataView 在使用时需要访问 DataTable 对象
【创建 DataTable】使用 DataTable 构造函数创建
使用DataTableCollection集合


// 创建DataTable的一个实例empTable,后将它添加到empDS表集合中。
DataSet empDS = new DataSet();
DataTable empTable = empDS.Tables.Add("EmpTable");
【向 DataTable 中添加列】使用 DataColumn 构造函数创建 DataColumn 对象。

DataTable empTable = new DataTable("Emp");
DataColumn emCol = empTable.Columns.Add("EmpNo", type(Int32));
empCol.AllowDBNull = false;
empCol.Unique = true;
empTable.Columns.Add("EmpName", typeof(String));
empTable.Columns.Add("Sal", typeof(Double));
【向 DataTable 中添加行】使用 NewRow 方法。
// 创建一个新行,并且把各列的值设置成对象数组里的值。
DataRow empRow = empTable.NewRow();
empRow["EmpName"] = "Smith";
empRow[1] = "Smith";
empTable.Rows.Add(empRow);
empTable.Rows.Add(new object[]{1, "Smith"});

DataRow empRow;
for(int index = 0; index <= 4; index++){
empRow = empTable.NewRow();
empRow[0] = index;
empRow[1] = "EmpName" + index.ToString();
empTable.Rows.Add(empRow);
}
【DataTable 的约束】加在表上的规则集

约束决定了可驻留在表中的数据

ADO.NET 中有两种约束
  • ForeignKeyConstraint 
    操纵数据时维护两个相关表之间的完整性
  • UniqueConstraints 
    维护表的数据完整性,确保记录具有唯一标识
【DataView】提供 DataTable 的视图,可用于排序、筛选和搜索

可用于查看 DataTable 中存储的数据的子集

同一 DataTable 上可以有两个控件,可提供数据的不同视图

存储在 DataTable 中的数据的显示层
【DataRelation】

DataRelation 对象的功能:
  • 在处理父记录时提供详细记录,反之亦然
  • 强制实施引用完整性
【访问相关记录】


int rowCtr;
DataRow[] drarray;
rowCtr = 0;
drarray = dsCustId.Orders[rowCtr].GetChildRows("CustId");
【数据绑定】
【绑定类型】ADO.NET 支持两种类型的数据绑定
  • 简单数据绑定
    可以在任何时候将数据集中的单个值绑定到任何控件
    DataTable dttable = DataSet.Tables["Orders"];
    TextBox txtAmt = new TextBox();
    txtAmt.Bindings.Add("Text", dttable, "OrderAmt");
  • 复杂数据绑定
    组件可绑定到完整的数据集
    DataGridView 和 ComboBox 支持此功能
    DataTable dttable = DataSet.Tables["Customers"];
    ComboBox cmbCustId = new ComboBox();
    cmbCustId.DataSource = dtable;
    cmbCustId.DisplayMember = "CustomerId";
【数据源】实现 IList 界面的任何组件都可称为数据源
数据源示例
  • DataTable
  • DataView
  • 数据集
  • DataViewManager
  • 数组
  • 集合
【DataTable作为数据源】包含两个集合
  • DataColumn 
    间接控制可输入表中的数据类型
  • DataRow 
    表示表中的确切数据行
DataTable dttable = DataSet.Tables["Customers"];
TextBox txtCustName = new TextBox();
txtAmt.Bindings.Add("Text", dttable, "CustName");

DataTable dttable = DataSet.Tables["Customers"];
ComboBox cmbTable = new ComboBox();
cmbTable.DataSource = dtable;
【DataView作为数据源】提供表的自定义视图;用于对 DataTable 中的数据进行搜索、排序和筛选

DataView dview = new DataView(dataSet1.Tables["Customers"]);
TextBox txtCustName = new TextBox();
txtCustName.Bindings.Add("Text", dview, "CustName");

DataView dview = new DataView(dataSet1.Tables["Customers"]);
ComboBox cmbCustName = new ComboBox();
cmbCustName.DataSource = dview;
cmbCustName.DisplayMember = "CustName";
【数据集作为数据源】
数据的逻辑表示 - 由表、约束和关系组成
列确定数据集的排列
行包含数据集中存储的数据
行跟踪其原始状态和修改状态
【DataViewManager】显示数据集的自定义视图;存储关系
DataViewManager dviewmgr = new DataViewManager(dataSet1);
TextBox txtOrderID = new TextBox();
txtOrderID.Bindings.Add("Text", dviewmgr, "Orders.OrderId");

ComboBox cmdOrderId = new ComboBox();
cmdOrderId.DataSource = dviewmgr;
cmdOrderId.DisplayMember = "Orders.OrderId";
【数组作为数据源】使用数字下标访问;以组的方式使用单个名称存储的数据集合

// 简单绑定 
TextBox txtArray = new TextBox();
txtArray.Bindings.Add("Text", myArray, "");

// 复杂绑定
ComboBox cmbArray = new ComboBox();
cmbArray.DataSource = myArray;

// 将数据绑定到文本框控件数组
TextBox[] txtArray = new TextBox[2];
lblArray.Bindings.Add("Text", txtArray, "Text");
【集合作为数据源】通常包含同类的对象;用于存储一个或多个对象的对象
RowsCollection myRows = dataSet.Tables["Orders"].Rows;
TextBox txtOrderId = new TextBox();
txtOrderId.Bindings.Add("Text", myRows, "OrderId");
【DataRow】DataRow 的基本组件;用于检索和操纵 DataTable 中的值。
【DataView 中 DataRow 的不同状态】
  • 原始
    行的状态与其在数据源中的状态相同
  • 当前
    指示行的当前状态
  • 建议
    指示将来状态
【DataRowView】排序、搜索和筛选时要用到 DataRowView 对象
它与 DataView 和 DataViewManager 相似

下面的代码将声明一个与 Departments 表相关联的 DataView
DataView dv = new DataView(dataSet1.Tables["Customers"]);
dv.RowStateFilter = DataViewRowState.Added;
DataRowView drv = dv[0];
【DataRowState 属性】可以是下列五个值中的任一个
  • Detached 
    尚未添加到 Rows 集合的新 DataRow
  • Unchanged
    未修改过的行
  • Modified
    行值经过修改
  • New
    已添加到 Rows 集合的行
  • Deleted
    显示调用了 Delete 方法的行

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

夜晚回家

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值