当前位置:首页 > 网络编程 > WEB编程 > ASP.net >  .NET 数据访问架构指南 11

 .NET 数据访问架构指南 11

点击次数:17 次 发布日期:2008-11-26 10:38:29 作者:源代码网
源代码网推荐      动态查找指定实例
源代码网推荐  
源代码网推荐    如果改变了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的实例被配置为监听默认的1433以外的其它端口,那么通过以下操作,就能指定链接到的端口号:
源代码网推荐  使用客户端网络应用程序
源代码网推荐  
源代码网推荐  
源代码网推荐  利用提供给链接字符串的“Server”或“Data Source”名称-值对来指定端口号。要按下面的格式使用字符串:
源代码网推荐  
源代码网推荐  
源代码网推荐  "Data Source=ServerName,PortNumber"
源代码网推荐    注意 ServerName可以是IP地址,或域名系统(DNS)名,为了优化性能,可以使用IP 地址以避免DNS 查询。
源代码网推荐  
源代码网推荐    分布式事务处理
源代码网推荐  
源代码网推荐    如果开发了使用COM+分布式事务处理和微软分布式事务处理协调器(DTC)服务的服务组件,那么就需要对防火墙进行配置,以允许DTC流在不同DTC实例间及DTC与资源管理器(例如SQL Server)间流动。
源代码网推荐  
源代码网推荐    处理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 StorePicture( string filename )
源代码网推荐  {
源代码网推荐   // Read the file into a byte array
源代码网推荐   FileStream fs = new FileStream( filename, FileMode.Open, FileAccess.Read );
源代码网推荐   byte[] imageData = new Byte[fs.Length];
源代码网推荐   fs.Read( imageData, 0, (int)fs.Length );
源代码网推荐   fs.Close();
源代码网推荐   SqlConnection conn = new SqlConnection("");
源代码网推荐   SqlCommand cmd = new SqlCommand("StorePicture", conn);
源代码网推荐   cmd.CommandType = CommandType.StoredProcedure;
源代码网推荐   cmd.Parameters.Add("@filename", filename );
源代码网推荐   cmd.Parameters["@filename"].Direction = ParameterDirection.Input;
源代码网推荐   cmd.Parameters.Add("@blobdata", SqlDbType.Image);
源代码网推荐   cmd.Parameters["@blobdata"].Direction = ParameterDirection.Input;
源代码网推荐   // Store the byte array within the image field
源代码网推荐   cmd.Parameters["@blobdata"].Value = imageData;
源代码网推荐   try
源代码网推荐   {
源代码网推荐    conn.Open();
源代码网推荐    cmd.ExecuteNonQuery();
源代码网推荐   }
源代码网推荐   catch
源代码网推荐   {
源代码网推荐    throw;
源代码网推荐   }
源代码网推荐   finally
源代码网推荐   {
源代码网推荐    conn.Close();
源代码网推荐   }
源代码网推荐  }
源代码网推荐  
源代码网推荐  
源代码网推荐  
源代码网推荐    从数据库中读取BLOB数据
源代码网推荐  
源代码网推荐    在通过ExecuteReader方法创建SqlDataReader对象以读取包含BLOB数据的行时,需使用CommandBehavior.SequentialAccess枚举值。如果没有此枚举值,阅读器一次只从服务器中向客户端发送一行数据。如果行包含了BOLB数据,这预示着要占用大量内存。通过利用枚举值,就获得了更好的控制权,因为BLOB数据只在被引用时才被发出(例如,利用GetBytes方法,可以控制读取的字节数)。这在下面的代码片段中进行了演示。
源代码网推荐  
源代码网推荐  // Assume previously established command and connection
源代码网推荐  // The command SELECTs the IMAGE column from the table
源代码网推荐  conn.Open();
源代码网推荐  SqlDataReader reader = cmd.ExecuteReader(CommandBehavior.SequentialAccess);
源代码网推荐  reader.Read();
源代码网推荐  // Get size of image data - pass null as the byte array parameter
源代码网推荐  long bytesize = reader.GetBytes(0, 0, null, 0, 0);
源代码网推荐  // Allocate byte array to hold image data
源代码网推荐  byte[] imageData = new byte[bytesize];
源代码网推荐  long bytesread = 0;
源代码网推荐  int curpos = 0;
源代码网推荐  while (bytesread < bytesize)
源代码网推荐  {
源代码网推荐   // chunkSize is an arbitrary application defined value
源代码网推荐   bytesread += reader.GetBytes(0, curpos, imageData, curpos, chunkSize);
源代码网推荐   curpos += chunkSize;
源代码网推荐  }
源代码网推荐  // byte array "imageData" now contains BLOB from database
源代码网推荐  
源代码网推荐    注意使用CommandBehavior.SequentialAccess需要以严格的顺序访问列数据。例如,如果BLOB数据存在于第3列,并且还需要从第1,2列中读取数据,那么在读取第3列前必须先读取第1,2列。  做人要厚道,请注明转自酷网动力(www.ASPCOOL.COM)。
源代码网推荐


源代码网供稿.
网友评论 (0)
会员中心
网络编程
本站推荐
网络编程之精华