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

时间:2009-08-05 14:43:06

标签: c# .net asp.net oracle

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

3 个答案:

答案 0 :(得分:17)

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

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

答案 1 :(得分:4)

更多提示:

答案 2 :(得分:3)

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,则需要添加一个额外的列来跟踪...