2011-05-11 7 views
1

私はc#asp.netを使用しています。データが送信された後は、読み取り専用形式でデータを表示しようとしています。それは訓練のためのものであり、私のハンドラはパラメータ化をしていないと言います(実際の展開ではありません)。 selectコマンドを実行すると、指定されたキャストが最初のGetInt32行で無効例外をスローします。値はintで、列はintとして設定されます。私は何が欠けていますか?データリーダー指定のキャストが無効ですか?

string epl = "SELECT Entity, Employees, CA, MI, NY, NJ, Primex, EplLim, EplSir, Premium, Wage, Sublim, SubmissionId FROM EPL WHERE SubmissionId =" + x; 
        using (SqlCommand epcmd = new SqlCommand(epl, EplConn)) 
        { 
         SqlDataReader epdr = epcmd.ExecuteReader(); 
         epdr.Read(); 
         LblEplShowEntity.Text = epdr.GetInt32(0).ToString(); 
         LblEplShowTotalEmpl.Text = epdr.GetInt32(1).ToString(); 
         LblEplShowCalEmpl.Text = epdr.GetInt32(2).ToString(); 
         LblEplShowMichEmpl.Text = epdr.GetInt32(3).ToString(); 
         LblEplShowNyEmpl.Text = epdr.GetInt32(4).ToString(); 
         LblEplShowNjEmpl.Text = epdr.GetInt32(5).ToString(); 
         LblEplShowPrimEx.Text = epdr.GetInt32(6).ToString(); 
         LblEplShowLim.Text = epdr.GetInt32(7).ToString(); 
         LblEplShowPrem.Text = epdr.GetInt32(8).ToString(); 
         LblEplShowWage.Text = epdr.GetInt32(9).ToString(); 
         LblEplShowInvestCost.Text = epdr.GetInt32(10).ToString(); 
         epdr.Close(); 
        }  
+0

のToString()'と 'int.Parse'かを呼び出します'int.TryParse'それでも、それでもエラーが出ますか?カラム1(インデックス0)に返される実際のテキストは何ですか? – Tejs

答えて

0

データベースの列がintかどうかを確認します。 DB Null値を確認する場合

LblEplShowEntity.Text = epdr.IsDBNull(0) ? string.Empty : epdr.GetInt32(0).ToString(); 
0

あなたのデータには値がありませんか?それもその例外を引き起こすでしょう。また、フィールドが実際に整数として定義され、浮動小数点数などではないことを再確認します。

+0

私が言ったように、値はそこにあり、フィールドはintとして定義されています。 –

0

selectステートメントの各列の正確なデータ型がわかっている必要があります。たとえば、エンティティ列の型がBIGINTの場合、reader.GetInt32()を使用しようとするとInvalidCastExceptionを使用するよりも、reader.GetInt64()メソッドを使用する必要があります。

第2に、NULL値を別々に扱う必要があります。あなたはデータリーダーからデータを取るために、文字列インデクサーを使用することができ

int? entity = (int?)reader["Entity"]; 

注意:あなたはreader.IsDBNull(0)または使用次のコードをチェックする必要があります。これはより読みやすいアプローチです。

EDIT:にSELECT文を変更しよう:あなたは文字列表現(別名 `EPDR [ "エンティティ"]を取るとしたら

string epl = @"SELECT CAST(Entity AS INT) AS Entity, Employees, CA, MI, NY, NJ, Primex, EplLim, EplSir, Premium, Wage, Sublim, SubmissionId 
FROM EPL WHERE SubmissionId =" + x; 
関連する問題