C#에서
using System.Data.OracleClient;
을 선언하여 데이터를 select하여 DataTable에 담던중... 오류가 나서 보니
null값에 대한 처리가 안되서 그랬다.
테이블예제
처음에는 reader.GetString(1) == null 로 체크하면 될줄 알았으나... 그것은 아니었다. (모르는게 죄다 ;;;)
reader.IsDBNull(2) 같이 null인지 체크하는 기능이 있으니 체크를 해야했다.
[기존코드형식]
[해결방법]
뭐 일단 나의 착오였으나 까먹지 않게...정리..
참고로 Get관련 메소드에서 GetOraclexxx 형태로 가져올수도 있는데,
이 경우에서 null체크하기가 좀더 편하다 메소드가 따로 있는 구조가 아니라
reader.GetOracleString(1).Value
reader.GetOracleString(1).IsNull
같이 동일한 호출에서 .Value냐 IsNull이냐가 가능해서 좀더 편하게 쓸수 있을듯....
using System.Data.OracleClient;
을 선언하여 데이터를 select하여 DataTable에 담던중... 오류가 나서 보니
null값에 대한 처리가 안되서 그랬다.
테이블예제
SEQ | TITLE | 주소 |
1 | 제목입니다. | http://xxx.xxx/xxxx |
2 | null | http://yyyy.yyy/yyyyy |
3 | 뇌이벌 | http://zzzz.zzz/zzzz |
처음에는 reader.GetString(1) == null 로 체크하면 될줄 알았으나... 그것은 아니었다. (모르는게 죄다 ;;;)
reader.IsDBNull(2) 같이 null인지 체크하는 기능이 있으니 체크를 해야했다.
[기존코드형식]
while (reader.Read())
{
row = table.NewRow();
row["SEQ"] = string.Format("{0}", reader.GetInt32(0));
row["TITLE"] = (string)reader.GetString(1); // <------ 요놈이 문제 (null데이터가 존재해서)
row["URL"] = (string)reader.GetString(2)
table.Rows.Add(row);
}
{
row = table.NewRow();
row["SEQ"] = string.Format("{0}", reader.GetInt32(0));
row["TITLE"] = (string)reader.GetString(1); // <------ 요놈이 문제 (null데이터가 존재해서)
row["URL"] = (string)reader.GetString(2)
table.Rows.Add(row);
}
[해결방법]
while (reader.Read())
{
row = table.NewRow();
row["SEQ"] = string.Format("{0}", reader.GetInt32(0));
row["TITLE"] = getString(reader, 1, "제목없음"); // <------ 요놈이 문제 (null데이터가 존재해서)
row["URL"] = getString(reader, 2, ""); // 그래서 null체크하는 함수를 편의상만듬
table.Rows.Add(row);
}
.... 생략....
// db널체크를 하는 함수를 만들자!!!
private static string getString(OracleDataReader reader, int idx, string defaultstr)
{
return defaultstr;
else
return reader.GetString(idx);
}
{
row = table.NewRow();
row["SEQ"] = string.Format("{0}", reader.GetInt32(0));
row["TITLE"] = getString(reader, 1, "제목없음"); // <------ 요놈이 문제 (null데이터가 존재해서)
row["URL"] = getString(reader, 2, ""); // 그래서 null체크하는 함수를 편의상만듬
table.Rows.Add(row);
}
.... 생략....
// db널체크를 하는 함수를 만들자!!!
private static string getString(OracleDataReader reader, int idx, string defaultstr)
{
//널체크
if (reader == null)
return defaultstr;
if (reader.IsDBNull(idx) == true) // <---- DB값 null체크 return defaultstr;
return defaultstr;
else
return reader.GetString(idx);
}
뭐 일단 나의 착오였으나 까먹지 않게...정리..
참고로 Get관련 메소드에서 GetOraclexxx 형태로 가져올수도 있는데,
이 경우에서 null체크하기가 좀더 편하다 메소드가 따로 있는 구조가 아니라
reader.GetOracleString(1).Value
reader.GetOracleString(1).IsNull
같이 동일한 호출에서 .Value냐 IsNull이냐가 가능해서 좀더 편하게 쓸수 있을듯....