【问题标题】:ODBC Common Language Reference?ODBC 公共语言参考?
【发布时间】:2012-04-18 12:57:36
【问题描述】:

我有一个应用程序,它使用几个不同的数据库来收集类似的信息。我通过一个 ODBC 接口来做到这一点,该接口有效地将我的持久层从我的应用程序层中抽象出来,并且效果很好。

事情是这样的:我想要比

更具体的查询
SELECT * FROM [TableName]

据我所知,这适用于所有 ODBC 数据库,但是当您开始变得更加具体时,语法和语言的使用就会出现更多问题。在 MySQL 中有效的查询不一定在 MSSQL 中有效;在 Oracle 上运行良好的查询在 PostgreSQL 上运行良好。

但是 ODBC 是一个抽象层,所以我认为必须有一个所有兼容 ODBC 的数据库系统都支持的语言参考。如果我使用这些语言结构编写查询,我应该期望得到类似的结果,而不管数据库系统如何。

我说的对吗?有这样的标准吗?如果是这样,我在哪里可以找到语言参考,以便我可以相应地编写查询?我特别感兴趣的东西是这样的结构:

  • 顶部(限制)
  • MID (SUBSTR)
  • 投射(转换)

等等。感谢您的帮助!

【问题讨论】:

  • 我们有同样的情况,但从未找到任何可行的方法。我能做到的最接近的就是做基本的查询转储,然后让应用程序完成繁重的工作,这远非理想。一种替代方法是将查询放在单独的 XML 文件中,然后放在一组连接类中。然后,您可以调用查询和连接,如果您必须对查询进行更改,您可以在 xml 文件中进行更改,而无需重新编译。
  • LINQ-To-SQL/Entities 是一个选项吗?这是 LINQ 解决的类似问题:stackoverflow.com/questions/2938252/generic-sql-builder-net
  • 不幸的是,高级构造是我的问题的一部分。我有一个不强制列约束的数据库系统,它会炸毁所有的处理程序。我正在探索一种通用方法来截断查询中的列长度,作为两部分过程的一部分;首先,获取查询结果的架构,然后使用内联列约束运行查询...即,如果列foo 是 varchar(15),我可以SELECT MID(foo, 1, 15) AS foo...不管我怎么看都很难看.叹息。

标签: c# database odbc


【解决方案1】:

对于函数,ODBC 标准在Appendix E: Scalar Functions 中列出。这包括子字符串。您需要使用语法 {fn func_name(arguments)}。 SQL 92 中的强制转换函数在 ODBC 中转换(例如,SQL92 中的 CAST(值 AS 类型)在 ODBC 中为 {fn CONVERT (value, type)})。然而,top 不是一个函数,而是您的数据库可能支持或不支持的 SQL 语法的一部分(例如,Oracle 没有 top)。

【讨论】:

  • 这确实是正确的答案,虽然很烦人。
猜你喜欢
  • 1970-01-01
  • 2013-08-01
  • 1970-01-01
  • 2023-03-13
  • 1970-01-01
  • 2018-04-24
  • 2011-04-20
  • 2018-06-21
  • 1970-01-01
相关资源
最近更新 更多