首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >为什么SQL联接在Oracle中失败?

为什么SQL联接在Oracle中失败?
EN

Stack Overflow用户
提问于 2014-03-28 12:09:13
回答 4查看 589关注 0票数 2

我只是使用oracle尝试使用简单的连接和C#。应该没什么大不了的。但总是失败。它适用于。问题出在哪里?(OleDb或Odbc在这里没有什么区别,我都试过了)

编辑:

  • 甲骨文版本可能是问题所在吗?(似乎我们正在使用8.1.7.0.0和8.1.5.0.0模块)

代码:

代码语言:javascript
复制
using System;
using System.Data.Odbc;

namespace ConsoleApplication1
{
    class Program
    {
        static void Main(string[] args)
        {
            string n = Environment.NewLine + "--------------------------------" + Environment.NewLine + Environment.NewLine;

            // connect
            string connectionString = "dsn=TEST;uid=read;pwd=myPwd";
            OdbcConnection connection = new OdbcConnection(connectionString);
            connection.Open();

            // select (key is actually text not numeral)
            string query = "select * from INFOR.ZEITEN where (KEY = 0)";
            query = "select a.KEY, b.GREG from INFOR.ZEITEN a inner join INFOR.ZEITEN b on (a.AUSWEIS = b.AUSWEIS) where (a.KEY like '1')";

            try
            {
                query = query.Replace(Environment.NewLine, " ");
                Console.WriteLine(n + query);
                OdbcCommand command = new OdbcCommand(query, connection);
                OdbcDataReader reader = command.ExecuteReader(); // throws exception
                if (reader != null)
                    Console.WriteLine(n + "success, now read with reader!");
            }
            catch (Exception e)
            {
                Console.WriteLine(n + e.Message + n + e.StackTrace);
            }

            // wait
            Console.ReadKey();
        }
    }
}

输出:

成功的,简单的选择:

EN

回答 4

Stack Overflow用户

回答已采纳

发布于 2014-03-28 12:47:07

ANSI加入(前)。inner join)在9i中首次被支持。您需要使用旧的语法:

代码语言:javascript
复制
select a.KEY, b.GREG 
 from INFOR.ZEITEN a,
      INFOR.ZEITEN b 
where (a.AUSWEIS = b.AUSWEIS) 
      and  (a.KEY like '1')

请注意,在本例中,like运算符与=等效,但您可能知道

票数 4
EN

Stack Overflow用户

发布于 2014-03-28 12:13:11

单词key是一个保留词。这意味着这是一个非常糟糕的身份选择。你得用双引号来逃避它。这样做可能会奏效:

代码语言:javascript
复制
        query = "select a.\"KEY\", b.GREG
                 from INFOR.ZEITEN a inner join
                      INFOR.ZEITEN b
                      on (a.AUSWEIS = b.AUSWEIS)
                 where (a.\"KEY\" like '1')";

我猜\"会在这个上下文中工作,但是可能会有另一种方法来插入这个字符。

票数 1
EN

Stack Overflow用户

发布于 2014-03-28 12:16:39

我认为KEY是数字的,所以不能使用LIKE。这是因为WHERE KEY = 0运行得很好。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/22712444

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档