我有一个网络服务,它试图连接到桌面会计应用程序的数据库。
它具有相同名称但具有不同模式名称的表,例如:
[DatabaseName].[202001].[CustomerCredit]
[DatabaseName].[202002].[CustomerCredit]
.
.
.
[DatabaseName].[202014].[CustomerCredit]
[DatabaseName].[202015].[CustomerCredit]
[DatabaseName].[202016].[CustomerCredit]
...
..
[DatabaseName].[2020xx].[CustomerCredit]
Schema 名称采用,等[Year+IncrementalNumber]
格式。[202014]
[202015]
[202016]
每当我想在数据库中查询客户信用信息时,我应该从具有最大数字的模式中获取信息,例如[DatabaseName].[202016].[CustomerCredit]
202016 是否是我数据库中的最新模式。
注意: 会计应用程序数据库中新模式的创建没有规则,完全由会计应用程序的用户决定,安装在不同位置的每个应用程序实例可能有不同的模式数量。
所以当我开发我的网络服务时,我不知道在开发之前连接到哪个模式。在运行时,我可以找到正确的模式以从其表中查询,但我不知道如何设法在查询中获取具有正确模式名称的表信息。我通常创建一个 linq-to-sql dbml 类并使用它的定义从 db 读取信息,但我不知道如何以这种方式管理模式更改?
DBML 设计器管理 Scehma 名称,如下所示:
[global::System.Data.Linq.Mapping.TableAttribute(Name="[202001].CustomerCredit")]
但是,由于我的应用程序可以在运行时检索模式名称,所以我不知道如何在我的特殊情况下修复表声明。它在 ADO.NET 中很容易处理,但我不知道它在 Linq2SQL 中的等价物:
select count(*) from [" + Variables.FinancialYearSchemaName + "].CustomerCredit where SFC_Status = 100;