모든 Oracle 테이블에서 단일 행을 받고 아래 코드를 사용하여 DataGridview에 표시하는 일반적인 방법을 사용하고 있습니다. 그러나 테이블에 부동 소수점 유형의 열이 포함되어 있고 값에 소수 자리가 많으면 다음 행에서 "산술 연산 결과 오버플로가 발생합니다."라는 메시지가 나타납니다. MyReader.GetValues (objCells);C#에서는 Oracle Float 유형을 어떻게 처리합니까? "연산 오류로 인해 오버플로가 발생했습니다."
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.Client.OracleDataReader.GetDecimal에서 Oracle.DataAccess.Types.DecimalConv.GetDecimal (numCtx을 IntPtr) Oracle.DataAccess.Client에서 (INT32 I)에서 . OracleDataReader.GetValue Oracle.DataAccess.Client.OracleDataReader.GetValues에서 (INT32 I) (개체 []의 값)이 에러를 (그것이 소수 변환 가정습니다) 일으키는 이유
그래서 I 보시; 그러나 나는 이것을 어떻게 얻을 수 있습니까?
I 명시 적으로 데이터를로드하기 전에 열 유형을 설정하려 :.
dgvStagingTable.Columns [ "TR_THROUGHPUT_TIME_NO"] = 치형 대해서 typeof (문자열);
등 여러 가지 유형이 있지만 차이점은 없습니다.
도움을 주시면 감사하겠습니다.
두 번 호출되는 쿼리를 지적 해 주셔서 감사합니다. 그리고 당신의 소품 솔루션이 효과가있었습니다; 나는 단순히 .GetOracleValue (i) .ToString()을 사용하여 datagridview에 추가하기 전에 배열을 고치기 만하면된다. 다시 감사합니다. D. – ValiantBoy