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

Viv*_*vek 10 .net c# asp.net oracle

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

LBu*_*kin 17

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

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