내가 널 체크를하고있는 중이 야하지만 할 때 나는 밖으로 범위 예외의 인덱스를 얻고있다 :데이터 표시기에 특정 열이 없을 수 있는지 확인하려면 어떻게해야합니까?
if(myReader["column1"] != null)
{
}
을 열이 존재하지 않습니다 특정 조건에서, 왜 작업 NULL 체크하지?
내가 널 체크를하고있는 중이 야하지만 할 때 나는 밖으로 범위 예외의 인덱스를 얻고있다 :데이터 표시기에 특정 열이 없을 수 있는지 확인하려면 어떻게해야합니까?
if(myReader["column1"] != null)
{
}
을 열이 존재하지 않습니다 특정 조건에서, 왜 작업 NULL 체크하지?
쿼리가 반환하는 열을 변경하는 이유는 무엇입니까? 열의 이름에 해당하는 열 색인이 없기 때문에 열 이름을 사용하여 열을 참조하면 예외가 발생합니다. 내가 당신이라면 예외를 포착하고 이에 따라 오류를 처리 할 것입니다. 같은 쿼리가 물건에 따라 다른 열을 반환하는 경우
if (myReader.GetSchemaTable().Columns.Contains("ColumnName"))
{
}
확인 당신이 당신이 좋아하는 무언가를 원하는 GetSchemaTable()
을 존재하는 경우
시도 할 수 있습니다 볼 수 있습니다 나에게 아주 좋은 디자인 같지 않아. 어쨌든, 당신은 오른쪽 컬럼을 가지고 있는지 아닌지를 확인하기 위해 다른 컬럼에 myReader.GetName (i)을 사용할 수 있습니다.
: 열이
for(int i = 0; i < myReader.FieldCount; i++)
if (myReader.GetName(i) == "column1")
return true;
첫
글쎄, DataReader
은 GetSchemaTable()을 노출하며 DataReader
안에 스키마/열을 표시합니다.
또 다른 대안은 단지 열에서 값을 잡아 그 결과 예외를 잡으려고 시도, 즉 열이 존재하지 않아야
try
{
object value = dataReader["ColumnName"];
// Do something with the value...
}
catch(IndexOutOfRangeException e)
{
// Column not there!
}
을 그러나, 나는 예외는 잡기/던지는으로이 조언을하지 않을 값 비싼 비즈니스이므로 코드 내에 예외적으로이 발생해야합니다.
public bool DoesColumnExist(IDataReader reader, string columnName)
{
reader.GetSchemaTable().DefaultView.RowFilter = "ColumnName= '" + columnName + "'";
return (reader.GetSchemaTable().DefaultView.Count > 0);
}
왜 열입니다 "거기가 아니라"이 "
나는 가장 좋은 일이 같은 GetSchemaTable() 함수 그러나"롤 - 네 - 자신의 "DoesColumnExist
스타일 기능, 뭔가를 사용하는 것입니다 생각 특정 시간에? – Achilles