我试图让我的头在我的asp.net MVC项目中执行下面的select语句时发生了什么问题。ORA-01460触发器在选择语句上不一致
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";
两个选择语句很好地工作,当我直接通过蟾蜍与上述值执行它们到数据库视图。这让我更加困惑。
我确定我忽略了简单的事情,或者以不推荐的方式处理参数声明。任何指向正确的方式非常赞赏。
我试过在浏览一些关于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)
所有这些都不能为空。
在黑暗中刺中,但尝试使用'OracleDbType.Varchar2'而不是'OracleDbType.NVarchar2',这对您的db列类型更为正确。并且,为了确认,您是否使用ODP.NET? – sstan
您可能还想声明您的确切Oracle数据库服务器版本号(全部5个数字)。 – sstan
感谢您的建议@sstan,当将OracleDbType更改为Varchar2时,上面的两个示例都会触发错误。我正在使用Oracle.ManagedDataAccess v12.1。在Oracle数据库10g企业版版本10.2.0.4.0上运行 – Zephire