帮助C#+ Oracle 11g

时间:2010-11-08 21:02:30

标签: c# oracle oracle11g

我有快速搜索的代码。它在sqlCE中工作得很好

SqlCeCommand Cmd;
Cmd.CommandType = CommandType.TableDirect;
Cmd.CommandText = "MEN";
Cmd.IndexName = "A";
Cmd.SetRange(DbRangeOptions.Match, new object[] { R[15].ToString().Trim(), MyDate }, null);
SqlCeDataReader read = Cmd.ExecuteReader();
while (read.Read())
{
  TmpBAR = read[0].ToString();
}
read.Dispose();
if (TmpBAR == "")
{
  //return false;
}

我尝试像这样转换为oracle:

OracleCommand Cmd;
Cmd.CommandType = CommandType.TableDirect;
Cmd.CommandText = "MEN";
Cmd.IndexName = "A";
Cmd.SetRange(DbRangeOptions.Match, new object[] { R[15].ToString().Trim(), MyDate }, null);
OracleDataReader read = Cmd.ExecuteReader();
while (read.Read())
{
  TmpBAR = read[0].ToString();
}
read.Dispose();
if (TmpBAR == "")
{
  //return false;
 }

我收到错误:

System.Data.OracleClient.OracleCommand' does not contain a definition for 'IndexName' and no extension method 'IndexName' accepting a first argument of type 'System.Data.OracleClient.OracleCommand' could be found (are you missing a using directive or an assembly reference?)

并出现此错误:

System.Data.OracleClient.OracleCommand' does not contain a definition for 'SetRange' and no extension method 'SetRange' accepting a first argument of type 'System.Data.OracleClient.OracleCommand' could be found (are you missing a using directive or an assembly reference?)

2 个答案:

答案 0 :(得分:2)

您需要使用CommandType.Text并创建适当的SQL语句以从表MEN中进行选择。您当前使用的功能是特定于SQLCE的,ORACLE提供商不支持。

您不必担心指定索引名称,ORACLE SQL优化器会自动选择适当的索引,假设存在一个。

我还建议您不要使用Microsoft提供的ORACLE提供程序,因为在Framework 4.0中不推荐使用它。 Oracle的ORACLE提供商非常好。

ODP.NET - http://www.oracle.com/technetwork/database/windows/downloads/index-101290.html

答案 1 :(得分:0)

Oracle ADO.NET组件与SQL CE组件不同。如果您需要能够支持两个提供程序,我建议将所有内容都转换为IDbCommand interface,并且您将获得两个提供程序都需要支持的功能集。如果您不需要同时支持两个提供程序,则只需要在Oracle Command对象中找到不同的语法来执行相同的操作。