ORA-01460在select语句

时间:2016-06-07 13:21:03

标签: c# asp.net oracle

当我在我的asp.net MVC项目中执行以下select语句时,我试图了解出了什么问题。

public static Vessel GetVesselDetails(string vesselId, string outbound, string callnumber)
    {
        var vessel = new Vessel {Id = vesselId};

        using (var connection = new OracleConnection(_connectionString))
        {
            const string query = @"SELECT * FROM OPS_REPORT.SHIP_VOYAGE WHERE SHIP_ID= :1 AND SHIP_VOYAGE.OUT_VOY_NBR= :2 AND SHIP_VOYAGE.OUT_CALL_NBR = :3";
            var command = new OracleCommand(query) { Connection = connection };

            command.Parameters.Add("1", OracleDbType.NVarchar2, 5).Value = vesselId;
            command.Parameters.Add("2", OracleDbType.NVarchar2, 5).Value = outbound;
            command.Parameters.Add("3", OracleDbType.NVarchar2, 5).Value = callnumber;

            try
            {
                connection.Open();
                OracleDataReader dr = command.ExecuteReader();
                while (dr.Read())
                {
                    vessel.Name = dr["NAME"].ToString();
                    vessel.LineOperator = dr["LINE_ID"].ToString();
                    vessel.Service = dr["SERVICE_ID"].ToString();
                }

            }
            catch (Exception ex)
            {
                Console.WriteLine(ex.Message);
            }
            finally
            {
                if (connection.State != ConnectionState.Closed)
                {
                    connection.Close();
                }
            }
        }
        return vessel;
    }

传递的参数会触发以下错误,但是他们并不是这样做的。

' ORA-01460:未实现或不合理的转换'

例如,当我使用以下参数运行上述内容时,它运行时没有任何问题。

string vesselId = "DES";
string outbound = "16C1";
string callnumber = "1";

但是参数更改为以下,它返回ORA-01460异常......

string vesselId = "CGVG";
string outbound = "078E";
string callnumber = "1";

当我将上述值直接通过Toad执行到数据库视图上时,两个select语句都能正常工作。所以这让我更加困惑。

我确定我忽略了一些简单的事情,或者以不推荐的方式处理参数声明。任何指向正确方向的人都非常感激。

在浏览了有关ORA-01460错误消息的一些信息后,我尝试更改设置参数的方式。

command.Parameters.Add(new OracleParameter("1", vesselId));
command.Parameters.Add(new OracleParameter("2", outbound));
command.Parameters.Add(new OracleParameter("3", callnumber));

当我在上面的问题摘要中描述的两组参数中发送错误消息时,会发生什么。

我也检查了表格上的数据类型,它们是:

SHIP_ID -> VARCHAR2 (4 Byte)
OUT_VOY_NBR -> VARCHAR2 (5 Byte)
OUT_CALL_NBR -> VARCHAR2 (1 Byte)

所有这些都不是Nullable。

1 个答案:

答案 0 :(得分:0)

在DB上的ship_id中添加一个额外的字符点并测试它。