跨不同 SQL 数据库兼容的 DDL(CREATE TABLE)?

发布于 2024-10-12 18:59:34 字数 431 浏览 5 评论 0原文

我正在开发一个必须支持(当前)MS Access 和 SQL Server 后端的桌面应用程序。该应用程序正在不断开发,并且经常对数据库进行更改,主要是添加表和视图以支持新功能(但也有一些 DROP 和 ALTER TABLE 来添加新列)。

我有一个系统,它将 DDL 编译为可执行文件,检查数据库以查看可执行文件是否有任何必须执行的新 DDL,然后执行它。这对于单个数据库来说效果很好。

我面临的直接问题是 SQL Server 和 Access 支持截然不同的数据类型名称,因此针对 Access 执行的 CREATE TABLE 语句不会针对 SQL Server 执行(或更糟糕的是,会执行但会创建具有不同数据类型的表)。

是否有一种方法可用于创建 DDL(尤其是 CREATE TABLE 命令),可以通过 ADO 针对这两个数据库执行该 DDL,而无需为每个提供程序制作单独的 DDL?

I'm working on a desktop application that must support (currently) MS Access and SQL Server back ends. The application is under constant development and changes are frequently being made to the database, mostly the addition of tables and views to support new features (but also some DROPs and ALTER TABLEs to add new columns).

I have a system that compiles the DDL into the executable, checks the database to see if the executable has any new DDL that has to be executed, and executes it. This works fine for a single database.

My immediate problem is that SQL Server and Access support wildly different names for data types so a CREATE TABLE statement that executes against Access will not execute against SQL Server (or worse, will execute but create a table with different datatypes).

Is there a method that can be used to create DDL (especially CREATE TABLE commands) that can be executed through ADO against both of these databases without having to craft separate DDL for each provider?

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(4

っ〆星空下的拥抱 2024-10-19 18:59:34

由于您已经在使用 ADO,因此您应该查看 Microsoft ADOX

这允许您使用独立于基础数据源类型的 ADO 对象模型来操作数据源中的结构。即,如果不诉诸显式 DDL,则

任何给定的 ADO 提供程序均不保证对 ADOX 的支持,并且即使 ADOX 支持的级别可用,也可能会有所不同。但对于 MS Access 和 MS SQL Server,我认为您会找到所需的所有功能(而且很可能更多!)

Since you are already using ADO, you should look into Microsoft ADOX

This allows you to manipulate structures in a data source using an ADO object model that is independent of the underlying data source type. i.e. without resorting to explicit DDL

Support for ADOX is not guaranteed by any given ADO Provider, and the level of ADOX support may vary even when it is available. But for MS Access and MS SQL Server I think you will find all the capability you require (and quite possibly more!)

一笑百媚生 2024-10-19 18:59:34

这可以使用 Delphi 中的 DBX 来完成。

以下是示例代码的链接,展示了如何完成此操作。
http://cc.embarcadero.com/item/26210

This can be done using DBX in Delphi.

The following is links to sample code showing how this can be done.
http://cc.embarcadero.com/item/26210

无声情话 2024-10-19 18:59:34

我也有同样的问题。
我解决了在执行 SQL 之前对其应用 C 预处理器的问题。
预处理器包含宏以处理不同的数据库。

斯特凡诺

I had the same problem.
I resolved it applying a C preproccessor to the SQL before executing it.
The preprocessor includes macros in order to handle the different dbs.

Stefano

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文