문제의 데이터가 문자열이고 모든 코드가이를 참조하지만 "InvalidCastException"이 발생합니다.
모델은 다음과 같습니다.
public class Vendor
{
[Required]
public string VendorId { get; set; }
[Required]
public string CompanyName { get; set; }
}
다음은 쿼리입니다.
using (var cmd = conn.CreateCommand())
{
cmd.CommandText = "SELECT contact_id as VendorID, company_name FROM t_contacts where type = 'V'";
cmd.CommandType = CommandType.Text;
conn.Open();
using (OleDbDataReader oleDbD8aReader = cmd.ExecuteReader())
{
while (oleDbD8aReader != null && oleDbD8aReader.Read())
{
var vendorId = oleDbD8aReader.GetString(0);
var companyName = oleDbD8aReader.GetString(1);
Add(new Vendor { VendorId = vendorId, CompanyName = companyName });
}
}
}
MS Access 테이블에서 쿼리되는 두 열은 문자열입니다 (contact_id의 경우 Text Fieldsize 10, company_name의 경우 Text Fieldsize 50). "유형"은 텍스트 Fieldsize 1입니다.
오류 메시지는 company_name이 int라고 생각 함을 나타냅니다.
System.InvalidCastException이 사용자 코드에 의해 처리되지 않았습니다. HResult = -2147467262 Message = 지정된 캐스트가 유효하지 않습니다. Source = System.Data StackTrace : at System.Data.OleDb.ColumnBinding.ValueString () at System.Data.OleDb.OleDbDataReader.GetString (Int32 ordinal) at HandheldServer.Models.VendorRepository..ctor () in c : \ HandheldServer \ HandheldServer \ Models \ VendorRepository.cs : line 35
35 행은 다음과 같습니다.
string companyName = oleDbD8aReader.GetString(1);
company_name (Text 50)의 내용을 문자열에 할당하면 잘못된 캐스트가 발생하는 방법은 무엇입니까?
데이터베이스 드라이버가 무엇을 반환하는지 살펴 보셨습니까?
null
분명히 C # null
도 문자열도 아닌 SQL을 반환한다고 확신 합니다. GetString()
스택 추적을 보면 메서드 내부에서 예외가 발생 합니다.
호출하기 전에 GetString()
열이 원하는 유형 (문자열)이고 널이 아닌지 확인해야합니다. 이 OleDbDataReader.IsDBNull()
메서드는 nullity를 나타냅니다.
이 기사는 인터넷에서 수집됩니다. 재 인쇄 할 때 출처를 알려주십시오.
침해가 발생한 경우 연락 주시기 바랍니다[email protected] 삭제
몇 마디 만하겠습니다