Я использую общий подход к получению одной строки из любой таблицы Oracle и отображению ее в виде таблицы данных с использованием приведенного ниже кода.Но, если таблица содержит столбец типа с плавающей запятой и значение имеет большое количество десятичных знаков, я получаю «Арифметическая операция, приведшая к переполнению» в строке: MyReader.GetValues (objCells);
oCmd.CommandText = "OTCMIADM.OTCMI_GUI.GET_ROW";
oCmd.CommandType = CommandType.StoredProcedure;
oCmd.Parameters.Add("PI_TABLE_NAME", OracleDbType.Varchar2, 40).Value = cmbStagingTables.SelectedItem;
oCmd.Parameters.Add("PI_ROWID", OracleDbType.Varchar2, 40).Value = txtRowID.Text;
oCmd.Parameters.Add(new OracleParameter("PIO_CURSOR", OracleDbType.RefCursor)).Direction = ParameterDirection.Output;
oCmd.ExecuteNonQuery();
// clear the datagrid in preperation for loading
dgvStagingTable.Columns.Clear();
dgvStagingTable.Rows.Clear();
using (OracleDataReader MyReader = oCmd.ExecuteReader())
{
int ColumnCount = MyReader.FieldCount;
// add the column headers
DataGridViewColumn[] columns = new DataGridViewColumn[ColumnCount];
for (int i = 0; i < columns.Length; ++i)
{
DataGridViewColumn column = new DataGridViewTextBoxColumn();
column.FillWeight = 1;
column.HeaderText = MyReader.GetName(i);
column.Name = MyReader.GetName(i);
columns[i] = column;
}
dgvStagingTable.Columns.AddRange(columns);
// get the data and add the row
while (MyReader.Read())
{
//get all row values into an array
object[] objCells = new object[ColumnCount];
MyReader.GetValues(objCells);
//add array as a row to grid
dgvStagingTable.Rows.Add(objCells);
}
}
Трассировка стека показывает: в Oracle.DataAccess.Types.DecimalConv.GetDecimal (IntPtr numCtx) в Oracle.DataAccess.Client.OracleDataReader.GetDecimal (Int32 i) в Oracle.DataAccess.Client.OracleDataReader.GetValue (Int32 i)Oracle.DataAccess.Client.OracleDataReader.GetValues (Object [] values)
Итак, я могу понять, почему это вызывает ошибку (предполагается, что выполняется десятичное преобразование);но как мне обойти это?
Я попытался явно установить тип столбца перед загрузкой данных с помощью:
dgvStagingTable.Columns ["TR_THROUGHPUT_TIME_NO"]. ValueType = typeof (string);
и несколько других типов, но ничто не имело никакого значения.
Любая помощь приветствуется.