您的位置:首页 > 编程语言 > C#

C#高级编程(第7版)读书笔记(三)

2012-03-07 15:08 267 查看
第四部分数据

第30章核心ADO.NET

SqlServer,OLEDB,ODBC方式支持

连接Oracle到www.oracle.com/technology/tech/windows/odpnet/index.html

下载ODP.NET

ADO.NET类以断开连接的方式工作

30.2使用数据库连接

连接字符串config

工厂模式

高效的使用连接

try-catch-finally

using语句块

事务:TransactionScope().Complete()

独立级别:ReadCommitted(默认),ReadUncommitted,Repeatable,ReadSerializable

30.3命令

ExecuteXmlReader()仅sql可用

命令字符串后加 FOR XML AUTO/RAW等

Cmd.Parameters.AddWithValue()添加命令参数

如果多次调用同一存储过程,可构建SqlParameter实例,每次重新为parameter赋值即可

30.4快速数据访问:数据读取器

30.5管理数据和关系:DataSet类

内存中的数据库

可通过DataRowVersion指定获取DataRow的某个字段的对应状态值

DataRowState

AcceptChanges(),BeginEdit(),EndEdit()

GetChildRows(),GetParentRows()

生成架构:DataAdapter,自定义,xml

关系:ds.Relations.Add()

dt.PrimaryKey = column/column[];

dt.Constraints.Add(new UniqeConstraint(“name”,column))

childDt.Constraints.Add(new ForeignConstraint(“name”,parentColumn,chidColumn))

UpdateRule/DeleteRule

30.6XML架构:用XSD生成代码

Xsd.exe name.xsd /d[ataset]

/language: /namespace:

自动生成对应的类文件及代码

30.7填充DataSet类

使用数据适配器

导入xml文件

da.Fill(ds,”name”)

ds.ReadXml(“name.xml”)

30.8持久化DataSet类的修改

da.Update(ds,”tablename”):根据RowState执行每行对应的da对应属性的命令。

UpdataRowSource.OutputParameters/None/Both确定执行后返回的值

ds.WriteXml(“name.xml”[,XmlWriteMode.WriteSchema])

30.9使用ADO.NET

分层开发:

ds.Copy()复制所有

ds.Clone()复制结构无数据

ds.GetChanges()改变过的数据

ds.Merge()合并更新过的数据

生成SqlServer的键:

@@IDENTITY返回由会话创建的最后一个标识值,如果有触发器也用了标识种子,不可靠

Scope_identity()当前范围内最后一个标识值

Ident_Current()任何范围内给定表的最后一个标识

使用时都需谨慎

命名约定:

第31章ADO.NET Entity Framework

对象-关系的映射架构

31.1概述

关系数据库架构到对象的映射

定义独立于数据库架构的实体类,映射到数据库的表和关系

Entity Sql

LINQ to Entities

类对应的名称空间:Data,Data.EntityClient,Data.Objects等

31.2Entity Framework映射

逻辑层:关系数据

概念层:.net类

映射层:.net到关系或关联的映射

SSDL

CSDL

MSL

31.3Entity Client

System.Data.SqlClient名称空间中的类

EntityConnection等

特殊的连接字符串,EntitySQL代替T-SQL

Metadata=res:|res:;provider=;provider connetion string=

31.4实体

基类EntityObject

System.Data.Objects.DataClasses空间

31.5对象上下文

ObjectContext可以和DataAdapter媲美

ObjectSet<TEntity>

31.6关系

IEntityWithRelationships.RelationshipManager

Include()

31.7对象查询

ObjectQuery<T>

31.8更新

ObjectStateManager

31.9LINQ to Entities

ObjectQuer<T>

第32章数据服务

32.1概述

通信部分使用WindowsCommunicationFoundation WCF通信基础,还使用WebHttpBinding

AtomPub,JSON

客户端可通过上下文把变更信息发送给服务器

32.2包含CLR对象的自定义宿主

DataService<T>类

IRequestHandler

Message ProcessRequestForMessage(Stream messageBody)

几个特性标记

需要进行如下操作:

1CLR对象

标记[DataServiceKey(“”)]:唯一性字段

2数据模型

IQueryable<T>类型属性

3数据服务

DataService<T>派生类

Static InitializeService(config)方法

4驻留服务

DataServieHost

宿主

5其他服务操作

32.3HTTP客户端应用程序

$value,@top,@skip,@count

32.4使用WCF和ADO.NET Entity Framework

Asp.net宿主和EDM访问数据库实体数据模型

DataService模板创建svc文件

System.Data.Service.Client应用程序

DataServiceContext

DataServiceQuery<TElement>

第33章处理xml

33.1.Net支持的xml标准

www.w3.org

w3c标准

33.2System.Xml名称空间

Xml[Text]Reader/Writer

XmlNode,Xml[Data]Document,XmlNodeList,Xml[Url]Resolver

33.3使用System.Xml类

Xml文件格式

33.4读写流格式的xml

XmlReader.Create()

Read()

MoveToCotent()

ReadElementString()

NodeType,Name

HasAttributes,AttributeCount

GetAttribute(),MoveToFirst/NextAttribute()

XmlReaderSetting验证

XmlWriter类,XmlWriteSetting类

WriteStart/EndDocument()

WriteStart/EndElement(“”)

WriteElment/AttributeString(“”,””)

WriteCData()输出<!CDATA[..]>

WriteComment(),WriteChars()

33.5在.net中使用DOM

XmlNode[List]是DOM的核心

XmlDocument,XmlAttribute

XmlLinkedNode,XmlCharacterData

Doc.GetElementsByTagName(“”)

Node.OuterXml

Doc.SelectNodes/SelectSingleNode(“/name/childname/elementname”)XPath格式

Doc.CreateElement(“”)

Doc.DocumentElement.AppendChild()

Doc.WriteContentTo()

Doc.Save()

Doc.CreateXmlDeclaration(“1.0”,null,null)

XmlDocument灵活但要求内存多,读取文档性能没有XmlReader好

33.6使用XPathNavigator类

System.Xml.XPath名称空间 只读视图

XPathNavigator如果从XmlDocument创建则可编辑,通过CanEdit可查看

InsertBefore(),InsertAfter()

((IXPathNavigable)doc).CreateNavigator()

Nav.Evaluate(“sum(/../..)”)

System.Xml.Xsl名称空间 支持Xsl转换的类

自定义存储器应实现IXPathNavigable接口

XslCompiledTransform().Load(“name.xsl”);

Trans.Transform(“name.xml”,”out.html”);

wbrower.Navigate(AppDomain.CurrentDomain.BaseDirectory+”out.html”);

XsltArgumentList把对象和方法绑定到名称空间上

.AddExtensionObject(“urn:”,class)

33.7XML和ADO.NET

ds.WriteXml(streamWriter,XmlWriteMode.IgnoreSchema)

ds.WriteXmlSchema(“”)

XmlDataDocument可简化操作

New XmlDataDocument(ds)

Ds.ReadXml()

Ds.ReadXmlSchema()

33.8在XML中序列化对象

XmlSerializer xs=new XmlSerializer(typeof(ClassName));

Xs.Serialize(new StreamWriter(“name.xml”),classInstance);

[XmlRootAttribute()]

[XmlAttributeAttribute()]

[XmlElementAttribute()]

(ClassName)xs.Deserialize(new FileStream(“name.xml”,FileMode.Open))

包含数组的类序列化需使用XmlArray[Item]Atrribute

序列化及反序列化需要使用XmlAttributes及XmlAttributeOverrides类

33.9LINQ to Xml和.net

System.Xml.Linq

33.10使用不同的Xml对象

XDocument.Load(“name.xml”)

Xdoc.Save(“name.xml”)

XElement

XNamespace

New XElement(new XNamespace(“”)+”elementname”,””)生成<elementname xmlns=””>

XComment,XAttribute

33.11使用LINQ查询XML文档

Xdoc.Load(“name.xml”|”http://*/rss.aspx”)

33.12XML文档的更多查询技术

Xdoc.Descendants(“name”)

Xdoc.Element(“name”).Element(“child”).Value

Xdoc.Element(“name”).SetValue(“value”)

Xdoc.Element(“name”).Add(new XElement(“”,””))

第34章.net编程和SQL SERVER

Sql2005/2008能驻留CLR,可运行.net程序集,允许用c#创建存储过程、函数、数据类型,必须是.net3.5

34.1.net运行库的宿主

Sqlserver是.net运行库的一个宿主。

权限级别:safe,external,unsafe

Sp_configure [clr enabled],1

Reconfigure

启用CLR

HostProtectionAttribute保护宿主环境,此类程序集只能运行在unsafe的sqlserver中

Create Assembly mylibrary From path.dll With Permission Set=Safe

Vs2010程序集的权限级别可通过属性database定义

34.2Microsoft.SqlServer.Server

SqlContext,SqlPipe,SqlDataRecord,SqlTriggerContext

SqlProcedureAttribute,SqlFunctionAttribute,SqlUserDefinedAttribute,SqlTriggerAttribute

34.3用户定义的类型

不能用UDT创建类层次结构,不能创建复杂的数据类型,必须能转为字符串。

Visual C# SQL CLR Database Project

UDT模板添加UDT

Struct:INullable

[Serializable]

[UserDefinedType(Format.Native(只能用于值类型字段)|Format.UserDefined)]

Vs中Bulid|Deploy Project或Sql中部署:

Create Assembly SqlTypes From “name.dll”

Create Type ClassName External Name [SqlTypes].[FullClassName]

客户端代码使用,需引用udt

34.4用户定义的聚合函数

[Serializable]

[UserDefinedAggregate(Native.Format)]

struct

定义方法Init,Accumulate,Merge,Terminate

部署:

Create Aggregate [ClassName] (@value int) Return [int] External Name [Namespace].[Classname]

34.5存储过程

[SqlProcedure]标记静态方法

Create Procedure MethodName

{

@paraname type

}

As External Name FullMethodName

调用没有区别

34.6用户定义的函数

[SqlFunction]标记静态方法

Create Function MethodName

{

@para type

}

Returns type

As External Name FullMethodName

可在sql中使用

34.7触发器

[SqlTrigger]标记静态方法

部署:Create .. As External Name ..

34.8XML数据类型

XmlReader xmlreader=reader.GetSqlXml(fieldIndex).CreateReader();

xmlreader.read(),xmlreader.GetAttribute(“”),xmlreader.ReadString()

doc.Load(reader.GetSqlXml(fieldIndex).Value)

查询时sql可结合XQuery

Select xmlFiled.Query(‘/name/child’) from table

.Query(‘for $var in where return {data()}’)

修改sql

xmlField.modify(‘insert/delete/replace value of ‘)

创建索引:create primary xml index priindex on tablename(xmlfield)

Create xml index name on tablename(xmlfield) using xml index priindex for path/value/propery

XML强类型化列:create xml schema collection
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: