C# Ar主题运算符溢出Oracle ODP.NET
下面的查询在Oracle中作为内联查询运行时运行良好,但当我使用ODP.NET与.NET一起使用时,会出现arthematic运算符溢出。我不确定从.net运行oracle data adapter时为什么会出现arthmatic运算符溢出C# Ar主题运算符溢出Oracle ODP.NET,c#,.net,oracle,plsql,odp.net,C#,.net,Oracle,Plsql,Odp.net,下面的查询在Oracle中作为内联查询运行时运行良好,但当我使用ODP.NET与.NET一起使用时,会出现arthematic运算符溢出。我不确定从.net运行oracle data adapter时为什么会出现arthmatic运算符溢出 select project_asset.project_id, project_asset.asset_id, asset_crv_v.crv$ crv, asset_crv_v.crv_percent crv_per
select project_asset.project_id,
project_asset.asset_id,
asset_crv_v.crv$ crv,
asset_crv_v.crv_percent crv_percent,
project_asset.expected_useful_life,
asset.mf_division_id,
mfdivision.code_desc division_description,
project_asset.update_asset_base_year_flag,
sumcost.assetbudgetcost budget_cost,
sumCost.assetActualCost actual_cost
from RECAPT.project_asset,
RECAPT.asset,
RECAPT.asset_crv_v,
RECAPT.reference_detail mfdivision,
(select project_asset.project_id,
project_asset.asset_id,
(nvl(sum(project_asset_mfcode.budget_cost), 0)) assetbudgetcost,
(nvl(sum(project_asset_mfcode.actual_cost), 0)) assetActualCost
from RECAPT.project_asset,
RECAPT.project_asset_mfcode,
RECAPT.reference_detail mfcode
where project_asset.project_id = project_asset_mfcode.project_id(+)
and project_asset.asset_id = project_asset_mfcode.asset_id(+)
and project_asset.project_id = 'AMB-Lifecycle-2014'
and mfcode.id = project_asset_mfcode.mf_code_id
group by
project_asset.project_id,
project_asset.asset_id
) sumCost
where project_asset.project_id = 'AMB-Lifecycle-2014'
and project_asset.asset_id = asset.id
and asset.id = asset_crv_v.id(+)
and mfdivision.id = asset.mf_division_id
and sumcost.project_id = project_asset.project_id
and sumcost.asset_id = project_asset.asset_id
order by project_asset.asset_id
执行查询的C#方法
public ProjectDetailAssetCollection Retrieve(ProjectDetailAssetFilterType criteria, OracleConnection oracleConnection)
{
var result = new ProjectDetailAssetCollection();
var parameters = new List<OracleParameter>();
if (!string.IsNullOrEmpty(criteria.ProjectId))
{
parameters.Add(new OracleParameter("p_project_id", criteria.ProjectId));
}
DataSet dataSetResults = SharedCodeDA.ExecuteDataSetLeaveConnectionOpen("RetrieveProjectDetailAssets",
oracleConnection, parameters);
if (dataSetResults.Tables[0].Rows.Count > 0)
{
// only allow maximum 500 records to return
int maxRow = dataSetResults.Tables[0].Rows.Count > SharedCodeDA.MaxRowReturn ?
SharedCodeDA.MaxRowReturn : dataSetResults.Tables[0].Rows.Count;
for (int i = 0; i < maxRow; i++)
{
DataRow assetFromDatabase = dataSetResults.Tables[0].Rows[i];
ProjectDetailAssetType projectDetailAsset = PopulateProjectDetailAssetDEM(assetFromDatabase);
result.Add(projectDetailAsset);
}
}
return result;
}
public static DataSet ExecuteDataSetLeaveConnectionOpen(OracleCommand command, OracleConnection connection,
List<OracleParameter> parameters = null)
{
if (parameters != null)
{
//Added by Danny Ho - this is necessary in order to resolve issue with parameterized values
//that are not in the same order as the SQL
command.BindByName = true;
foreach (OracleParameter item in parameters)
{
command.Parameters.Add(item);
}
}
if (connection != null && (connection.State == ConnectionState.Closed || connection.State != ConnectionState.Open))
{
connection.Open();
}
OracleDataAdapter dataAdapter = new OracleDataAdapter(command);
DataSet dataSet = new DataSet();
dataAdapter.Fill(dataSet);
command.Parameters.Clear();
dataAdapter.Dispose();
command.Parameters.Clear();
command.Dispose();
return dataSet;
}
公共ProjectDetailAssetCollection检索(ProjectDetailAssetFilterType条件、OracleConnection或OracleConnection)
{
var result=new ProjectDetailAssetCollection();
var参数=新列表();
如果(!string.IsNullOrEmpty(criteria.ProjectId))
{
parameters.Add(新的OracleParameter(“p_project_id”,criteria.ProjectId));
}
DataSet dataSetResults=SharedCodeDA.ExecuteDataSetLeaveConnectionOpen(“RetrieveProjectDetailAssets”,
oracleConnection,参数);
如果(dataSetResults.Tables[0].Rows.Count>0)
{
//最多只允许返回500条记录
int maxRow=dataSetResults.Tables[0].Rows.Count>SharedCodeDA.maxrrowReturn?
SharedCodeDA.MaxRowReturn:dataSetResults.Tables[0].Rows.Count;
对于(int i=0;i(+)
连接。查询很难阅读。通过舍入asset_crv_v.crv$crv、asset_crv_v.crv_percent crv_percent crv_percent解决了这个问题,它是30位小数,但问题仍然是如何在中容纳它。请向我们展示您的C代码。我添加了两种方法,用于调用请格式化您的查询并替换(+)
使用ANSI语法连接。查询很难阅读。通过舍入asset_crv_v.crv$crv、asset_crv_v.crv_percent crv_percent crv_percent(小数点后30位)解决了此问题,但问题仍然是如何在.net中容纳此值