c# - C# OracleDataAdapater 填充命令抛出“索引超出数组边界”
问题描述
我遇到了这个问题,不知道如何解决它或如何获取有关错误的更多信息,以便我可以查明来源。
我正在执行一个使用数据适配器填充数据集的 Oracle 查询。它在数组边界之外抛出一个索引,我什至看不到引用的是什么数组!
我在 SQL Developer 中运行查询并运行良好并返回结果,所以我很确定它不是查询本身。
public DataSet GetItemsByDateRange(string[] saLabelIDs, DateTime dtStartDate, DateTime dtEndDate)
{
DataSet ds = new DataSet();
List<OracleParameter> spParams = new List<OracleParameter>();
string sLabelIDs = "'" + String.Join("','", saLabelIDs) + "'";
string sQuery = "SELECT /*+ FULL(t) PARALLEL(t, 32)*/ * " +
"FROM SomeTable@DBLinkName t " +
"WHERE (R_LAST_UPDT_DT >= :StartDate AND R_LAST_UPDT_DT <= :EndDate) " +
"AND R_ID IN(" + sLabelIDs + ") " +
"ORDER BY R_ID, R_ITEM_LABEL, R_LAST_UPDT_DT DESC";
try
{
spParams.Add(new OracleParameter("StartDate", OracleDbType.Timestamp, dtStartDate, ParameterDirection.Input));
spParams.Add(new OracleParameter("EndDate", OracleDbType.Timestamp, dtEndDate, ParameterDirection.Input));
dbContext.Open();
dbContext.ExecuteOraAdapterFillCmd(sQuery, spParams, ref ds);
}
catch (Exception ex)
{
}
finally
{
dbContext.Close();
}
return ds;
}
public void ExecuteOraAdapterFillCmd(string sQuery, List<OracleParameter> spParams, ref DataSet dataset)
{
using (OracleCommand command = new OracleCommand())
{
command.CommandType = CommandType.Text;
command.Parameters.AddRange(spParams.ToArray<OracleParameter>());
command.Connection = DbConnection;
command.CommandText = sQuery;
command.BindByName = true;
OracleDataAdapter da = new OracleDataAdapter(command);
try
{
da.Fill(dataset);
}
catch(OracleException oex)
{
}
catch(Exception ex) // Throws error here
{
}
}
}
解决方案
这似乎是 Oracle 数据访问问题。显然它在处理数据库链接时在内部使用了一个数组,我的数据库链接看起来像 tbl_name@someName.xy; 我不确定,但可能按点拆分它并期望 2 个元素并得到 3 个。
为了测试这一点,我使用了:
create synonym tbl_name for tbl_name@someName.x.y;
我用“tbl_name”替换了查询中的数据库链接,它工作正常。
推荐阅读
- javascript - Svelte 应用程序错误:未完成的待办事项未返回
- regex - 在 Flutter 中验证 TextFormField - 这个正则表达式有什么问题?
- python - 使用开始和结束时间按所有小时和类别列分组
- firebase - 将图像从颤振上传到火力基地(没有任何反应)
- python - 如何在日期时间索引上加入 2 个数据框
- android - 我在 Android Studio 的“运行”Logcat 中看不到应用错误
- javascript - 在将 redux 与 reactJs 一起使用时,我是否应该绝对避免道具传递?
- python - 如何使用 discord.py 中的参数循环异步函数?
- quill - QuillJS:如何为描边颜色添加格式
- jenkins - Jenkins插件ActiveChoiceParameter,使布尔参数值可靠