带有 JOIN 查询的 C# ProvideX/Sage ODBC 驱动程序

问题描述 投票:0回答:1

我正在尝试使用包含简单 JOIN(或 LEFT JOIN)的 SQL 查询执行 OdbcCommand。我收到以下错误:

System.Data.Odbc.OdbcException (0x80131937): ERROR [37000] [ProvideX][ODBC Driver]Unexpected extra token: JOIN

我的代码如下所示:

using var connection = GetOdbcConnection();
connection.Open();

var odbcCommand = new OdbcCommand(SqlQueries.SelectItems, connection);

var reader = odbcCommand.ExecuteReader();

并且

SqlQueries.SelectItems
是:

public const string SelectItems = @"SELECT * FROM Table1 JOIN Table2 ON Table2.Key = Table1.Key";

如果我在 SSMS 中执行以下查询,它工作正常:

SELECT
TOP 10 *
FROM OPENQUERY([DSN_NAME], 'select * from Table1')
LEFT JOIN (SELECT * FROM OPENQUERY([DSN_NAME], 'select * from Table2')) ON Table1.Key = Table2.Key

但是,如果我在 SSMS 中执行以下查询,我会重现完全相同的错误:

SELECT
TOP 10 *
FROM OPENQUERY([DSN_NAME], 'select * from Table1 join Table2 on Table1.Key = Table2.Key')

我尝试了以下方法:

  1. 执行与 SSMS 中使用的完全相同的查询(使用 OPENQUERY),出现以下错误:

    Unexpected extra token: (

  2. 执行与 SSMS 中使用的完全相同的查询(使用 OPENQUERY),但这次使用

    SqlConnection
    SqlCommand

    1. 未指定连接字符串:我收到一条错误,指出必须初始化连接字符串
    2. 指定我在 ODBC 连接中使用的连接字符串,这只是
      DSN=DSN_NAME
      。我真的不知道 ODBC 是否还有其他连接字符串格式可以与
      SqlConnection
    3. 一起使用

我期望 ODBC 命令在两个表之间执行 JOIN 并返回结果。我真的不知道 ODBC 命令如何转换 SQL 查询并将其用于 ODBC 数据源,但必须有一种方法可以做到这一点,因为在 SSMS 中使用 OPENQUERY 时联接可以工作。

我唯一想到的是使用一个查询从表1中选择数据,然后使用另一个查询从表2中选择数据,然后在应用程序端将它们关联在一起;出于性能目的我真的不想这样做(除非我没有任何其他选择)。 这篇文章的答案中也提到了后一种解决方案。

NB:使用 ODBC 连接和 ODBC 命令,任何像

'SELECT * FROM Table1 WHERE MyParameter = ?'
这样的简单查询都可以正常工作。

c# .net join odbc ssms
1个回答
0
投票

从我们的内部问题来看,同样的错误 - 我不相信 Sage Mas90 db 支持内部令牌 - 但以下方法可能有效: 从

<table1>
,
<table2>
哪里
<table1>
.
<field>
=
<table2>
.
<field>

© www.soinside.com 2019 - 2024. All rights reserved.