如何通过c#动态选择和连接Oracle (Dev Vs Test Vs Production Server)

本文关键字:Vs Dev Test Production Server Oracle 何通过 动态 选择 连接 | 更新日期: 2023-09-27 17:50:15

我们公司正在寻求从遗留系统转变为用c#重新构建一切。多年来,我们从原始数据库改为使用Oracle后端。现在我们有一个3层的开发、测试和生产环境。(我们正处于训练的开始阶段,所以这可能是一个愚蠢的问题。但要确保我们从一开始就遵循最佳实践。

我们的大多数程序都是像Windows窗体应用程序那样构建的,而不是基于web的。在每个应用程序的开始,开发人员选择是开发、测试还是生产。某些用户获得测试或生产选项。因此,从本质上讲,它们可以从相同的位置运行完全相同的应用程序,其中一个会话指向测试,另一个指向生产。在应用程序关闭之前,每个应用程序会话一直与Oracle保持连接。(我们计划采用更好的方法来连接和断开连接,而不是总是打开会话。过去我们确实没有这个选择。

当我们学习c#时,我们有连接到数据库的测试,并使其工作。这里的另一个开发人员正在考虑设置一个*。配置文件,当他们打开并回答问题时将被覆盖。但我一直在试图找到其他人如何处理这种情况,你可以多次打开相同的exe,并反对你选择的任何数据库。我的假设是,您可以在每个具有不同*.config的文件夹中使用相同的*.exe。但我不知道这是否真的是最优雅的完成方式。

我们知道,我们将不得不处理很多心态的变化,而不是"嗯,这就是过去的工作方式……"只是想确保我们一开始的方法是正确的。

如何通过c#动态选择和连接Oracle (Dev Vs Test Vs Production Server)

我们有八个测试数据库运行在三台oracle服务器上。每个数据库都链接到我们后端办公室的不同测试版本,以及面向web GUI的前端客户端和许多杂项脚本。为了处理这个问题,我们设置了八个不同的文件系统,每个数据库一个,并编写了一个简单的脚本,将文件系统映射到用户pc,并在本地复制后台文件。因此,用户只需点击他们想要的任何数据库,驱动器就会被映射并复制前文件。生产是完全独立的。

老实说,这个系统很简单,但它运行得很好。将新代码部署到中央存储库,并要求用户重新映射他们的驱动器以获取新的.exe。如果有人需要重新测试旧版本,他们可以在本地删除前版本,而不是更改整个数据库。

可能值得为紧急补丁测试创建另一个测试实例,它是生产版本的精确副本,并且在新版本进入生产版本之前为回归测试创建第四个实例,因为测试环境可能很快不同步,这使得回归变得痛苦。

这可能是一个懒惰的解决方案,但我在我们的环境中有同样的情况,我们通过三个独立的启动项目来解决这个问题,一个用于生产,测试和开发。这些项目都是非常轻量级的,除了设置一个环境属性和启动表单之外什么都不做,这两者都在"真正的"项目中。

作为一个额外的好处,这确实简化了我们的一次点击部署,因为我们可以独立地管理构建。

到目前为止,我还没有遇到这种方法的任何缺点,尽管很可能有人会告诉我有更好的方法。如果我听到了,我会洗耳恭听的。

实际上,我建议不要让一个应用程序可以连接到这三个环境中的任何一个,而是让同一个应用程序有三个不同的部署。

拥有一个可以连接多个数据库实例的应用程序真的不应该是一个大问题——如果这真的是你想要的…只要有一个启动对话框,让用户从批准的环境列表中选择,设置连接并在整个解决方案中使用连接。

关于一个不相关的问题,请查看Dev Art的dotConnect。如果您在一家公司工作(可以支付费用)并且正在使用Winforms,那么它可能会为您省去一些部署ODP.net的麻烦。Managed ODP.net是一个改进,但是它还不支持Oracle的一些更棒的特性,比如批量插入/更新。

随着我们对c#的深入研究,我们讨论了各种连接字符串作为设置等。随着我们对表适配器和实体的了解越来越多,确保在整个应用程序中一致地设置所有内容变得越来越复杂。最后我找到了这个网站和样本http://thecodemonk.com/2010/07/29/global-application-settings-override-now-with-examples/(它有一个c#和vb的例子)

因此,在使用桌面应用程序时,我将上面的示例与弹出式组合表单对话框结合使用,以选择适当的环境。到目前为止,它似乎正是我所需要的。

感谢所有的反馈!