【问题标题】:Oracle query for ATAN - Specified cast is not valid针对 ATAN 的 Oracle 查询 - 指定的强制转换无效
【发布时间】:2018-04-12 02:04:15
【问题描述】:

我的代码如下:

con.Open();
OracleCommand cmd = CreateCommand();
cmd.Connection = con;               
cmd.CommandText = $"SELECT SUM(ATAN((CASE WHEN (t0.CustomerID = 'Test') THEN 1 ELSE 1 END))) value FROM Customers  t0 WHERE(t0.CustomerID = 'Test')";
cmd.CommandType = CommandType.Text;
var reader = cmd.ExecuteReader();                              
while (reader.Read())
{
    decimal value = reader.GetDecimal(0);
}

我得到的错误 - “指定的演员表无效”

有人可以帮我吗? 提前致谢。 俊

【问题讨论】:

  • 给我们样本数据来处理
  • 我遇到了大小写错误:十进制值 = reader.GetDecimal(0);

标签: c# sql .net oracle


【解决方案1】:

您的查询是否返回一行?只是想知道这是否是由可能返回 null 引起的。

SQL> with customers as
  2   ( select 'Test' CustomerID from dual )
  3  SELECT SUM(ATAN((CASE WHEN (t0.CustomerID = 'Test') THEN 1 ELSE 1 END))) value FROM Customers  t0 WHERE(t0.CustomerID = 'Test');

     VALUE
----------
.785398163

1 row selected.

SQL>
SQL> with customers as
  2   ( select 'Test1' CustomerID from dual )
  3  SELECT SUM(ATAN((CASE WHEN (t0.CustomerID = 'Test') THEN 1 ELSE 1 END))) value FROM Customers  t0 WHERE(t0.CustomerID = 'Test');

     VALUE
----------
     (null)

也许上面的后一种情况是原因?

【讨论】:

  • 前者是这种情况,其值为 .785398163 我想在 c# 中强制转换。谢谢
【解决方案2】:

我把这个问题解决了如下:

con.Open();
OracleCommand cmd = CreateCommand();
cmd.Connection = con;               
cmd.CommandText = $"SELECT SUM(ATAN((CASE WHEN (t0.CustomerID = 'Test') THEN 1 ELSE 1 END))) value FROM Customers  t0 WHERE(t0.CustomerID = 'Test')";
cmd.CommandType = CommandType.Text;
var reader = cmd.ExecuteReader();                              
while (reader.Read())
{
  decimal value = reader.GetOracleDecimal(0);
}

谢谢大家。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2014-04-05
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多