在我最近的多用户数据库应用程序中,有很多检索和操作来自不同数据库源类型(Oracle,Access,SQL Server)的数据库数据。我知道.NET框架技术要做到这一点,它基本上工作正常。但按照我的方式编写它似乎很乏味,我正在寻找一种更好的方法。我对此相对缺乏经验,所以我确信有。
我现在这样做的方法就是使用字符串连接从参数生成SQL Text Statements。我还在主应用程序数据库(Access)中使用了存储过程,但它太不灵活了。
我的能力非常有限。我无法更改Oracle和SQL Server数据库。单独应用程序拥有的Access数据库。 Oracle和SQL Server数据库非常慢,因此我不确定数据绑定是否是一个好主意,因为每次查询数据时它都会降低应用程序(和用户体验)的速度。但同样:我对数据绑定功能知之甚少。
答案 0 :(得分:2)
如果后端数据库没有正确编入索引,正如您在评论中所说的那样,在前端几乎没有什么可以提高从后端获取数据的模块的性能,特别是如果那些后端 - 数据库是动态的,经常变化。
如果允许您在后端Oracle和SQL Server引擎上编写存储过程,则可以通过使用带参数的SP并执行这些SP并通过以下参数传递参数来提高某种的性能。 Command对象的Parameters集合。这种方法消除了引擎必须解析和编译SQL语句的开销。
关于MS-Access,这也是一个薄弱环节。 Access不是一个真正的后端引擎,而是使用共享文件架构。 where子句条件适用于客户端,IIRC。因此,您最终会通过线路吸取大量数据,仅在客户端丢弃它,因为它不符合where子句的条件。如果您的组织将来必须长时间使用此应用程序以确保此类端口的成本合理,则可以通过将SQL替换为SQL Server Express来提高性能。
P.S。 “乏味”是主观的。我无法帮助你。有些人觉得ADO.NET很乏味。有些人发现Linq乏味。有些人被perl所剥夺,其他人则鄙视与之合作。
答案 1 :(得分:1)
在这种情况下......您可以创建一个图层,在该图层中可以访问所有打开的数据库,关闭活动连接...您可以将列和值设为Dictionary
....在此类中公开所有必须传递的方法是db类型,表名,Dictionary
具有col_name \ value,查询类型(select / update / delete / insert / SP)...对于Dictionary
你可以如果您不希望它们被硬编码,则将模型/实体/甚至xml创建到相应的表中.....但是Db层类您将不得不花费一些时间使其尽可能通用。 ..