DataContext
DataContext类型(数据上下文)是System.Data.Linq命名空间下的重要类型,用于把查询句法翻译成SQL语句,以及把数据从数据库返回给调用方和把实体的修改写入数据库。
DataContext提供了以下一些使用的功能:
以日志形式记录DataContext生成的SQL
执行SQL(包括查询和更新语句)
创建和删除数据库
DataContext是实体和数据库之间的桥梁,那么首先我们需要定义映射到数据表的实体。
定义实体类


using ...System.Data.Linq.Mapping;
[Table(Name = "Customers")]
public class Customer 
...{
[Column(IsPrimaryKey = true)]
public string CustomerID...{get; set;}
[Column(Name = "ContactName")]
public string Name ...{ get; set; }
[Column]
public string City ...{get; set;}
}
点击展开示例

using ...System.Data.Linq;
DataContext ctx = new DataContext("server=xxx;database=Northwind;uid=xxx;pwd=xxx");
Table<Customer> Customers = ctx.GetTable<Customer>(); 


GridView1.DataSource = from c in Customers where c.CustomerID.StartsWith("A") select new ...{顾客ID=c.CustomerID, 顾客名=c.Name, 城市=c.City};
GridView1.DataBind();

using ...System.Data.SqlClient;
IDbConnection conn = new SqlConnection("server=xxx;database=Northwind;uid=xxx;pwd=xxx");
DataContext ctx = new DataContext(conn);之后,通过GetTable获取表示底层数据表的Table类型,显然,数据库中的Customers表的实体是Customer类型。随后的查询句法,即使你不懂SQL应该也能看明白。从Customers表中找出CustomerID以“A”开头的记录,并把CustomersID、Name以及City封装成新的匿名类型进行返回。
结果如下图:

public partial class NorthwindDataContext : DataContext 
...{
public Table<Customer> Customers;
public NorthwindDataContext(IDbConnection connection) : base(connection) ...{ }
public NorthwindDataContext(string connection) : base(connection) ...{ }
}
点击展开示例
NorthwindDataContext ctx = new NorthwindDataContext("server=xxx;database=Northwind;uid=xxx;pwd=xxx"); 

GridView1.DataSource = from c in ctx.Customers where c.CustomerID.StartsWith("A") select new ...{ 顾客ID = c.CustomerID, 顾客名 = c.Name, 城市 = c.City };
GridView1.DataBind();
点击展开示例

using ...System.IO;
NorthwindDataContext ctx = new NorthwindDataContext("server=xxx;database=Northwind;uid=xxx;pwd=xxx");
StreamWriter sw = new StreamWriter(Server.MapPath("log.txt"), true); // Append
ctx.Log = sw; 


GridView1.DataSource = from c in ctx.Customers where c.CustomerID.StartsWith("A") select new ...{ 顾客ID = c.CustomerID, 顾客名 = c.Name, 城市 = c.City };
GridView1.DataBind();
sw.Close();
点击展开示例
using ...System.Data.Common;
using System.Collections.Generic;
NorthwindDataContext ctx = new NorthwindDataContext("server=xxx;database=Northwind;uid=xxx;pwd=xxx"); 


var select = from c in ctx.Customers where c.CustomerID.StartsWith("A") select new ...{ 顾客ID = c.CustomerID, 顾客名 = c.Name, 城市 = c.City };
DbCommand cmd = ctx.GetCommand(select);
Response.Write(cmd.CommandText + "<br/>");
foreach (DbParameter parm in cmd.Parameters) 

Response.Write(string.Format("参数名:...{0},参数值:{1}<br/>", parm.ParameterName, parm.Value));
Customer customer = ctx.Customers.First();
customer.Name = "zhuye";
IList<object> queryText = ctx.GetChangeSet().ModifiedEntities;
Response.Write(((Customer)queryText[0]).Name);执行查询

点击展开示例
NorthwindDataContext ctx = new NorthwindDataContext("server=xxx;database=Northwind;uid=xxx;pwd=xxx");
string newcity = "Shanghai"; 

ctx.ExecuteCommand("update Customers set City=...{0} where CustomerID like 'A%'", newcity);
IEnumerable<Customer> customers = ctx.ExecuteQuery<Customer>("select * from Customers where CustomerID like 'A%'");
GridView1.DataSource = customers;
GridView1.DataBind();
点击展开示例
testContext ctx = new testContext("server=xxx;database=testdb;uid=xxx;pwd=xxx");
ctx.CreateDatabase();
[Table(Name = "test")]
public class test 
...{
[Column(IsPrimaryKey = true, IsDbGenerated = true)]
public int ID ...{ get; set; }
[Column(DbType="varchar(20)")]
public string Name ...{ get; set; }
}
public partial class testContext : DataContext 
...{
public Table<test> test;
public testContext(string connection) : base(connection) ...{ }
}
点击展开示例
点击展开示例

using ...System.Data.SqlClient;
var conn = new SqlConnection("server=xxx;database=Northwind;uid=xxx;pwd=xxx");
var ctx = new DataContext(conn);
var cmd = new SqlCommand("select * from customers where CustomerID like 'A%'", conn);
conn.Open();
var reader = cmd.ExecuteReader();
GridView1.DataSource = ctx.Translate<Customer>(reader);
GridView1.DataBind();
conn.Close();