C# 甲骨文公司表示,从

C# 甲骨文公司表示,从,c#,oracle11g,odp.net,C#,Oracle11g,Odp.net,我第一次测试我与Oracle的连接。连接本身似乎起作用。然而 从my_core.my_表中选择前1个ID 我用的句子是什么 等等 retVal=cmd1.ExecuteScalar.ToString 投掷 ORA-00923:未在预期位置找到FROM关键字 代码如下: // C# using System; using Oracle.DataAccess.Client; using System.Data; using System.Data.Common; using System.Tran

我第一次测试我与Oracle的连接。连接本身似乎起作用。然而

从my_core.my_表中选择前1个ID

我用的句子是什么

等等

retVal=cmd1.ExecuteScalar.ToString

投掷

ORA-00923:未在预期位置找到FROM关键字

代码如下:

// C#

using System;
using Oracle.DataAccess.Client;
using System.Data;
using System.Data.Common;
using System.Transactions;

class thiscs
{
  static void Main()
  {
    string retVal = string.Empty;
    string providerName = "Oracle.DataAccess.Client";
    #region constr
    string constr =
       @"User Id=mytestuser;Password=mytestpass;Data Source=10.210.10.81:1521/my.svc.net;";

    #endregion

    // Get the provider factory.
    DbProviderFactory factory = DbProviderFactories.GetFactory(providerName);

    try
    {
      // Open a connection to the DB.
      DbConnection conn1 = factory.CreateConnection();
      conn1.ConnectionString = constr;
      conn1.Open();

      // Create a command to execute the sql statement.
      DbCommand cmd1 = factory.CreateCommand();
      cmd1.Connection = conn1;
      cmd1.CommandText = @"SELECT TOP 1 ID FROM my_core.my_table";
      
      // Execute the SQL statement to Select one rowfield in DB.
      retVal = cmd1.ExecuteScalar().ToString();
      Console.WriteLine("Field to be showed by cmd1: {0}", retVal);

      // close and dispose the connection
      conn1.Close();
      conn1.Dispose();
      cmd1.Dispose();
    }
    catch (Exception ex)
    {
      Console.WriteLine(ex.Message);
      Console.WriteLine(ex.StackTrace);
    }
  }
}
我也试过了

从my_core.my_表中选择前1[ID]

选择“嘿,苹果,苹果,嘿”

两者结果相同:ORA-00923:FROM关键字未在预期位置找到

有什么想法吗?蒂亚

TOP在Oracle词汇表中不是关键字,至少在您希望的上下文中不是

TOP是Microsoft SQL Server使用的语法

要复制此操作,请将SQL重写为:

SELECT ID FROM my_core.my_table WHERE rownum <= 1
换句话说,转换:

this: SELECT TOP N .... WHERE ...
                 |
                 +------------------------------+
                                                v
to:   SELECT       .... WHERE ... AND rownum <= N
另请参见此处:

还要注意的是,如您的示例中所示的查询是相当荒谬的。给定时间,索引使用、表组织等将发生变化,这意味着除非您指定顺序,否则您将检索的特定ID可能/将发生变化。

TOP在Oracle词汇表中不是关键字,至少在您希望的上下文中不是

TOP是Microsoft SQL Server使用的语法

要复制此操作,请将SQL重写为:

SELECT ID FROM my_core.my_table WHERE rownum <= 1
换句话说,转换:

this: SELECT TOP N .... WHERE ...
                 |
                 +------------------------------+
                                                v
to:   SELECT       .... WHERE ... AND rownum <= N
另请参见此处:


还要注意的是,如您的示例中所示的查询是相当荒谬的。随着时间的推移,索引的使用、表的组织等都会发生变化,这意味着除非您指定了顺序,否则您将检索的特定ID可能会发生变化。

哦,我明白了,作为一名SQL-T开发人员,我似乎成了某种程度上的Microsoft语言高手。。。让我试试。它抛出了一个ORA-00932:不一致的数据类型:预期ROWID得到了数字对不起,这应该是rownumOh,我明白了,作为一个SQL-T开发人员,似乎让我在某种程度上精通Microsoft语言。。。让我试试。它抛出了一个ORA-00932:不一致的数据类型:预期的ROWID得到了NUMBERSorry,这应该是rownum