2010-12-06 3 views
1

を使用したMS Accessクエリに有効な例外ではありませんやあみんな、私のデータ型はデシベルで正確であるものの、キャストのこの奇妙な例外を持つメートル:指定されたキャストは、C#

string sql = 
      string.Format(
       @"select aim_network_id,aim_network_name,oxinetwork_id,pack_id,pack_name,p_face_value,pm_prefix from Operator where aim_network_id='{0}'", 
       gridbackOffice["aim_network_id", gridbackOffice.CurrentCell.RowIndex].Value); 
     OleDbCommand getSelectedGridDatecmd = new OleDbCommand(sql, conn); 
     OleDbDataReader reader = getSelectedGridDatecmd.ExecuteReader(); 
     while (reader.Read()) 
     { 
      txtAimNetworkID.Text = reader.GetString(0); 
      txtAimNetworkName.Text = reader.GetString(1); 
      txtPARNetworkID.Text = reader.GetString(2); 
      txtPARFaceValue.Text = reader["p_face_value"].ToString(); 
      //in above line if i'm doing this `reader.GetString(5)` then i'm getting specified cast exception and that to randomly i.e some time it works fine and suddenly sometime gives this exception 
      txtPARPackID.Text = reader.GetString(3); 
      txtPARPackName.Text = reader.GetString(4); 
      txtPARPMPrefix.Text = reader["pm_prefix"].ToString(); 
     } 

メートルならば、私はこのreader["p_face_value"].ToString()を使用して、少し混乱しています私のコードは非常にスムーズに実行されていますが、私は両方の方法の文字列を返すによると、このreader.GetString(5)を使用して問題を何か、nebodyはこのエラーb4に直面していた? ....エラーはwhileループの4行目と7行目にあります。

例外:指定されたキャストは有効ではありません(InvalidCastExceptionが未処理)

+0

投稿完了 '例外'詳細。 – decyclone

答えて

3

MSDNによれば、OleDbDataReader.GetString()は文字列へのキャストを試みる前に変換を実行しません。したがって、取得されるデータはで、すでにの文字列である必要があります。

がその列の値が nullになる可能性があり、ドキュメントはcheck if the value is null firstあなたがすべきことを示唆しているという可能性である場合:NULL値にreader["p_face_value"]を呼び出す

if ( !reader.IsDBNull(5)) { 
    txtPARFaceValue.Text = reader.GetString(5); 
} 

DBNullを返すには - あなたはToString() on DBNullを呼び出します空の文字列が得られます。

+0

それは私のdbのp_face_valueのいくつかの値はnullです.... – FosterZ

2

MSDNから:

ませ変換は行われません。 したがって、取り出されたデータは が既に文字列でなければなりません。

列が文字列型でない場合は、.ToString()メソッドを使用して変換する必要があります。

+0

はい、私が注文を変更してもエラーが発生します... – FosterZ

+0

しかし、最初に実行されるのはどういう意味ですか、それはしばらくの間は動作しますが、突然その例外が表示されるということです – FosterZ

+0

Null値あなたのデータでは、@FosterZ - 起こるのを止める方法の私の答えを見てください。 – Dexter

0

データベースのp_face_valueのデータ型は?エラーの説明に基づいて

が、文字列型ではないようです与えられたので、あなたが呼び出すとき:

reader.GetString(5) 

コードエラーを出し、それが文字列にあるどんなタイプに変換することができないよう。これはキャストを使用しないので、.ToString()メソッドは機能します。

+0

p_face_valueは文字列です。つまり、msのアクセス – FosterZ

0

カラムがデータベースの文字列に相当するタイプ(varcharなど)の場合は、GetStringを使用する必要があります。「p_face_value」が数値型のように見えるので、単純に文字列に変換できません。

あなたが今行っているやり方は正しい方法です。

+0

の文字列ですが、p_face_valueは文字列です。 ..iは、データをフェッチしながらうまく動作していると言ったが、突然突然エラーになる。 – FosterZ

関連する問題