使用VB.NET传递SQL和检索/操作数据的最佳实践?

使用VB.NET传递SQL和检索/操作数据的最佳实践?,.net,database,vb.net,ms-access,data-binding,.net,Database,Vb.net,Ms Access,Data Binding,在我最近的多用户数据库应用程序中,有很多从不同的数据库源类型Oracle、Access和SQL Server检索和操作数据库数据。我知道使用.NETFramework技术可以做到这一点,它基本上运行良好。但是,以我的方式编写代码似乎很乏味,我正在寻找一种更好的方法。我在这方面相对缺乏经验,所以我肯定有 我现在的做法是使用字符串连接从参数生成SQL文本语句。我还在主应用程序数据库访问中使用了存储过程,但它太死板了 我的能力非常有限。我无法更改Oracle和SQL Server数据库。应用程序拥有的

在我最近的多用户数据库应用程序中,有很多从不同的数据库源类型Oracle、Access和SQL Server检索和操作数据库数据。我知道使用.NETFramework技术可以做到这一点,它基本上运行良好。但是,以我的方式编写代码似乎很乏味,我正在寻找一种更好的方法。我在这方面相对缺乏经验,所以我肯定有

我现在的做法是使用字符串连接从参数生成SQL文本语句。我还在主应用程序数据库访问中使用了存储过程,但它太死板了


我的能力非常有限。我无法更改Oracle和SQL Server数据库。应用程序拥有的Access数据库。Oracle和SQL Server数据库的速度非常慢,因此我不确定数据绑定是否是一个好主意,因为每次查询数据时,它都会降低应用程序和用户体验的速度。但是,我对数据绑定功能知之甚少。

既然如此。。。您可以创建一个层,在其中访问所有数据库打开关闭活动连接。。。您可以将列和值设置为字典。。。。在这个类中,暴露方法,其中所有必须传递的是db类型、表名、具有col\u name\value的字典、查询类型select/update/delete/insert/SP。。。对于字典,您可以创建模型/实体/甚至xml到相应的表中,如果您不希望对它们进行硬编码。。。。。但是对于Db layer类,您将不得不花费一些时间使其尽可能通用….

如果后端数据库没有正确索引,正如您在评论中所说,您在前端几乎无法改进从后端提取数据的模块的性能,特别是如果这些后端数据库是动态的,经常变化

如果允许您在后端Oracle和SQL Server引擎上编写存储过程,则可以通过使用带参数的SP,执行这些SP并通过命令对象的参数集合传递参数,在一定程度上提高性能。这种方法消除了引擎解析和编译SQL语句的开销

关于MS接入,这也是一个薄弱环节。Access不是真正的后端引擎,而是使用共享文件体系结构。如果条款条件适用于客户端,IIRC。因此,您最终会在线路上吸收大量数据,但却在客户端丢弃了它,因为它不符合where子句的条件。如果您的组织将来需要使用此应用程序足够长的时间,这样一个端口的成本是合理的,那么您可以通过使用SQL Server Express替换Access来提高性能


另外,无聊是主观的。我帮不了你。有些人觉得ADO.NET很乏味。有些人觉得Linq很乏味。有些人对perl很感兴趣,有些人则鄙视使用perl。

您使用的是哪种数据库提供程序,还是每个提供程序都使用单独的数据库提供程序?OLEDB用于Oracle和Access,内置.NET用于SQL Server,由于不够清晰,我已投了反对票。您还需要使用Access作为异构查询的主要中心吗?或者,您是否在寻求一种方法来消除使用ADO.NET直接与这些完全不同的数据库进行通信的访问?另外,当您通过Access与Oracle和SQL Server数据库进行通信时,您如何知道它们的速度很慢,因此,这种缓慢可能是Access将大量数据从后端吸入客户端的方式造成的?@Tim Access将存储静态应用程序数据。我们后端的Oracle和SQL Server存储动态数据。我不通过访问访问,而是直接与指定的驱动程序/提供商访问。在我所在的组织中,我无法改变这一点。我有很多限制,需要从中得到最好的东西。考虑到这些,它永远不会是最优的。后端数据库速度很慢,因为它们很大,并且没有为我的应用程序建立适当的索引,我无法改变这一点。我在以前的.NET应用程序中也做过类似的事情,那就是在泛型上下功夫,但即使它工作得完美无误,这是一个很大的工作,我最终意识到,一个不太通用的方法会更容易阅读,需要更少的工作。在我的组织中的应用寿命很少超过2年,所以需要仔细考虑成本效益。