DataSet是一个独立组件,它完全不清楚数据源,工作时与数据源断开连接。
DataSet用DataTable,DataRow,和DataColumn对象存储数据。
DataSet的DataSet.Tables属性返回DataTableCollection的实例,表示DataTable对象的集合。
DataAdapter是DataSet与数据源之间的桥梁。使DataSet能够访问任何外部数据源。
它为DataSet处理所有的连接细节,用数据填充它,用数据更新数据源。
创建SqlaAdapter:
SqlDataAdapter adapter = new SqlDataAdapter(SQL, thisConnection);
这里的SQL是查询语句,thisConnection指创建的连接。
DataTable是System.Data命名空间的成员。可以看作是数据庫中的物理表的客观表示。
DataTable的Rows用来获取资料表的行信息。
DataTable的Columns用来获取资料表的列信息。
DataColumn 是用于创建DataTable架构的基本构造块。通过向 DataColumnCollection 中添加一个或多个 DataColumn 对象来生成这个架构。
使用列名可以获得单个DataColumn的引用:
DataColumn dc=dt.Columns["ContactName"];
这里的dt是DataTable的对象。
为了能够从DataTable对象中检索可利用行,调用Rows属性,或者把序数值传递给Rows属性,以检索指定的行:
DataRow dr= dt.Rows[2];
示例用DataAdapter填充DataSet
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
//导入命名空间,使能够访问这些命名空间的类
using System.Data.SqlClient;
using System.Data;
namespace SQLServerProvider
{
class Program
{
static void Main(string[] args)
{
SqlConnection thisConnection = new SqlConnection();
thisConnection.ConnectionString =
@"Server=localhost;Integrated security=true;database=Northwind";
try
{
thisConnection.Open();
string SQL = "SELECT ContactName FROM Customers;";
//创建sqlDataAdapter对象
SqlDataAdapter dAdapter = new SqlDataAdapter(SQL, thisConnection);
//创建DataSet对象
DataSet dDataset = new DataSet();
//用适配器的Fill方法填允DataSet
dAdapter.Fill(dDataset, "Products");
//获取DataSet中表的集合
DataTable table = dDataset.Tables["Products"];
//从每个行访问列数据
foreach (DataRow row in table.Rows)
{
foreach (DataColumn col in table.Columns)
{
Console.WriteLine(row[col]);
Console.WriteLine("-------");
}
}
}
catch (Exception e)
{
Console.WriteLine("{0}", e.Message);
}
finally
{
thisConnection.Close();
}
}
}
}
SqlCeDataAdapter.SelectCommand 属性用于 获取或设置用于在数据源中选择记录的 SQL 语句。
DataSet的Tables属性返回DataTableCollection的实例,表示DataTable对象的集合。
Select()返回DataRow对象的数组。其内容反映对物理数据所做的变化,不涉及其排序。
示例DataSet的筛选和排序
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
//导入命名空间,使能够访问这些命名空间的类
using System.Data.SqlClient;
using System.Data;
namespace SQLServerProvider
{
class Program
{
static void Main(string[] args)
{
SqlConnection thisConnection = new SqlConnection();
thisConnection.ConnectionString =
@"Server=localhost;Integrated security=true;database=Northwind";
try
{
thisConnection.Open();
//查询语句,绑定到SqlDatAdapter的SelectCommand属性,供Fill方法使用
string SQL = "SELECT * FROM customers;" +
"SELECT * FROM products WHERE UnitPrice <10";
DataSet ds = new DataSet();//Dataset对象
SqlDataAdapter sqlAdapter = new SqlDataAdapter();//SqlDataAdapter对象
//绑定到sqlDapter的SelectCommand上
sqlAdapter.SelectCommand = new SqlCommand(SQL, thisConnection);
//用两个独立的结果集填充DataSet对象
sqlAdapter.Fill(ds, "Customers");
//DataSet的Tables属性返回DataTableCollection的实例,表示DataTable对象的集合
DataTableCollection dtc = ds.Tables;
Console.WriteLine("Result from CUSTOMERS table");
Console.WriteLine("ComapnyName".PadRight(20) +
"ContactName".PadLeft(25));
Console.WriteLine();
//筛选Country列含有"Germany"的所有行
string f1 = "Country='Germany'";
//CompanyName以升序排序
string str = "CompanyName ASC";
//显示从每个行提取的数据,Select()在DataTable内部搜索,筛选需要的数据并排序,并返回数组jj
foreach (DataRow myRow in dtc["Customers"].Select(f1, str))
{
Console.WriteLine("{0}/t{1}",
myRow["CompanyName"].ToString().PadRight(25),
myRow["ContactName"]);
}
Console.WriteLine();
Console.WriteLine("----------");
Console.WriteLine("Result from PRODUCTS table:");
Console.WriteLine("ProductName".PadRight(20) +
"UnitPrice".PadLeft(21));
Console.WriteLine();
foreach (DataRow myRow in dtc[1].Rows)
{
Console.WriteLine("{0}/t{1}",
myRow["ProductName"].ToString().PadRight(25),
myRow["UnitPrice"]);
}
}
catch (Exception e)
{
Console.WriteLine("{0}", e.Message);
}
finally
{
thisConnection.Close();
}
}
}
}
DataView是DataTable内容的动态视图,与DataTable对象或物理表是不同的。
示例使用DataView都完成筛选与排序
创建一个新的DataView对象:
DataView myView = new DataView(dt, "Country='Mexico'", "Country", DataViewRowState.OriginalRows);
第一个参数是所创建的DataTable,第二个提供对DataTable内容执行筛选的筛选器,第三个是排序顺序,最后一个参数指定要包含的行的类型。每次修改,添加或删除行时,都将其内部状态更改为如下所列状态之一:
Added 新添加的行
CurrentRows 所有行,包括末更改的,新的,修改过的等
Deleted 被删除的行
ModifiedCurrent 已修改行的当前版本
ModifiedOriginal 已修改行的当前版本
None 没有行
OriginalRows 所有原来的行,包括末更改的和被删除的行
Unchanged 末修改的行
就像DataRow代表DataTable中的单个行一样,DataRowView代表DataView中的单个行。
我们为DataRowView检索筛选过和排序过的列数据,并输出到控件台。
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
//导入命名空间,使能够访问这些命名空间的类
using System.Data.SqlClient;
using System.Data;
namespace SQLServerProvider
{
class Program
{
static void Main(string[] args)
{
SqlDataAdapter da = new SqlDataAdapter();
SqlConnection thisConnection = new SqlConnection();
thisConnection.ConnectionString = @"Server=localhost;Integrated security=true;database=Northwind";
try
{
string SQL = "SELECT ContactName,Country FROM Customers";
da.SelectCommand = new SqlCommand(SQL, thisConnection);
DataSet ds = new DataSet();
da.Fill(ds, "Customers");
DataTable dt = ds.Tables["Customers"];
//创建DataView对象
DataView myView = new DataView(dt, "Country='Mexico'", "Country", DataViewRowState.OriginalRows);
//遍历DataView中刚才创建的行
foreach (DataRowView myDrv in myView)
{
for (int i = 0; i < myView.Table.Columns.Count; i++)
Console.Write(myDrv[i] + "/t");
Console.WriteLine();
}
}
catch (Exception e)
{
Console.WriteLine("{0}", e.Message);
thisConnection.Close();
}
finally
{
thisConnection.Close();
}
}
}
}
修改DataSet中的数据
Rows用于获取属于该表的行集合
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
//导入命名空间,使能够访问这些命名空间的类
using System.Data.SqlClient;
using System.Data;
namespace SQLServerProvider
{
class Program
{
static void Main(string[] args)
{
SqlDataAdapter da = new SqlDataAdapter();
SqlConnection thisConnection = new SqlConnection();
thisConnection.ConnectionString = @"Server=localhost;Integrated security=true;database=Northwind";
try
{
string SQL = "SELECT * FROM Employees WHERE Country='UK'";
da.SelectCommand = new SqlCommand(SQL, thisConnection);
//创建DatSet并用数据填充
DataSet ds = new DataSet();
da.Fill(ds, "Employees");
//从DataSet中获取DataTable
DataTable dt = ds.Tables["Employees"];
//列FirstName不接受空值
dt.Columns["FirstName"].AllowDBNull = false;
//修改单行
dt.Rows[0]["FirstName"] = "Steven jin";
//增加新行。
//DataTable的NewRow()方法返回DataRow实例,用具体的值来填充
DataRow newRow = dt.NewRow();
newRow["FirstName"] = "Susan";
newRow["LastName"] = "juicy";
newRow["TitleOfCourtesy"] = "Ms.";
newRow["City"] = "New Yoke";
newRow["Country"] = "UK";
//使用DataTable对象的Add()方法把新行添加到DataTable的Rows集合中
dt.Rows.Add(newRow);
//显示数据
foreach (DataRow row in dt.Rows)
{
Console.WriteLine("{0}{1}{2}",
row["FirstName"].ToString().PadRight(15),
row["LastName"].ToString().PadLeft(25),
row["City"]);
}
}
catch (Exception e)
{
Console.WriteLine("{0}", e.Message);
thisConnection.Close();
}
finally
{
thisConnection.Close();
}
}
}
}
把变化保存到数据存储中
更新并将数据保存到数据源的三个属性:
1.UpdateCommand
用可利用的SQL UPDATE查询更新数据源。
如果要从DataSet修改DataTable中行的内容,并将所做的变化与数据源同步,就需要把SqlCommand赋值给UpdateCommand属性。SqlCommand定义有效的SQL UPDATE语句以及与数据源的活动连接。
da.UpdateCommand= new SqlCommand("UPDATE Customers SET CompanyName = "dt.Rows[0]["CompanyName"],thisConnection)
DataSet用DataTable,DataRow,和DataColumn对象存储数据。
DataSet的DataSet.Tables属性返回DataTableCollection的实例,表示DataTable对象的集合。
DataAdapter是DataSet与数据源之间的桥梁。使DataSet能够访问任何外部数据源。
它为DataSet处理所有的连接细节,用数据填充它,用数据更新数据源。
创建SqlaAdapter:
SqlDataAdapter adapter = new SqlDataAdapter(SQL, thisConnection);
这里的SQL是查询语句,thisConnection指创建的连接。
DataTable是System.Data命名空间的成员。可以看作是数据庫中的物理表的客观表示。
DataTable的Rows用来获取资料表的行信息。
DataTable的Columns用来获取资料表的列信息。
DataColumn 是用于创建DataTable架构的基本构造块。通过向 DataColumnCollection 中添加一个或多个 DataColumn 对象来生成这个架构。
使用列名可以获得单个DataColumn的引用:
DataColumn dc=dt.Columns["ContactName"];
这里的dt是DataTable的对象。
为了能够从DataTable对象中检索可利用行,调用Rows属性,或者把序数值传递给Rows属性,以检索指定的行:
DataRow dr= dt.Rows[2];
示例用DataAdapter填充DataSet
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
//导入命名空间,使能够访问这些命名空间的类
using System.Data.SqlClient;
using System.Data;
namespace SQLServerProvider
{
class Program
{
static void Main(string[] args)
{
SqlConnection thisConnection = new SqlConnection();
thisConnection.ConnectionString =
@"Server=localhost;Integrated security=true;database=Northwind";
try
{
thisConnection.Open();
string SQL = "SELECT ContactName FROM Customers;";
//创建sqlDataAdapter对象
SqlDataAdapter dAdapter = new SqlDataAdapter(SQL, thisConnection);
//创建DataSet对象
DataSet dDataset = new DataSet();
//用适配器的Fill方法填允DataSet
dAdapter.Fill(dDataset, "Products");
//获取DataSet中表的集合
DataTable table = dDataset.Tables["Products"];
//从每个行访问列数据
foreach (DataRow row in table.Rows)
{
foreach (DataColumn col in table.Columns)
{
Console.WriteLine(row[col]);
Console.WriteLine("-------");
}
}
}
catch (Exception e)
{
Console.WriteLine("{0}", e.Message);
}
finally
{
thisConnection.Close();
}
}
}
}
SqlCeDataAdapter.SelectCommand 属性用于 获取或设置用于在数据源中选择记录的 SQL 语句。
DataSet的Tables属性返回DataTableCollection的实例,表示DataTable对象的集合。
Select()返回DataRow对象的数组。其内容反映对物理数据所做的变化,不涉及其排序。
示例DataSet的筛选和排序
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
//导入命名空间,使能够访问这些命名空间的类
using System.Data.SqlClient;
using System.Data;
namespace SQLServerProvider
{
class Program
{
static void Main(string[] args)
{
SqlConnection thisConnection = new SqlConnection();
thisConnection.ConnectionString =
@"Server=localhost;Integrated security=true;database=Northwind";
try
{
thisConnection.Open();
//查询语句,绑定到SqlDatAdapter的SelectCommand属性,供Fill方法使用
string SQL = "SELECT * FROM customers;" +
"SELECT * FROM products WHERE UnitPrice <10";
DataSet ds = new DataSet();//Dataset对象
SqlDataAdapter sqlAdapter = new SqlDataAdapter();//SqlDataAdapter对象
//绑定到sqlDapter的SelectCommand上
sqlAdapter.SelectCommand = new SqlCommand(SQL, thisConnection);
//用两个独立的结果集填充DataSet对象
sqlAdapter.Fill(ds, "Customers");
//DataSet的Tables属性返回DataTableCollection的实例,表示DataTable对象的集合
DataTableCollection dtc = ds.Tables;
Console.WriteLine("Result from CUSTOMERS table");
Console.WriteLine("ComapnyName".PadRight(20) +
"ContactName".PadLeft(25));
Console.WriteLine();
//筛选Country列含有"Germany"的所有行
string f1 = "Country='Germany'";
//CompanyName以升序排序
string str = "CompanyName ASC";
//显示从每个行提取的数据,Select()在DataTable内部搜索,筛选需要的数据并排序,并返回数组jj
foreach (DataRow myRow in dtc["Customers"].Select(f1, str))
{
Console.WriteLine("{0}/t{1}",
myRow["CompanyName"].ToString().PadRight(25),
myRow["ContactName"]);
}
Console.WriteLine();
Console.WriteLine("----------");
Console.WriteLine("Result from PRODUCTS table:");
Console.WriteLine("ProductName".PadRight(20) +
"UnitPrice".PadLeft(21));
Console.WriteLine();
foreach (DataRow myRow in dtc[1].Rows)
{
Console.WriteLine("{0}/t{1}",
myRow["ProductName"].ToString().PadRight(25),
myRow["UnitPrice"]);
}
}
catch (Exception e)
{
Console.WriteLine("{0}", e.Message);
}
finally
{
thisConnection.Close();
}
}
}
}
DataView是DataTable内容的动态视图,与DataTable对象或物理表是不同的。
示例使用DataView都完成筛选与排序
创建一个新的DataView对象:
DataView myView = new DataView(dt, "Country='Mexico'", "Country", DataViewRowState.OriginalRows);
第一个参数是所创建的DataTable,第二个提供对DataTable内容执行筛选的筛选器,第三个是排序顺序,最后一个参数指定要包含的行的类型。每次修改,添加或删除行时,都将其内部状态更改为如下所列状态之一:
Added 新添加的行
CurrentRows 所有行,包括末更改的,新的,修改过的等
Deleted 被删除的行
ModifiedCurrent 已修改行的当前版本
ModifiedOriginal 已修改行的当前版本
None 没有行
OriginalRows 所有原来的行,包括末更改的和被删除的行
Unchanged 末修改的行
就像DataRow代表DataTable中的单个行一样,DataRowView代表DataView中的单个行。
我们为DataRowView检索筛选过和排序过的列数据,并输出到控件台。
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
//导入命名空间,使能够访问这些命名空间的类
using System.Data.SqlClient;
using System.Data;
namespace SQLServerProvider
{
class Program
{
static void Main(string[] args)
{
SqlDataAdapter da = new SqlDataAdapter();
SqlConnection thisConnection = new SqlConnection();
thisConnection.ConnectionString = @"Server=localhost;Integrated security=true;database=Northwind";
try
{
string SQL = "SELECT ContactName,Country FROM Customers";
da.SelectCommand = new SqlCommand(SQL, thisConnection);
DataSet ds = new DataSet();
da.Fill(ds, "Customers");
DataTable dt = ds.Tables["Customers"];
//创建DataView对象
DataView myView = new DataView(dt, "Country='Mexico'", "Country", DataViewRowState.OriginalRows);
//遍历DataView中刚才创建的行
foreach (DataRowView myDrv in myView)
{
for (int i = 0; i < myView.Table.Columns.Count; i++)
Console.Write(myDrv[i] + "/t");
Console.WriteLine();
}
}
catch (Exception e)
{
Console.WriteLine("{0}", e.Message);
thisConnection.Close();
}
finally
{
thisConnection.Close();
}
}
}
}
修改DataSet中的数据
Rows用于获取属于该表的行集合
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
//导入命名空间,使能够访问这些命名空间的类
using System.Data.SqlClient;
using System.Data;
namespace SQLServerProvider
{
class Program
{
static void Main(string[] args)
{
SqlDataAdapter da = new SqlDataAdapter();
SqlConnection thisConnection = new SqlConnection();
thisConnection.ConnectionString = @"Server=localhost;Integrated security=true;database=Northwind";
try
{
string SQL = "SELECT * FROM Employees WHERE Country='UK'";
da.SelectCommand = new SqlCommand(SQL, thisConnection);
//创建DatSet并用数据填充
DataSet ds = new DataSet();
da.Fill(ds, "Employees");
//从DataSet中获取DataTable
DataTable dt = ds.Tables["Employees"];
//列FirstName不接受空值
dt.Columns["FirstName"].AllowDBNull = false;
//修改单行
dt.Rows[0]["FirstName"] = "Steven jin";
//增加新行。
//DataTable的NewRow()方法返回DataRow实例,用具体的值来填充
DataRow newRow = dt.NewRow();
newRow["FirstName"] = "Susan";
newRow["LastName"] = "juicy";
newRow["TitleOfCourtesy"] = "Ms.";
newRow["City"] = "New Yoke";
newRow["Country"] = "UK";
//使用DataTable对象的Add()方法把新行添加到DataTable的Rows集合中
dt.Rows.Add(newRow);
//显示数据
foreach (DataRow row in dt.Rows)
{
Console.WriteLine("{0}{1}{2}",
row["FirstName"].ToString().PadRight(15),
row["LastName"].ToString().PadLeft(25),
row["City"]);
}
}
catch (Exception e)
{
Console.WriteLine("{0}", e.Message);
thisConnection.Close();
}
finally
{
thisConnection.Close();
}
}
}
}
把变化保存到数据存储中
更新并将数据保存到数据源的三个属性:
1.UpdateCommand
用可利用的SQL UPDATE查询更新数据源。
如果要从DataSet修改DataTable中行的内容,并将所做的变化与数据源同步,就需要把SqlCommand赋值给UpdateCommand属性。SqlCommand定义有效的SQL UPDATE语句以及与数据源的活动连接。
da.UpdateCommand= new SqlCommand("UPDATE Customers SET CompanyName = "dt.Rows[0]["CompanyName"],thisConnection)