大雀软件园

首页 软件下载 安卓市场 苹果市场 电脑游戏 安卓游戏 文章资讯 驱动下载
技术开发 网页设计 图形图象 数据库 网络媒体 网络安全 站长CLUB 操作系统 媒体动画 安卓相关
当前位置: 首页 -> 技术开发 -> NET专区 -> .NET 数据访问架构指南(一)

.NET 数据访问架构指南(一)

时间: 2021-07-31 作者:daque

精致:正文需要了在多层.net应用步伐中举行基于ado.net的数据参观层的开拓准则。个中心是一组通用数据参观处事和安置,并开拓你沿用最适合的路途和本事(68张打字与印刷页)。 目录 ado.net简介 处治数据库链接 缺陷处治 天性 过程风火墙创作链接 处治 blobs 处事处治 数据分页 简介 纵然你在为.net应用步伐安置数据参观层,那么就应当把 microsoft ado.net用作数据参观模型。ado.net延迟充溢,并且辅助贯穿辩其他数据参观须要、多层web应用步伐及web功效。往往,它应用很多延迟充溢的货色模型, ado.net需要了多种本事用来处治一个确定标题。 正文将开拓你沿用最适合的数据参观本事,其做法是精致列出大范围的通用数据参观安置,需要运用本事,并且倡仪最优查看。正文还恢复了其它往往问到的标题:何处最适合存放数据库链接字符串?应还好吗举行链接生存池?还好吗处治处事?还好吗举行分页以许诺用户在很多记录中振动? 堤防正文的重心是ado.net的应用:应用sql server .netdata provider--随ado.net一起需要的两个需要器之一--参观microsoft sql server 2000。正文在适合的场所,将胜过表白在你应用ole db .net数据需要器参观其它ole db利害数据源时需要堤防的十足辩别。 对于应用正文所安置的开拓准则和最优查看所开辟的数据参观组件的几乎举行,见(data access application block)数据参观应用步伐块。堤防,本举行的源代码是无妨博得的,并且能径自用来你的.net应用步伐中。 谁应当参观正文? 正文为安排创造.net应用步伐的应用步伐安置师和企业开辟人员需要了开拓准则。纵然你遏制安置并开辟多层.net应用步伐的数据层,那么请参观正文。 你发端需要领略什么? 要应用本指南创造.net应用步伐,你必定有应用activex数据货色(ado)和/或 ole db开辟数据参观代码的实质领会,及sql server领会。你也必定领略还好吗为.net平台开辟处治代码,并且也必定领略ado.net数据参观模型引入的一致变化。接受.net开辟的更多动静,见http://msdn.microsoft.com/net 。 ado.net简介 ado.net是.net应用步伐的数据参观模型。它能用来参观接受型数据库体制,如sql server 2000,及很多其它保护安置了ole db需要器的数据源。在那种程度上,ado.net代替了最新簿本的ado本事。然而,ado.net引入了一些洪大变化和变化,它们安排用来结构辩其他、本质非链接的web应用步伐。对于ado 与 ado.net的比较,见msdn中的“用来ado步伐员的ado.net”一文。 ado.net引入的一个重要变化是,用datatable, dataset, dataadapter, 和 datareader货色的笼络代替了ado recordset货色。datatable表露来自一个表的行会合,在这上头它与recordset普遍。dataset表露datatable货色的会合,及与其它表绑定在一起的接受和遏制。实质上,dataset是完备内置的延迟标记说话(xml)辅助的外部生存器中的关贯串构。 dataset的一个要害本能是,它对底层的数据源一无所知,而那些数据源大约用来对其进行填补。这是一个辩其他用来表露数据会合的独立实业,并且它可过程多层应用步伐的各异层由一个组件传递到另一组件。它也可本事xml 数据流被序列化,以是特出适合于各异典范平台间的数据传输。ado.net应用dataadapter货色为发送给和来自dataset及底层数据源的数据创作通道。dataadapter货色还辅助坚韧的批变革天性,未来这是recorder的接中断效。 图1表白了完美的dataset货色模型。 图1 dataset 货色模型 .net 数据需要器 ado.net 附丽.net 数据需要器的功效。 它们需要了对底层数据源的参观,包括四个要害货色(connection, command, datareader,及dataadapter),姑且,ado.net只发行了两个需要器: sql server .net 数据需要器。这是用来microsoft sql server 7.0及其尔后簿本数据库的需要器,它优化了对sql server的参观,并应用 sql server内置的数据变幻合议径自与sql server通信。 当链接到sql server 7.0 或 sql server 2000时,总是要应用此需要器。 ole db .net 数据需要器。. 这是一个用来处治ole db 数据源的需要器。它的工效稍低于sql server .net data provider,因为在与数据库通信时,它需过程ole db层进行倡仪。堤防,此需要器不辅助用来怒放数据库链接(odbc),msdasql的ole db需要器。对于odbc数据源,应应用odbc .net数据需要器。接受与ado.net兼容的ole db需要器列表,见。 姑且察看版中的其它.net数据需要器包括: odbc .net 数据需要器。姑且beta 1.0版可供载入。它需要了对odbc启用器的内置参观,其本事与ole db .net数据需要器需要的对本地ole db需要器的参观本事勾通。对于odbc .net及beta版载入的更多动静见. 用来从sql server 2000中赢得xml的处治需要器。用来sql server web升级2版的xml还包括了专用来从sql server 2000中赢得xml的处治需要器。对于此升级簿本的更多动静,见 . 称谓空间结构 与每个.net数据需要器接收的典范(类,结构,安排,之类)坐落它们各自的称谓空间中: system.data.sqlclient. 囊括了 sql server .net 数据需要器典范。 system.data.oledb. 囊括了 ole db .net数据需要器典范。 system.data.odbc. 囊括了odbc .net数据需要器典范。 system.data. 囊括了独立于需要器的典范,如dataset及datatable。 在各自接收的称谓空间中,每个需要器都需要了connection, command, datareader, 及 dataadapter货色的举行。sqlclient举行都有前缀"sql";而oledb举行火线都有前缀"oledb"。比如,connection货色的 sqlclient举行是sqlconnection。而oledb举行是oledbconnection。普遍的,dataadapter货色的两种举行是sqldataadapter 和oledbdataadapter。 通用机制步调 纵然你很有大约以各其余数据源为本事,并安排将代码从一种数据源移植到另一数据源,那么无妨安排对system.data称谓空间中的idbconnection, idbcommand, idatareader,和idbdataadapter接口进行机制步调。connection, command, datareader, 及 dataadapter货色的一真进行都必定辅助那些接口。 对于举行.net数据需要器的更多动静,见http://msdn.microsoft.com/library/en-us/cpguide/html/cpconimplementingnetdataprovider.asp. 图2表白了数据参观堆栈及ado.net还好吗与其它数据参观本事,包括ado和ole db,接收起来。该图还表白了ado.net模型中的两个处治需要器和要害货色。 图2 数据参观堆栈 对于ado到ado.net的演化,见msdn期刊2000年11月期的风靡“ado+简介:用来微软.net框架的数据参观功效”。 生存过程与径自sql的比较 在正文节余遏制的大遏制代码片断中,都应用了sqlcommand货神色用生存过程去举行数据库安排。在一些例子中,你见不到sqlcommand货色,因为生存过程名径自传递给了sqldataadapter货色,但这仍将开拓sqlcommand货色的创作。 应用生存过程而非sql语句的由于是: 生存过程往往会使天性缩小,因为数据库无妨优化过程应用的数据参观安排,并对其进行缓存以备将来重用。 在数据库中,生存过程可辩别赢得保护。存户无妨被付与举行某个生存过程的权利,但无权处治底层的表。 生存过程将开拓养护大概,因为在一个已安排组件内,篡改生存过程往往要比篡改硬源代码的sql语句大概。 生存过程缩小了一个从底层的数据库结构中付与出的层。生存过程的存户与生存过程的举行精制及底层结构被隔解脱了。 生存过程无妨诽谤收集流量,因为sql语句无妨以批处治的本事举行,而不是从存户端发送多个祈求。 属性与构造因变量的比较 无妨过程构造因变量参数或径自竖立属性来为ado.net货色竖立几乎的属性值。比如,下面的代码片断在工效上是一致的。 // use constructor arguments to configure command objectsqlcommand cmd = new sqlcommand( "select * from products", conn );// the above line is functionally equivalent to the following// three lines which set properties explicitlysqlcommand cmd = new sqlcommand();cmd.connection = conn;cmd.commandtext = "select * from products";从天性看法来说,两种本事的辩别无妨忽略,因为竖立或博得.net货色的属性比对com货色举行普遍安排要有效得多。 所作出的沿用然而遏止爱好和源代码风格遏止。然而,透彻地竖立属性几乎使代码大概领略(越发是当你不熟悉ado.net货色模型时),便于安排和查看。 堤防 未来,vb开辟人员被倡仪遏止应用"dim x as new…"结构创作货色。在com场合中,那些代码将开拓com货色创作过程的“短路”,暴发一些怪癖的和不还好吗怪癖的缺陷。然而,在.net场合中,这已不复是一个标题。 处治数据库链接 数据库链接是一种妨害的、昂贵的、有限的资源,越发是在多层web应用步伐中。你必定透彻处治你的链接,因为你的本事将极大的影相映用步伐的实足升级性。再有,必定堤防安排在哪儿存放链接字符串。你需要一个可安排的、宁靖的场合。 在处治数据库链接和链接字符串时,你应当大举: 过程跨多个存户多路复用一池数据库链接来辅助举行应用步伐的延迟性。 采用可安排的、高天性的链接池战略。 在参观sql server时应用微软windows安排体制认证。 遏止中心层的假冒。 宁靖地生存链接字符串。 较晚地翻开数据库链接,而较早地封锁它们。 本节安置链接池,并帮你沿用适合的链接池战略。其它可选本事也是存在的。本节也将安排还好吗处治、生存、遏止数据库链接字符串。截止,本节还需要了两个源代码安置,应用它们将无助于于保护链接已如实封锁,并归到达链接池中。 链接池 数据库链接池使应用步伐无妨重用池中的现有链接,而不是重复地创遏制数据库的链接。这种本事将极大地缩小应用步伐的可延迟性,因为有限的数据库链接无妨为很多的存户需要功效。此本事也将普遍天性,因为无妨遏止用来创作新链接的洪大本事。 数据参观本事,如odbc和ole db,需要了多种情事的链接池,它们可安排到各异级别上。这两种本事对数据仓库集聚户端应用步伐来说都是透明的。ole db链接池往往被称为对话或资源池。 对于微软数据参观组件(mdac)中池的一致安置,见http://msdn.microsoft.com/library/en-us/dnmdac/html/pooling2.asp。 ado.net数据需要器需要了透明的链接池,每种链接池的如实机制对每种需要器来说是各其余。本节安置的链接池是对于: sql server .net数据需要器 ole db .net数据需要器 用sql server .net 数据需要器池化 纵然正在应用sql server .net数据需要器,那么就可应用该需要器需要的链接池化辅助天性。它是由需要器在处治代码内内置举行的对处事利害的高效机制。每个过程都将创作池,并且直到过程遏止,池才被废黜。 你无妨透明地应用此种链接池,但应当领略池是还好吗被处治的,并要领略无妨用哪些选项来安置链接池。 还好吗安排sql server .net数据需要器链接池 无妨应用一组称谓-值对以链接字符串的情事安排链接池。比如,无妨安排池是否有效(默认是有效的),池的最大、最小含量,用来翻开链接的排队回报被阻断的本事。下面的示例字符串安排了池的最大和最小含量。 "server=(local); integrated security=sspi; database=northwind; max pool size=75; min pool size=5"当链接翻开,池被创作时,多个链接缩小到池中以使链接数适合所安排的最小值。而后,链接就能缩小到池中,直到安排的最大池计数。当达到最鸿图数时,翻开新链接的祈求将排队一段可安排的本事。 沿用池含量 能创作最大极限对于处治几千用户同声发出祈求的巨型体制来说厉害常重要的。你需要监视链接池及应用步伐的天性,以确定体制的最优池含量。最醇厚量还要附丽于运行sql server的硬件。 在开辟本事,大约需要减小默认的最大池含量(姑且是100)以辅助安排链接揭穿。 纵然创作了最小池含量,那么当池发源被填补以达到该值时,会开拓一些天性流逝,固然发源链接的几个存户会居中受益。堤防,创作新链接的过程被序列化了,这就表白着当池发源被填补时,功效器没辙处治同声暴发的祈求。 对于监视链接池的更多动静,见正文监视链接池一节。对于链接池链接字符串重要字的完美列表,见http://msdn.microsoft.com/library/en-us/cpguide/html/cpconconnectionpoolingforsqlservernetdataprovider.asp。 更多动静 在应用sql server .net数据需要器链接池时,必定领略: 链接是过程对链接字符串精确共同的准则被池化的。池化机制对称谓-值对间的空格利害。比如,下面的两个链接字符串将本能独力的池,因为第二个字符串囊括了一个特出的空字符。 sqlconnection conn = new sqlconnection( "integrated security=sspi;database=northwind");conn.open(); // pool a is createdsqlconmection conn = new sqlconnection( "integrated security=sspi ; database=northwind");conn.open(); // pool b is created (extra spaces in string)在.net框架beta版中,当在安排和查看器中运行时,链接池化总是废除了。在安排和查看器外,兑换试版和发行版,链接池都能凡是运作。.net框架的截至发行版(rtm)废黜了这种遏制,链接池在十足场所下都能运行。 链接池被辩别为了多个确定于处事的池和一个用来姑且没有列在处事中的多个链接的池。对于与确定处事安排文接收的线程,将从(囊括了与处事创作的链接的)适合的池中返来链接。这使得应用已创作的链接爆发透明过程。 用ole db .net数据需要器池化 ole db .net数据需要器应用ole db资源池化的底层功效将链接生存到池中。很多本事可用来安排资源池化: 无妨应用链接字符串来安排、使能资源池化或使其使废除。 无妨应用存案表。 无妨过程步伐来安排资源池化。 为了避开与存案表接收的安排标题,应遏止应用存案表安排ole db资源池化。 对于ole db 资源池化的更多精制,见msdn中“ole db步伐员参考”一书的第19章:ole db功效中的资源池化遏制。 用池化货色处治链接池化 本事windows dna开辟人员,倡仪你使ole db资源池化和/或odbc链接池化废除,并把com+货色池化用作将数据库链接生存到池中的本事。多么做要害出于两个由于: 池含量和极限无妨(在com+目录)被透彻安排。 天性普遍了。池化货色的本事无妨成倍的胜过固有池化。 然而,由于sql server .net数据需要器内置地应用池化,以是(在应用此需要器时)你不复需要开辟自己的货色池化机制。多么就无妨遏止细工处事招募带来的搀杂性。 纵然正在应用ole db .net数据需要器,那么安排com+货色池化以从高等安排和校正的天性中受益。纵然你为此本领开辟一个池化货色,那么必定应用ole db资源池化和机开工作招募废除(比如,过程将“ole db services=-4”囊括进链接字符串中)。必定在池化货色的举行中处治处事招募。 监视链接池化 要监视应用步伐对链接池化的运用途合,无妨应用随sql server发行的profiler货色,或随微软windows 2000发行的天性监视器。 要应用sql server profiler 监视链接池化,安排如次: 单击发源,指向步伐,指向microsoft sql server,尔后单击profiler运行profiler。 在文件菜单中,指向兴修,尔后单击盯梢。 需要链接本质,尔后单击确定。 在盯梢属性对话框中,单击事故标签。 在已选事故典型列表中,保护察看登录和察看登出事故表白在宁靖察看下面。 单击运行发源盯梢。在链接建顿时,将会看到察看登录事故;在链接封锁时看到察看登出事故。 要过程天性监视器监视链接池化,安排如次: 单击发源,指向步伐,指向处治货色,尔后单击天性运行天性监视器。 在图表后盾中右击,尔后单击缩小计数器。 在天性货色下拉列表框中,单击sql server:通用统计。 在展现的列表中,单击用户链接。 单击缩小,尔后单击封锁。 堤防 .net框架的rtm簿本将其他囊括一组ado .net天性计数器(那些计数器能与天性监视器贯穿起来应用),那些计数器用来为sql server .net数据需要器监视并集聚链接池化场合。 处治宁靖性 固然数据库链接池化普遍了应用步伐的实足延迟性,这也表白着你不复无妨在数据库端处治宁靖性。这是因为为了辅助链接池化,链接字符串必定是勾通的。纵然需要盯梢每个用户的数据库安排,那么安排为每个安排缩小一个参数,过程这个参数就无妨传递用户身份,细工将用户振动记入数据库。 应用windows 认证 在链接到sql server时,应当应用windows认证,因为它需要了很多廉价: 宁靖性大概处治,因为应用了大约(windows)宁靖模型而不是分其余sql server宁靖模型。 遏止了在链接字符串中嵌入用户名和旗号。 用户名和旗号不是以明文本事在收集中传输的。 过程旗号顽固克日,最小长度,反复废黜登录祈求后帐号锁定普遍了登录的宁靖性。 天性 .netbeta 2版的天性察看表露,应用windows认证与应用sql server认证比较,要奢侈更多的本事本事翻开池化的数据库链接。然而,固然windows认证的成本较高,但与举行一个安置或生存过程所奢侈的本事比较,其(惹起的)天性流逝对抗来说并不重要。截至,上面所列出的windows认证的廉价往往会稍微超过天性流逝。 同样,当翻开一个池化链接时,在.net框架的rtm簿本中,windows认证与sql server认证的辩别安置变得更不明显。 遏止在中心层中假冒 windows认证需要参观数据库的windows帐号。纵然看上去在中心层中应用假冒更符合论理,但必定遏止多么做,因为妨害链接池化并对应用步伐的延迟性暴发要害熏陶。 为领略决这个标题,安排对有限的windows帐号(而不是被认证的遏制人)举行假冒,每个帐号代替一个确定的脚色。 比如,无妨安排下面的本事: 创作两个windows帐号,一个用来读安排,一个用来写安排(也无妨用独力的帐号照射瞄准确定应用步伐的脚色。比如,无妨为互联搜集用户应用一个帐号,而为内里安排员和/或处治员应用其他的帐号)。 将每个帐号照射到一个sql server数据库脚色,尔后为每个脚色竖立所需的数据库权利。 在数据参观层中应用应用步伐论理确定举行数据库安排时,哪个windows帐号需要假冒。 堤防 每个帐号必定是同一域或确定域中在internet动静功效(iis)和sql server中存在的域帐号;也无妨是在每台安置机上创作(完备勾通用户名和旗号)的共同帐号。 为收集库应用tcp/ip sql server 7.0及其尔后簿本辅助用来十足收集库的windows认证。应用tcp/ip无妨博得安排、天性及延迟性廉价。对于应用tcp/ip的更多动静,见正文过程风火墙创作链接 一节。 生存链接字符串 有多种本事可生存链接字符串,每种本事完备各异程度的精致性和宁靖性。固然在源代码中对字符串进行硬源代码需要了最优天性,但文件体制缓存保护了与在文凭体各异部生存字符串接收的天性流逝可被忽略。实质上海番邦语学院部链接字符串(许诺处治员进行安排)所需要的附加精致性在任何场所下都是受欢迎的。 沿用生存链接字符串的本事时,发端要安排的两个重要因素是安排的宁靖性与大概性,其次是天性。 无妨沿用将数据库链接字符串生存在下诸场所: 应用步伐安排文件 比如用来asp.net web应用步伐的web.config文件。 通用数据链接文件(udl) (只被ole db .net 数据需要器所辅助) windows 存案表 定制文件 com+ 目录,过程过应用构造字符串(只用来功效组件) 应用windows认证参观sql server,就无妨遏止在链接字符串生存用户名和旗号。纵然 宁靖须要要求更提防的本事,那么就安排以加密本领生存链接字符串。 对于asp.net web应用步伐,以加密本领将链接字符串存到处web.config文件中是一种宁靖而可安排的处步伐置。 堤防,在链接字符串中将persist security info命名值竖立为假,就无妨遏制应用sqlconnection 或oledbconnection货色的connectionstring属性返来对宁靖利害的本质,如旗号。 下面几个小节安置了还好吗用那些本事生存链接字符串,并说领略对抗的廉价和缺点。这使你能依照确定的应用步伐场合作出相应的的沿用。 应用xml应用步伐安排文件 无妨应用元素appsettings将数据库链接字符串存到处应用步伐安排文件的定制竖立遏制。该元素辅助大力重要字-值对,如下面的代码片断所示: <configuration> <appsettings> <add key="dbconnstr" value="server=(local);integrated security=sspi;database=northwind"/> </appsettings></configuration>堤防:appsettings元素现在在configuration元素下面,并且不许径自出现在system.web下面。 廉价 大概安排。过程常规.net xcopy安排,链接字符串随安排文件一起被安排。 过程步伐大概参观。configurationsettings类的appsettings属性使得在运行时读取数据库链接字符串更为大概。 辅助动态变革(仅限于asp.net)。纵然处治员变革了web.config文件中的链接字符串,那么下次在字符串被参观时所作出的变化生效,这对一个无场合的组件来说,就象存户再次应用组件作出了数据参观祈求一致。 缺点 宁靖性。固然asp.net internet 功效器应用步伐机制步调接口(isapi)dll遏制了存户径自参观带.config延迟名的文件,并且ntfs文件体制权利也用来进一步遏制参观,但你大约仍安排遏止以明文本事将那些本质存到处前者的web功效器上。要缩小宁靖性,需将链接字符串以加密本领存到处安排文件中。 更多动静 应用system.configuration.configurationsettings类的appsettings静态属性,无妨赢得应用步伐的定制竖立。如下面的代码片断所示,此处假如先前示例的定置重要字为dbconnstr。 using system.configuration;private string getdbaseconnectionstring(){ return configurationsettings.appsettings["dbconnstr"];}对于安排.net 框架应用步伐的更多动静,见http://msdn.microsoft.com/library/en-us/cpguide/html/cpconconfiguringnetframeworkapplications.asp. 应用udl文件 ole db .net数据需要器辅助在它的链接字符串中应用普遍数据链接(udl)文件名。无妨以创造参数的情事将链接字符串传给oledbconnection货色,或应用货色的connectionstring属性竖立链接字符串。 堤防 sql server .net数据需要器不辅助在它的链接字符串中应用udl文件。以是,只有应用ole db .net数据需要器,此本事才有效。 对于ole db 需要器,要应用链接字符串引用udl文件,应用“file name=name.udl.”。 廉价 典型本事。你大约保护在用udl文件进行链接字符串的处治了。 缺点 天性。历次翻开链接时,囊括udls的链接字符串都被读取并被领略。 宁靖性。udl文件以纯文本本领生存。应用nfts文件权利无妨保护那些文件的宁靖性,但多么做将冲动与应用.config文件勾通的标题。 sqlclient货色不辅助udl文件。此本事不被 sql server .net数据需要器所辅助,而你要用此需要器参观 sql server 7.0及其尔后簿本。 更多动静 必定保护处治员完美该文件的读/写参观权利再不进行处治,并且还要保护运行应用步伐的身份完美读权利。对于asp.net web应用步伐,应用步伐工作者进程默认是以system帐号运行的,但应用板滞范围的安排文件(machine.config)中的元素无妨将其保护掉。应用web.config文件中的元素,及一个可选的指定帐号,无妨进行假冒。 对于web应用步伐,要保护没有将udl文件放在虚目录中,因为那么会使该文件可过程收集载入。 对于那些及其它与宁靖性接收的asp.net天性的更多动静,见http://msdn.microsoft.com/library/en-us/dnbda/html/authaspdotnet.asp.。 应用windows存案表 无妨应用定制重要字将链接字符串存到处windows存案表中,但由于安排标题,倡仪不要应用。 廉价 宁靖性。应用参观遏止列表(acls),无妨对所选的存案表重要字的参观进行处治。对更高等其他宁靖性,安排对数据进行加密。 过程步伐大概参观。.net类辅助从存案表中读取字符串。 缺点 安排。接收的存案表竖立必定同应用步伐一起安排,从那种程度上对消了xcopy安排的廉价。 应用定置文件 无妨应用定制文件来生存链接字符串,然而这种本事没有廉价,以是并不引见应用。 廉价 没有 缺点 特出源代码。这种本事需要特出源代码,并冲动你透彻处治同声暴发的标题。 安排。此文件必定同其它asp.net应用步伐文件一起正片。遏止将此文件放在asp.net应用步伐的目录或子目录中,就无妨遏制过程收集对其进行载入。 应用创造参数和com+目录 无妨将链接字符串存到处com+目录中,并应用货色的构造字符串将它精致地传递给货色。com+在初始化货色,需要安排构造字符串后,将顿时调用货色的construct本事。 堤防这个本事只用来功效组件。只有处治组件应用了其它功效,如传播式处事处治辅助或货色池化时,才安排应用此本事。 廉价 处治性。应用组件功效mmc插件,处治员无妨很大约地安排链接字符串。 缺点 宁靖性。com+目录被领略是一个不宁靖的生存区(纵然应用com+脚色你无妨遏制对它的参观),并以是不许用来以明文养护链接字符串。 安排。com+目录中的一致必定随.net应用步伐十足安排。纵然应用了其它企业功效,如传播式处事或货色池化,那么将数据库链接字符串存到处目录中不会缩小安排的特出开销,因为要辅助其它功效,必定安排com+目录。 必定为组件需要功效。无妨只为所功效的组件应用构造字符串。要使能构造字符串,不许大概地从servicedcomponent类中派生所需组件类(这将为组件需要功效)。 更多动静 对于还好吗为货色构造安排.net类的更多动静,见附录中的还好吗为.net类使能货色构造 。 对于开辟功效组件的更多动静,见http://msdn.microsoft.com/library/en-us/cpguide/html/cpconwritingservicedcomponents.asp。 链接应用本事 纵然何种.net数据需要器,你必定总是: 尽大约晚地翻开数据库链接。 以尽大约短的本事应用该链接。 尽大约快地封锁该链接。链接直到过程close或dispose本事封锁后,它才归到达池中。固然创作它居于崩溃场合,也应当封锁它。多么做保护了它能返来池中,并被标记为废黜。货色池周期性地扫描池,以安排已被标记为废黜的货色。 为保护在本事返来前链接保护封锁,安排应用下面两个代码片断中演示的本事。第一个示例应用了finally块,第二个示例应用了c# using表露,此声透彻保了货色的dispose本事被调用。 下面的代码保护finally块封锁了链接。堤防,此本事只用来visual basic .net及c#中,因为visual basic .net辅助结构化各别处治。 public void dosomework(){ sqlconnection conn = new sqlconnection(connectionstring); sqlcommand cmd = new sqlcommand("commandproc", conn ); cmd.commandtype = commandtype.storedprocedure; try { conn.open(); cmd.executenonquery(); } catch (exception e) { // handle and log error } finally { conn.close(); }}现在的代码表白了其他一种本事,此本事应用了c# using表露。堤防,visual basic .net并不辅助using表露,或任何工效勾通的对应语句。 public void dosomework(){ // using guarantees that dispose is called on conn, which will // close the connection. using (sqlconnection conn = new sqlconnection(connectionstring)) { sqlcommand cmd = new sqlcommand("commandproc", conn); fcmd.commandtype = commandtype.storedprocedure; conn.open(); cmd.executequery(); }}此本事也适用于其它货色,如sqldatareader 或oledbdatareader,在其它任何货色对姑且链接进行处治前,那些货色必定被封锁。 缺陷处治 ado.net缺陷本能后,将由.net框架内置的底层结构化特出处治辅助所处治。截至,在数据参观代码中的缺陷处购置法与应用步伐中其它场所的缺陷处购置法十足勾通。过程典型的.net特出处治语法和本事,特出被察看和测定到并被处治。 本节刻划了还好吗开辟安康的数据参观代码,并证领会还好吗处治数据参观缺陷。本节还需要了与sql server .net数据需要器接收的特出处治精致指南。 .net 特出 .net数据需要器将确定的数据库的缺陷场合变革为典型的特出典范,应当在数据参观代码中对那些特出进行处治。过程接收的特出货色的属性,无妨博得决定命据库的缺陷精制。 十足.net特出典范截至是从system称谓空间的exception基类中派生的。.net数据需要器释放确定的需要器特出典范。比如,一旦sql server 返来一个缺陷场合时,sql server .net数据需要器释放sqlexception货色。普遍的,ole db .net数据需要器释放 oledbexception典范的特出,此货色囊括了由底层ole db需要器表白的精制。 图3表白了.net数据需要器特出的品位结构。堤防,oledbexception类是从 externalexception类派生的externalexception类是十足com各其他基类。货色的errorcode属性生存了ole db本能的com hresult。 图3 net数据需要器品位结构 缓存并处治.net特出 要处治数据参观各别场合,将数据参观代码放在try块中,并在catch块中应用适合的过滤器捕获本能的任何各别。比如,当应用sql server .net数据需要器编写数据参观代码时,应当捕获sqlexception典范的特出,如下面的代码所示: try{ // data access code}catch (sqlexception sqlex) // more specific{}catch (exception ex) // less specific{}纵然为不止一个catch表露需要了各其余过滤典型,记着,按最特殊典范到最不特殊典范的步调安排它们。过程这种本事,catch块中最特殊典范将将为任何给定的典范所举行。 sqlexception 类所表白的属性囊括了各别场合的精制。其中包括: message属性,它囊括了用来刻划缺陷的文本。 number属性,它囊括独一标识缺陷典范的缺陷号。 state属性。它囊括了对于缺陷启用场合的附加动静。它往往用来开拓特殊缺陷场合的某个确定事故。比如,纵然大约生存过程从不止一条龙中本能同样的缺陷,那么本属性将用来标识某个几乎的事故。 errors会合。它囊括了sql server本能的缺陷的精致动静。此会合部是囊括最少一个sqlerror典范的货色。 下面的代码片断演示了还好吗应用sql server .net数据需要器处治sql server 缺陷场合: using system.data;using system.data.sqlclient;using system.diagnostics;// method exposed by a data access layer (dal) componentpublic string getproductname( int productid ){ sqlconnection conn = new sqlconnection( "server=(local);integrated security=sspi;database=northwind"); // enclose all data access code within a try block try { conn.open(); sqlcommand cmd = new sqlcommand("lookupproductname", conn ); cmd.commandtype = commandtype.storedprocedure; cmd.parameters.add("@productid", productid ); sqlparameter parampn = cmd.parameters.add("@productname", sqldbtype.varchar, 40 ); parampn.direction = parameterdirection.output; cmd.executenonquery(); // the finally code is executed before the method returns return parampn.value.tostring(); } catch (sqlexception sqlex) { // handle data access exception condition // log specific exception details logexception(sqlex); // wrap the current exception in a more relevant // outer exception and re-throw the new exception throw new dalexception( "unknown productid: " + productid.tostring(), sqlex ); } catch (exception ex) { // handle generic exception condition . . . throw ex; } finally { conn.close(); // ensures connection is closed }}// helper routine that logs sqlexception details to the // application event logprivate void logexception( sqlexception sqlex ){ eventlog el = new eventlog(); el.source = "customapplog"; string strmessage; strmessage = "exception number : " + sqlex.number + "(" + sqlex.message + ") has occurred"; el.writeentry( strmessage ); foreach (sqlerror sqle in sqlex.errors) { strmessage = "message: " + sqle.message + " number: " + sqle.number + " procedure: " + sqle.procedure + " server: " + sqle.server + " source: " + sqle.source + " state: " + sqle.state + " severity: " + sqle.class + " linenumber: " + sqle.linenumber; el.writeentry( strmessage ); }}在sqlexception catch块中,代码发源应用logexception辅助因变量记录缺陷场合,此因变量应用foreach表露安排了errors会合中确定于需要器的精制,并将缺陷精制记录到缺陷日志中。 catch块中的代码尔后将确定于sql server的各别封装在dalexception典范的货色中,多么做对调用者的getproductname本事更完美心旨。各别处治步伐应用重要字throw将各传闻回调用者。 更多动静 对于sqlexception类分子的完美列表,见http://msdn.microsoft.com/library/en-us/cpref/html/frlrfsystemdatasqlclientsqlexceptionmemberstopic.asp。 对于定置各其他开辟,.net各其他记录与封装,返来各其他各异本事的应用的更多动静,见http://msdn.microsoft.com/library/default.asp?url=/library/en-us/dnbda/html/exceptdotnet.asp。 从生存过程中本能缺陷 t-sql需要了一个raiserror(堤防拼写)因变量。你可用此因变量本能定置缺陷,并将缺陷返来存户。对于ado.net存户,sql server .net数据需要器对那些数据缺陷进行表露,并把它们变革为sqlerror货色。 应用raiserror因变量是大概场所法是将动态文本本事第一个参数包括加入,尔后指定要害及场合参数,如下面的代码片断所示: raiserror( 'unknown product id: %s', 16, 1, @productid )在这个例子中,包办参数用来将姑且产品id本事缺陷动态文本的一遏制返来,参数2是动态的要害性,参数3是动态场合。 更多动静 为了遏止对动态文本进行硬源代码,你无妨应用sp_addmessage体制生存过程或sql server 企业处治器将你自己的动态缩小到sysmessages表中。尔后你就无妨应用传递到raiserror因变量的id引用动态了。你所树立的动态ids必定大于50000,如次代码片断所示: raiserror( 50001, 16, 1, @productid ) 对于raiserror因变量的完美精制,请在sql server的在线书录中查询raiserror。 透彻应用要害性等第 堤防沿用缺陷要害性等第,并要领略每个级别暴发的报仇。缺陷要害性等第的范围是0-25,并且它用来指出sql server 2000所遇到的题本事典范。在存户端代码中,过程在sqlexception类的errors会合中察看sqlerror货色的 class属性,你无妨博得缺陷的要害性。表1 指出了各异要害性等第的意志及所暴发的报仇。 表1.缺陷要害性等第--报仇及意志 要害性等第 链接已封锁 本能sqlexception货色 意志 10及其以次 no no 汇报型动态,并不表露犯缺陷场合。 11-16 no yes 可由用户篡改的缺陷,比如,应用篡改后的输入数据重试安排。 17-19 no yes 资源或体制缺陷。 20-25 yes yes 深沉的体制缺陷(包括硬件缺陷)。存户链接被遏止。 遏止精致化处事 sql server .net数据需要器对它所遇到的任何要害性大于10的缺陷都抛出sqlexception货色。当本事精致化(com+)处事一遏制的组件察看和测定到sqlexception货色后,该组件必定保护它能废黜处事。这大约是,大约不是精致化过程,并要附丽该本事是否保护对autocomplete属性作出了标记。 对于在精致化处事安排文中处治货色的更多动静,见正文中的确定处事截至一节。 赢得汇报型动态 10及其以次要害性等第用来表露汇报型动态,并且不会冲动sqlexception货色的抛出。 要博得汇报型动态: >创作事故处治步伐,并提交给sqlconnection货色所表白的infomessage事故。下面的代码片断表白了事故包办。 public delegate void sqlinfomessageeventhandler( object sender, sqlinfomessageeventargs e );过程传递到你的事故处治处治步伐中的sqlinfomessageeventargs货色,无妨赢得动态数据。此货色表白了errors属性,该属性囊括一组sqlerror货色--每个汇报动态一个sqlerror货色。下面的代码片断演示了还好吗存案用来记录汇报型动态的事故处治步伐。 public string getproductname( int productid ){ sqlconnection conn = new sqlconnection( "server=(local);integrated security=sspi;database=northwind"); try { // register a message event handler conn.infomessage += new sqlinfomessageeventhandler( messageeventhandler ); conn.open(); // setup command object and execute it . . . } catch (sqlexception sqlex) { // log and handle exception . . . } finally { conn.close(); }}// message event handlervoid messageeventhandler( object sender, sqlinfomessageeventargs e ){ foreach( sqlerror sqle in e.errors ) { // log sqlerror properties . . . }}天性 本节引荐了一些常见的数据参观安置,对每种安置,以ado.net 数据参观代码的情事刻划了最优天性和延迟性处步伐置。在适合的场所,还对天性,工效及开辟最作出了比较。本节安排了下面的工效安置。 赢得多行. 赢得一个截至集,并在赢得的行中重复。 赢得一条龙. 赢得完备指定重要字的一条龙。 赢得一项. 从指定的行中赢得一项。 确定某项数据的存在性. 察看完备确定重要字的一条龙是否存在。这是单项安排安置的一种变体,这边返来一个大概的布尔值就充溢了。 赢得多行 在这个安置中,你要赢得一组表格化数据,并在赢得的行中重复举行某个安排。比如你赢得了一组数据,并以非链接的本事处治,尔后(大约过程web功效)将它本事xml颁布档案传递给存户应用步伐。可选的,你也无妨以html表的情事将那些数据表白出来。 为了辅助确定最适合的数据参观本事,安排你是否需要(非链接)dataset 货色的附加精致性,保护只需要sqldatareader货色需要的原有天性,那些天性特出适合于b2c web应用步伐的数据表露。图4表白了这两种一致场景。 堤防用来填补dataset的sqldataadapter应用sqldatareader本事数据。 图4 多行数据参观安置 本事比较 当从数据源中赢得多行时,你无妨应用下面的本事: 应用sqldataadapter货色本能dataset 或 datatabl货色。 应用sqldatareader货色需要只读的只向前的数据流。 应用xmlreader货色需要只读的只向前的xml数据流。 sqldatareader 与 dataset/datatable间的沿用本质上是天性与工效间的沿用。sqldatareader 需要了最优天性,而dataset需要了特出的工效与精致性。 数据绑定 十足这三个货色都无妨本事数据绑定控件的数据源。而dataset 和 datatable 可本事更广范围控件的数据源。这是因为dataset 和 datatable 举行了(本能ilist接口)ilistsource接口,而sqldatareader 举行了ienumerable接口。很多能进行数据绑定的winform控件需要举行了ilist接口的数据源。 这种各异是因为为每种货色典范安置的场景典范各异。dataset (它囊括 datatable)是一个充溢的、非链接结构,它适合于web和桌面(winform)应用步伐。另一上头,数据参观器保护为web应用步伐进行了优化,这种应用步伐需要优化的、只能向前的数据参观。 察看将要绑定到的确定控件典范的数据源须要。 在应用步伐层间传递数据 dataset需要了可本事xml被大力安置数据的接受图,并许诺数据的非链接缓存正片在应用步伐层与组件间传递。然而,sqldatareader需要了更优化的天性,因为它遏止了与创作dataset接收的天性及外部生存器开销。记着,dataset货色的创作将开拓多个子货色--包括datatable, datarow 和datacolumn--及本事那些子货色容器的会合货色的创作。 应用dataset 应用sqldataadapter填补的dataset货色,当: 你需要非链接的驻留外部生存器的缓存数据,再不你能将它传递到其它组件或应用步伐中的其它层。 你需要外部生存器中的数据接受图以举行xml或非xml安排。 你正在应用的数据来自多个数据源,如多个数据库、表或文件。 你安排变革博得的一些或十足行,并安排应用sqldataadapter的批变革工效。 你要对控件绑定命据,而此控件需要辅助ilist接口的数据源。 更多动静 纵然应用sqldataadapter本能dataset 或 datatable,需堤防: 不必透彻翻开或封锁数据库链接。sqldataadapter fill本事翻开数据库链接,并在此本事返来前封锁该链接。纵然链接历来保护翻开,那么此本事仍使链接居于翻开场合。 纵然出于其它本领需要链接,那么安排在调用fill本事前翻开链接。多么你就无妨遏止不须要的翻开/封锁安排,普遍天性。 固然能重复应用同一sqlcommand货色多举行同样的安置,但不要重复应用此货色举行各其余安置。 对于还好吗应用sqldataadapter货色填补dataset 或 datatable货色的代码示例,见附录中的还好吗应用sqldataadapter 货色博得多行。 应用sqldatareader 些劣场所,无妨应用过程调用 sqlcommand 货色的executereader本事赢得的sqldatareader货色: 正在处治洪亮数据时--太多了而不许在单个缓冲区内养护。 安排减少应用步伐在外部生存器中的印迹。 安排遏止与dataset货色创作接收的开销。 安排对某控件举行数据绑定安排,而此控件辅助举行了ienumerable接口的数据源。 安排清流线化数据参观,并对其优化。 正在读取囊括二进制大货色(blob)列的行。你无妨应用sqldatareader货色以可处治的大块为单位从数据库中将blob数据拉出来,而不是一次性地将十足数据付与出来。对于处治blob数据的更多精制,见正文处治blobs 一节。 更多动静 纵然应用sqldatareader货色,请堤防: 在数据参观器振动本事,底层的数据库链接保护翻开,并不许用来其它任何本领。尽大约早地对sqldatareader货神色用close本事。 每个链接只能有一个数据参观器。 过程向executereader本事传递commandbehavior.closeconnection安排值,无妨在应用完数据参观器后,透彻地封锁链接;大约,将链接性命周期绑定到sqldatareader货色。这预示着当sqldatareader货色封锁时,链接也将封锁。 在应用参观器参观数据时,纵然你领略列的底层数据典范,那么就应应用典范化存取器本事(如getint32 和 getstring),这是因为在读取列数据时,那些本事减少了读取列数据所需的典范变幻量。 为遏止将不须要的数据从功效器发送给存户端,纵然你要封锁参观器并鄙弃十足养护的截至,那么在对参观器调用close本事前调用安置货色的cancel本事。cancel本事保护了功效器的截至被鄙弃,而不会被发送给存户端。辩别,对数据参观器调用close本领略使参观器不必当地付与出养护的截至,以清空数据流。 纵然要赢得从生存过程返来的输出值或返来值,并且你在应用sqlcommand货色的executereader本事,那么在赢得输出或返来值前,必定对参观器调用close本事。 对于演示还好吗应用sqldatareader货色的代码示例,附录中的还好吗应用sqldatareader货色赢得多行数据。 应用xmlreader 下列场所下,应用过程调用sqlcommand货色的executexmlreader本事赢得的xmlreader货色: 安排将赢得的数据本事xml 处治,但不安排冲动因创作dataset货色而暴发的特出天性开销,并且不需要数据的非链接缓存。 安排应用sql server for xml 语法的工效,这种语法许诺以精致的本事从数据库中赢得xml片断(即,不带根元素的xml颁布档案)。比如,这种本事使你无妨精确指定元素名,是应用元涵保护应用以属性为重心的举例表白,举例表白是否随xml数据一起被返来,之类。 更多动静 纵然应用xmlreader,请堤防: 在从xmlreader货色中读取数据时,链接必定保护翻开。sqlcommand货色的 executexmlreader本事姑且不辅助commandbehavior.closeconnection安排值,以是在应用完参观器后必定透彻封锁链接。 对于还好吗应用xmlreader货色的代码示例,见附录中的还好吗应用 xmlreader赢得多行数据。 赢得单列数据 在这种场景中,将从数据源中赢得囊括一组指定列的单列数据。比如,你赢得一个存户id,并安排安排与存户接收的精制;或赢得一个产品id,并安排赢得产品动静。 本事比较 纵然要对从数据源中赢得的一条龙数据举行绑定安排,无妨用sqldataadapter货色填补dataset 或datatable货色,其本事与在先前安置过的赢得多行数据及重复场景中刻划的本事勾通。然而,惟有越发需要dataset 或datatable货色的工效,要不应当遏止创作那些货色。 纵然需要赢得单列数据,那么请应用下面的一种本事: 应用生存过程输出参数. 应用sqldatareader货色. 这两种本事都遏止了在功效器端创作截至集,在存户端创作dataset货色的不须要特出开销。每种本事的对抗天性要附丽于强度等第及数据库链接池化是否被使能。当数据库链接池化使能时,天性察看表露生存过程本事在高强度场合下(同声存在200多链接)其天性比sqldatareader本事高近30%。 应用生存过程输出参数 如次场所中应用生存过程输出参数: 要从链接池化使能的多层web应用步伐中博得一条龙数据。 更多动静 对于演示还好吗应用生存过程输出参数的代码示例,见附录中的应用生存过程输出参数赢得一条龙数据。 应用sqldatareader货色 下列场所,需应用sqldatareader货色: 废黜数据值,还需要元数据时。无妨应用数据参观器的getschematable本事赢得列元数据。 未应用链接池化时。在链接池化废黜时,sqldatareader货色在十足强度场合下都是好本事;天性察看表露,在200观赏器链接时,此本事比生存过程本事在天性上要高约20%。 更多动静 纵然领略查询截至只需返来一条龙,那么在调用sqlcommand货色的executereader 本事时,应用commandbehavior.singlerow安排值。一些需要器,如ole db .net数据需要器,用此本事来优化天性。比如,需要器应用irow接口(纵然此接口存在)而不是价钱更高的irowset接口。这个参数对sql server .net数据需要器没有熏陶。 在应用sqldatareader货色时,总是应当过程sqldatareader货色的典范化存取器本事,如getstring 和getdecimal,博得输出参数。多么做就遏止了不须要的典范变幻。 对于还好吗应用sqldatareader货色赢得单列数据的代码示例,见附录中的还好吗应用 sqldatareader货色赢得单列数据。 赢得单项数据 在本场景中,要赢得单项数据。比如,需要了产品id后,安排查询大约的产品名;或,给出了存户名后,安排查询存户的确定等第。在这种场景中,为赢得单项数据,往往不安排冲动创作dataset 货色或及至是 datatable货色的特出开销。 大约只安排察看数据库中是否存在确定的行。比如,当新用户在网站存案时,需要察看所沿用户名是否保护存在。这是单项数据查询中很特殊的例子,但在此例子中,返来一个大概的布尔返来值就充溢了。 本事比较 当从数据源赢得单项数据时,安排下面的本事: 同生存过程一起应用sqlcommand货色的executescalar本事。 应用生存过程输出或返来参数。 应用sqldatareader货色。 executescalar本事径自返来数据项,因为它是为只返来单个值的查询安置的,与生存过程输出参数和sqldatareader本事比较,它需要更少的代码。 从天性上头来说,应当应用生存过程输出或返来参数,因为察看截至表露,生存过程本事在从低强度到高强度场合中(从同声不到100观赏器链接到200观赏器链接)需要了一致的天性。 更多动静 纵然过程executequery本事所举行的查询返来多列和/或行,那么此本事只返来第一条龙的第一列。 对于演示还好吗应用executescalar本事的代码片断,见附录中的还好吗应用 executescalar赢得单项数据。 对于演示还好吗应用生存过程输出或返来参数赢得单项数据的代码示例,见附录中的还好吗应用生存过程输出或返来参数赢得单项数据 对于演示还好吗应用sqldatareader货色赢得单项数据的代码示例,见附录中的还好吗应用 sqldatareader货色赢得单项数据。 过程风火墙创作链接 需要往往安排互联搜集应用步伐以使它无妨过程风火墙链接到sql server。比如,很多web应用步伐及风火墙的要害结构组件是周边收集(也被称为dmz或非核交兵化区),它们用来分割高端web功效器与内里收集。 过程风火墙链接到sql server时,需要对风火墙,存户和功效器进行透彻安排。sql server需要了存户收集应用步融合功效器收集应用步伐以辅助进行安排。 沿用收集库 当过程风火墙创作链接时,应用sql server tcp/ip收集库来简化安排,这是sql server2000安排的默认选项。纵然应用先前簿本的sql server,那么辩别应用存户端收集应用步融合功效器端收集应用步伐察看tcp/ip是否在存户和功效器端保护被安排为默认的收集库。 废黜安排廉价,应用tcp/ip库还表白着: 受益于洪量数据的矫历来能和缩小的延迟性。 遏止与指定弹道接收的附加宁靖动静。 必定在存户和功效器安置机上安排tcp/ip,因为大一致风火墙遏制了流量过程的端口,以是必定堤防安排sql server所应用的端口号。 安排功效器 sql server的默认典型监听1433端口。然而,sql server 2000的指定典型在它们首次翻开时,动态地分配端口号。收集处治员有安排在风火墙翻开决定范围的端口;以是,当随风火墙应用sql server的指定典型时,运用功效收集应用步伐对典型进行安排,使它监听确定的端口。尔后处治员对风火墙进行安排,以使风火墙许诺流量到达确定的ip场合及功效器典型所监听的端口。 堤防,存户端收集库所应用的源端口号在1024-5000间动态分配。这是tcp/ip存户端应用步伐的典型作法,但这表白着风火墙必定许诺途经此范围的任何端口流量无妨过程。对于sql server所应用的端口的更多动静,在微软产品辅助功效网站上,莅临inf: p 过程风火墙对sql server进行通讯所需的tcp端口 。。 动态安排指定典型 纵然变幻了sql server所监听的默认端口,那么就要对存户端进行安排,以使它链接到此端口。更多精制,见正文中的安排存户端 一节。 纵然变幻了sql server 2000默认典型的端口号,那么不篡改存户端将开拓链接缺陷。纵然存在多个sql server 典型,最新簿本的mdac数据参观堆栈(2.6)将进本时事安排,并应用用户数据报合议(udp)安置(过程udp端口1434)对指定典型进行定位。固然这种本事在开辟场合下大约有效,但在现在场合中却不大大约凡是处世,因为典型发问下风火墙遏制udp安置流量的过程。 为了避开这种场所,总是将存户端安排为链接到已安排好的本领端口号。 安排存户端 应当对存户端进行安排以应用tcp/ip收集库链接到sql server,并且也应当保护存户端库应用了透彻的本领端口号。 应用tcp/ip 收集库 应用sql server存户端收集库,无妨对存户端进行安排。在某些安排簿本中,大约没有将这个应用步伐安排到存户端(如web功效器)。在这种场所下,无妨按如次本事之一处治: 应用过程链接字符串需要的“network library=dbmssocn”称谓-值对指定收集库。字符串dbmssocn用来标识tcp/ip(套接字)库。 堤防 在应用sql server .net数据需要器时,收集库的默认竖立是应用“dbmssocn”。 在存户端板滞上篡改存案表,把tcp/ip竖立为默认库。对于安排sql server收集库的更多动静,莅临howto: 不应用存户端收集应用步伐而篡改sql server默认收集库(q250550)。 指定端口 纵然sql server的典型被安排为监听默认的1433之外的其它端口,那么过程以次安排,就能指定链接到的端口号: 应用存户端收集应用步伐 应用需要给链接字符串的“server”或“data source”称谓-值对来指定端口号。要按下面的本领应用字符串: "data source=servername,portnumber" 堤防 servername无妨是ip场合,或域名体制(dns)名,为了优化天性,无妨应用ip 场以是遏止dns 查询。 传播式处事处治 纵然开辟了应用com+传播式处事处治和微软传播式处事处治融洽器(dtc)功效的功效组件,那么就需要对风火墙进行安排,以许诺dtc流在各异dtc典型间及dtc与资源处治器(比如sql server)间振动。 接受为dtc盛发端口的更多动静,见info:为过程风火墙处世,安排微软传播式处事处治融洽器 (dtc)。 处治blobs 姑且,很多应用步伐除去向置很多顽固的字符串和数字型数据外,还要处治象图形或声音--及至搀杂的数据本领,如视频本领的数据。图形、声音与视频的数据本领典范纷歧。然而从生存看法来说,它们都可被视为二进制数据块,往往将其称为blobs(二进制大货色)。 sql server需要了binary, varbinary, 和image数据本领来生存blobs。不安排称谓,blob数据也可被称为基于文件的数据。比如,你大约要生存与确定行接收的二进制长表白字段。sql server为此本领需要了ntext 和text数据典范。 往往,对于小于8kb的二进制数据,应用varbinary数据典范。对于超过此大小的二进制数据,应用image 。表2 会合了每个数据典范的要害天性。 表2 数据典范天性 数据典范 大小 刻划 binary 范围从1-8kb。生存大小是指定大小加4字节。 恒定长度的二进制数据 varbinary 范围从1-8kb。生存大小是所需要数据的实质大小加4字节。 可变长度的二进制数据 image 从0-2gb大小的可变长度二进制数据 大含量可变长度二进制数据 text 从0-2gb大小的可变长度数据 字符型数据 ntext 从0-2gb大小的可变长度数据 宽字节字符数据 何处生存blob数据 sql server 7.0及其尔后簿本保护普遍了存到处数据库中的blob数据的应用天性。这种场所的一个由于是数据库页面大小保护缩小到了8kb。截至,小于8kb的文本或图象数据不必再存到处页面独力的二进制树结构中,而是能被存到处单列中。这表白着读取和写入text, ntext, 或 image数据能象读取或写入字符或二进制字符串那么快。超过8kb后,将大师中创作一个南针,数据本人存到处独立数据页面包车型的士二进制树结构中,这不行遏止会对天性暴发报仇。 对于冲动text, ntext, 和 image数据存到处单列中的更多动静,见sql server在线文籍中的应用text和image数据重心。 一个往往应用的处治blob数据的可选本事是,将blob数据存到处文件体制中,并在数据库列中生存一个南针(往往是一个普遍资源定位器--url链接)以引用透彻的文件。对于sql server 7.0未来的簿本,将blob数据存到处数据库外的文件体制中,无妨普遍天性。 然而,sql server 2000校正了blob辅助,以及ado.net对读取和写入blob数据的辅助,使在数据库中生存blob数据爆发一种可行的本事。 在数据库中生存blob 数据的廉价 将blob数据存到处数据库中,带来了很多廉价: 大概保护blob数据与行中其它项数据的同步。 blob数据由数据库所辅助,完美大约的生存流,大概处治。 过程sql server 2000所辅助的xml无妨参观blob数据,这将在xml流中返来64位源代码刻划的数据。 对囊括了恒定或可变长度的字符(包括宽字符)数据的列无妨举行sql server全文本安置(fts)安排。也无妨对囊括在image字段中的已本领化的基于文本的数据--word 或 excel颁布档案--举行fts安排。 将blob数据写入到数据库中 下面的代码演示了还好吗应用ado.net将从某个文件博得的二进制数据写入sql server image字段中。 public void stor

热门阅览

最新排行

Copyright © 2019-2021 大雀软件园(www.daque.cn) All Rights Reserved.