提问人:temuco 提问时间:9/19/2023 更新时间:9/20/2023 访问量:105
将 Gupta 的 SQLBase 移植到另一个系统
Porting SQLBase by Gupta to another system
问:
我们使用 SQLBase 进行各种版本的开发,包括 12.2。我们的主要应用程序是 Team Developer 应用程序(版本 7.5),它利用 SQLBase 作为其数据库。
除了 Team Developer,我们还使用 C# (.NET Core) 进行编程。我们对 SQLBase 仍然不提供实体框架支持这一事实感到非常困扰。这意味着我们必须使用 C# 应用程序中的旧 ADO.NET 访问数据库。
问题在于,我们在 Team Developer 7.5 中拥有大量代码,这使得简单地交换数据库变得不那么简单。另一方面,我们不想继续使用 ADO.NET 进行开发,而是使用 Entity Framework。
如果我们决定替换数据库,那么就出现了如何从 Team Developer 访问它而不必修改太多程序代码的挑战。
我们需要做些什么才能在 Team Developer 7.5 中使用另一个数据库,如 MySQL、MariaDB、Postgre 或 MS SQL Server?这样,我们最终可以使用实体框架从 .NET 访问数据库,同时仍然使用现有的 Team Developer 代码。
谢谢
勒内
答:
我绝不隶属于 Gupta 或 SQLBase 或任何其他 dBMS 供应商,但在从 SQLBase 降级之前,请三思而后行。
我们现在正在经历这个难题。不是因为实体框架的事情(OLEdB 与 SQLBase 或 SQLServer 一起针对 TeamDeveloper、C# 或其他任何东西都可以正常工作),也不是因为 Gupta SQLBase 存在任何问题(事实上,它在某些情况下优于 SQLServer。
但仅仅因为企业在他们的智慧中说“一切都必须标准化”。
因此,不情愿地开始了迁移 120Gb SQLBase 的 l-o-n-g 过程,该过程运行良好,其所有存储的过程、触发器、索引、FK、100 个内置@functions、关键字(SYSDATETIME ...)到 SQLServer - 再次针对大型 Gupta TeamDeveloper 代码库。
你说得很对 - 简单地换出数据库并不那么简单。
将 SQLBase v12.3 迁移到 SQLServer 2019 意味着大量的工作。
主要需要注意的是:
- 数据类型的格式略有不同,例如 TIME 和 LONG,因此不是直接的同类。
- 在 INSERT 触发器之前。只有 SQLBase 才能正确管理这一点。很难找到等价物。最重要的是,“行级”和“语句”级类型。好!SQLBase 在插入触发器之前
- ETL。除非您使用某种向导(如 SQLServer 导入/导出向导)来在某种程度上帮助导出/传输/加载,否则您会发疯的。
- 罗伊德。没有 dbms 像 SQLBase 那样具有 ROWID。因此,如果你的应用使用 ROWID,请准备好在这方面做一些工作。如果迁移到 SQLServer,最相似的是 ROWVERSION,它是一个二进制 (8) 数字,它跟踪 dB 内的相对时间,而不是实际时间。因此,在整个TD代码中,您可能需要转换 例如
选择 ROWID:
Return VisStrChoose( gGetBrand( ) = DBV_BRAND_MSSQL,
'CONVERT(VARCHAR(MAX), CONVERT(BINARY(8),' || p_sROWIDColName || '), 2 )',
p_sROWIDColName )
其中 ROWID:
Return VisStrChoose( gGetBrand( ) = DBV_BRAND_MSSQL,
'CONVERT(binary(8),\'0x\' + :' || p_sROWIDBindName || ' , 1)', ':' ||
p_sROWIDBindName )
在完成整个 ETL 和 TD 代码修改过程后,最好的建议是三思而后行,然后三思而后行,反对从 SQLBase 迁移。我只是无法证明成本、压力和风险与(无)性能提升、交换连接(当 OLEdB 完成工作时)是合理的。但毫无疑问,我想会有其他人有不同的想法。
谢谢你的详细回答,史蒂夫。
我明白你的意思。特别是 ROWID 给我们带来了精神上的问题,因为我们广泛使用它。但是,我想知道如何从 Team Developer 处理另一个 SQL 数据库。你是怎么做到的?
围绕 Team Developer,我们还有许多其他在 .NET 上运行的附属应用程序 - 这里我指的是 C# 和 .NET Core。这些应用程序不能使用 Team Developer 开发,或者只能通过很大的努力来开发。
现在,这些应用程序需要访问 SQLBase,我们一直在通过 ADO.NET 来访问。它有效,但你觉得你回到了史前。有了 Entity Framework,情况就不同了:您至少节省了 40-50% 的程序代码,开发速度要快得多,而且您不再会从一开始就犯许多错误,而这些错误在 ADO.NET 下经常发生。因此,应用程序不仅开发速度更快,而且更加健壮。
更糟糕的是,Team Developer 仍然不支持 .NET Core,因此如果您需要使用 .NET 开发 DLL,则必须回退到旧的 4.8(或 4.7?)框架。
对于如此昂贵的产品来说,这实在是太多了。
如果我们有一个同时支持 Team Developer 和 Entity Framework Core 的 SQL 数据库,我们的开发人员生活会看起来会好得多,家人也会很高兴。
评论
We're quite bothered by the fact that SQLBase still doesn't offer Entity Framework support.
你确定这是一件坏事吗