繁体   English   中英

使用oracle DB和.NET时的最佳实践

[英]Best practices when using oracle DB and .NET

在以Web服务为中心的.NET应用程序中使用Microsoft Oracle提供程序时,我们需要注意哪些最佳实践或陷阱?

根据我们的生产经验,我们采用的一些做法:

  • 从连接池中检索连接时验证连接。
  • 编写服务代码时不要认为连接是有效的 - 如果不这样做会导致相当多的悲伤,特别是在生产环境中
  • 在可能的情况下,使用它们后显式关闭并处理连接( using(conn){}块工作正常)
  • 在服务中,您应该在尽可能短的时间内使用连接 - 特别是如果您要创建可扩展的解决方案。
  • 考虑对适合于请求的典型持续时间的请求使用显式时序。 你想要的最后一件事就是有一种类型的请求挂起来可能阻塞你的整个系统。
  • 尽可能使用绑定变量来避免在数据库中进行硬解析(如果你不从这种做法开始,这可能是一场性能噩梦)。 使用绑定变量还可以保护您免受基本的SQL注入攻击。
  • 确保系统内置了足够的诊断支持 - 考虑围绕Oracle ADO调用创建一个包装器,以便您可以检测,记录和定位所有这些。
  • 在可能的情况下,考虑使用存储过程或视图将数据模型的查询语义和知识推送到数据库中。 这样可以更轻松地进行配置和查询调优。
  • 或者,考虑使用一个好的ORM库(EF,Hibernate等)来封装数据访问 - 特别是如果你同时执行读写操作。
  • 扩展上面的内容 - 不要用几十个单独编写的SQL片段来编写代码。 这很快成为可维护性的噩梦。
  • 如果您承诺将Oracle作为数据库,请不要害怕使用Oracle特定的功能。 ODP库提供对大多数功能的访问 - 例如返回表格游标,批处理操作等。
  • Oracle将空字符串(“”)和NULL视为等效 - 但.NET没有。 根据Oracle适当规范化字符串处理。
  • 如果要将Unicode .NET字符串直接存储在数据库中,请考虑使用NVARCHAR2而不是VARCHAR2。 否则,将所有unicode字符串转换为符合核心ASCII子集。 如果不这样做可能会导致各种令人困惑和邪恶的数据损坏问题。

更多提示:

Oracle Providers在ASP.NET应用程序中运行良好,但请注意:

  • 将正确版本的oracle客户端32位或64位与应用程序池匹配
  • 用于32位应用程序池的32位客户端,用于64位应用程序池的64位客户端。
  • 权限 - 授予应用程序池用户对oracle客户端目录的权限(c:\\ oracle \\ product \\ 10.2.0 \\ client_1)

这与ASP.NET没有任何关系,但重要的是要注意Oracle将空字符串和null都存储为null,因此如果您需要知道某些内容为空且不为null,则需要添加一个额外的列跟踪...

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM