2013-08-01 5 views
0

나는 대출 금액을 검색하려고 시도하고 있었고 부동 상태가되기를 원했습니다. 그러나 loanAmount는 0.0이라는 값을 반환합니다. SQL 문은 하나의 값만 반환합니다. 도와주세요?SQLreader를 float로 변환 하시겠습니까?

SqlCommand cmd5 = new SqlCommand(); 
     cmd4.Connection = conn; 
     cmd4.CommandText = "SELECT loanAmount FROM LoanPortfolio WHERE custID='" + custIDs + "' AND loanType LIKE 'Personal Loan'"; 
     conn.Open(); 
     float loanAmount = 0.0F; 
     SqlDataReader amountLoan = cmd4.ExecuteReader(); 
     while (amountLoan.Read()) 
     { 
      loanAmount = float.Parse(amountLoan.ToString()); 
      break; 
     } 
     conn.Close(); 
+0

가능한 복제본 [ 'System.Data.SqlClient.SqlDataReader'형식의 개체를 'System.IConvertible'형식으로 캐스팅 할 수 없음] (http://stackoverflow.com/questions/17928388/unable-to-cast-object) -of-type-system-data-sqlclient-sqldatareader-to-type-sys) – JLRishe

답변

4

대신 ExecuteScalar는 (사용되는 단일 값)을 선택하는 경우 :이 도움이

float loanAmount = Convert.ToFloat(cmd4.ExecuteScalar()); 

희망을.

+0

SELECT statmenet이 아닌 다른 SQL이 필요합니다. –

+3

@HenkHolterman'ExecuteScalar'는 select 문에서 작동합니다. 첫 번째 행의 첫 번째 열만 사용합니다. –

+0

Theres no "Convert.ToFloat" – Miguel

1

BTW는 SQL 문은 여전히 ​​열을 지정해야합니다 하나 개의 값

을 반환 :

loanAmount = float.Parse(amountLoan[0].ToString()); 

그 가치를 얻을 수있는 더 나은 방법이 존재를 열 유형 등에 따라 달라집니다

+0

나는'amountLoan을 선호 할 것이다. GetFloat (0)'반환되는 SQL 형식이 실제로 float 인 경우. –

+0

@AdamHouldsworth -하지만 db 유형은 알 수 없습니다. –

0

복수형 변수 이름 (custIDs)에서 여러 개의 ID를 전달한다고 가정하고디버그/테스트 목적으로. 에 명령 텍스트를 수정

cmd4.CommandText = "SELECT loanAmount FROM LoanPortfolio WHERE custID IN (" + custIDs + ") AND loanType LIKE 'Personal Loan'"; 

custId 고객 ID의 혼수 상태로 구분 된 값 문자열이 있는지 확인합니다.

float.Parse(amountLoan[0].ToString()) 

을하거나 SqlDataReader.GetFloat method를 사용 당신은 독자의 첫 번째 열을 선택해야합니다.

또한 반환 값을 일종의 컬렉션 (배열, 목록 등)에 저장해야합니다. 지금 쿼리가 여러 레코드를 반환하는 경우에도 마지막 레코드의 값만 가져옵니다.

+0

반환되는 SQL 형식이 실제로 float 인 경우'amountLoan.GetFloat (0)'을 선호합니다. –

+0

사실 그는 아무 것도 선택하지 않고 있지만 데이터 판독기 액세스를 정정하면 첫 번째 값을 선택하고 '중단'합니다. –

+0

@AdamHouldsworth, 나는 그 '휴식'을 놓쳤다. 그것은 첫인상에서 나보다 더 재앙 적이 었어. :) –

관련 문제