2013-08-01 85 views
0

我一直在嘗試檢索貸款額度,並希望它是浮動的。但是,loanAmount返回值爲0.0。 btw的SQL語句只返回一個值。請幫忙?將SQLreader轉換爲浮點型?

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

者均基於SQL語句只返回一個值

您仍然需要指定列:

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

存在着更好的方式來獲取價值,取決於列的類型等。

+0

我贊成'amountLoan。 GetFloat(0)'如果返回的sql類型實際上是一個浮點數。 –

+0

@AdamHouldsworth - 但db類型是未知的。 –

0

從複數變量名稱(custIDs),我假設你傳入多個ID並且你插入了break用於調試/測試目的。修改您的命令文本:

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類型實際上是一個浮點數,我會傾向'amountLoan.GetFloat(0)'。 –

+0

事實上,他沒有選擇任何東西,但是如果他糾正了他的數據讀取器訪問,他會選擇第一個值,然後「突破」。 –

+0

@AdamHouldsworth,我錯過了那個'break'。這比我在第一印象上看起來更具災難性:) –