指定されたキャストは有効ではありません

このQ&Aのポイント
  • ASP.NET初心者です。WebMatrixを使っています。
  • DataSetから文字列を取得する際に「指定されたキャストは有効ではありません」というエラーが発生します。
  • キャストを行わない場合は、「型 'object' を型 'string' に暗黙的に変換できません」というエラーが出ます。
回答を見る
  • ベストアンサー

「指定されたキャストは有効ではありません」

ASP.NET初心者です。 WebMatrixを使っています。 DataSetから文字列を取得しようとして下記のコードを書いたところ、掲題のエラーが発生しております。 int i = 0; string a = (string)cDataSet.Tables[0].Rows[i][0]; これを下記のように変更するとエラーが発生しません。 string a = (string)cDataSet.Tables[0].Rows[0][0]; これはなぜでしょうか? ちなみに、キャストを行わない場合は 「型 'object' を型 'string' に暗黙的に変換できません」とエラーが出ます。 よろしくお願いします。

質問者が選んだベストアンサー

  • ベストアンサー
回答No.1

お世話になります。 憶測ですが、DataSet の DataTable の中に DBNull 値のレコードが入っているのでは? 値が DBNull 値かどうか訊いた上でキャストするか、 またはこんな手段とか a = System.Convert.ToString(ds.Tables[0].Rows[i][0]); もしくは、as 演算子を使うなど。 http://www.atmarkit.co.jp/fdotnet/dotnettips/005castandas/castandas.html

参考URL:
http://msdn2.microsoft.com/ja-jp/library/system.convert.aspx

関連するQ&A

  • Object型→String型へのキャストについて

    Object型からString型へのキャストについて質問させていただきます。 public void doPost(HttpServletRequest req, HtteServletResponse res) throws IOException,ServletException{ Httpsession ses = req.getSession(); ses.setAtribute("id",test) というコーディングで値を格納して、その後、その値をとりだす場合、 String test = (String) ses.getAttribute("id"); と、Object型からString型へキャストが必要と参考書には書かれているんですが、 この場合、型変換のルール(変換先のクラス型が変換元のクラス型のスーパークラスであること) にのっとってないと思うのです。 String型からObject型へのキャストだと納得いくのですが。。。 Object型からString型へキャストって問題ないものなんですか? どなたか宜しくご教示お願い致します。

    • ベストアンサー
    • Java
  • DataGridViewでitemを指定してデータ

    DataGridViewでitemを指定してデータを取得する事はできますか? 下記のように座標を指定して取得する方法はわかります。 Dim IntItem1 As Integer = DataGridView1(j, i).Value DataSetの場合は、DataRowに落として取れます。 Dim DataRow1 As DataRow = DataSet1.Tables("Table1").Rows(0) Dim IntItem1 As Integer = DataRow1("Item1") 同じノリで DataGridViewからアイテムを指定してデータを取得したいのですが下記のような事はできませんでした。 Dim DataGridViewRow1 As DataGridViewRow = DataGridView1.Rows(0) Dim IntItem1 As Integer = DataGridViewRow1("Item1") ← エラー 書き方があれば教えて下さい。

  • C#で実行時にメソッドの返り値の型を変化させる

    C# で、実行時にメソッドの返り値の型を変化させることは可能でしょうか? たとえば、 public class MyData { object o; public void setValue( object a ) { o = a; } public object getValue() { return o; } } というクラスがあるとき、 static void Main(string[] args) { MyData a = new MyData(); a.setValue( 3 ); Console.WriteLine( a.getValue().GetType().ToString() ); int i = (int)a.getValue(); } というコードを実行すると、 System.Int32 と表示されます。Main の 4 行目で、(int)のキャストをはずすと、object から int への暗黙の変換はできませんというコンパイルエラーになります。 この(int)のキャストをしなくてもエラーにならないような getValue の関数はできないでしょうか? o は、数値型であるとします。 たとえば、MyData に、 public int getInt() { return (int)o; } とすれば、必ず int を返すようなメソッドはできると思うのですが、これだと、getByte() や、getDouble() などのように、考えられるすべての型を想定してメソッドを作ることになってしまいます。 そうではなく、getValue() で、少なくとも数値型の暗黙の変換はしてくれるようなことにできないでしょうか。 よろしくお願いします。

  • double型からint型へのキャストについて

    お世話になります。 掲題の疑問がわきましたので質問させてください。 Ex1. int a = 100; a /= 1.05; Ex2 int a = 100; a = 100 / 1.05; この場合、Ex1は問題なく、Ex2でエラーが発生します。 Ex2でdouble型からint型へキャストできないということは納得できるのですが、逆になぜEx1が問題なく行えるのでしょうか、、 よろしくお願い致します。

  • 「テーブルに主キーがありません。」というエラーが出て困ってます。

    VisualStudioでASP.NETをやってます。初心者です。 データグリッドの削除ボタンを押して行を削除したいのですが、 テーブルに主キーがありません。というエラーが出てしまいます。 テーブルに主キーはあるんですけれども、原因がわかりません。 Dim mytable As DataTable Dim myrow As DataRow Dim key As String SqlDataAdapter1.Fill(DataSet11) key = DataGrid1.DataKeys(e.Item.ItemIndex) mytable = DataSet11.Tables("テーブル名") ↓ここでエラーになるようです。 myrow = mytable.Rows.Find(key) myrow.Delete() ご存知の方いらっしゃいましたら、よろしくお願いします。

  • C#でマスターから検索した値に対応する別列をラベルに表示したい

    こんばんわ。 C#のフォームのテキストボックスに[社員番号]を入力し、社員マスタから該当社員氏名を同じフォーム内のラベルに表示するという処理を行おうとしています。 以下のコードで、 [goButton]を押したあと、社員マスタの氏名をラベルに表示する部分の記述の仕方がわかりません。 社員マスタは[syainNo]と[simei]という2列のフィールドで構成されています。 private void Form1_Load(object sender, System.EventArgs e) { dataSet11.Clear(); sqldataAdapter1.Fill(dataSet11, "syainM"); } private void goButton_Click(object sender, System.EventArgs e) { int i; //カウンタ //検索する値が入力されていないとき if (textBox1.Text == "") { MessageBox.Show("検索する社員番号を入力してください"); return; } //先頭から検索 for (i = 0; i < dataSet11.Tables["syainM"].Rows.Count; i++) { if ( dataSet11.Tables["syainM"].Rows[i]["syainNo"].ToString() == textBox1.Text) { //ここでラベルに社員マスタの氏名を表示する return; } } } どなたかわかる方よろしくお願いします。

  • Stringの値で型キャストしたい(Java)

    最近OKWaveでお世話になっています。 表現がおかしいかもしれませんが、Stringの変数の値を使って、型キャストしたいです。 様々なオブジェクトが入る配列(Vector)を使用しているため、VectorをObject型にして使用しています。 配列のある要素をget()したのち、getClass().getSimpleName()でクラス名を取得し、そのクラス名を、 Object obj = array.get(i); String name = obj.getClass().getSimpleName(); if(name.equal("Integer")) {  method((Integer)obj);   ・   ・   ・ のような形で、場合分けして、メソッドを呼び出しています。 ですが、この方法だと、条件分岐が増えて、見づらいです。 そこで、クラス名を取得したnameをうまく使ってobjを型キャストしたいです。 これを解決させる方法もしくはヒントを教えてください!

    • ベストアンサー
    • Java
  • buttonの着色について

    お世話になります。 oracle11gと.NET Framewaorkで開発しています。 言語はC#です。 やりたい事は、 データテーブルからbutton名(例えばbutton2とか)の結果を受けて、 フォーム上のbutton2に色を付けたいのです。 下記の様にしたら、※の行でエラーとなりました。 (型'System.Drawing.Color'を型'string'に暗黙的に変換できません。) どの様にしたら、宜しいでしょうか。 ご教示頂きたく宜しくお願い致します。          記     DataTable dt = _DataTable;     if (dt.Rows.Count > 0)     { for (int i = 0; i < dt.Rows.Count; i++) {    _botanNo = dt.Rows[0][2].ToString();    _botanNo=_botanNo+".BackColor"; ※    _botanNo = Color.Green; }     }

  • キャスト時に使う括弧について

    クラスAはBを継承しているとします。 そこで、bにはクラスAのインスタンスがるとして、 キャストするときは、 String str = ((A)b).getString(); のようにするかと思いますが、 String str = (((A))b).getString(); のように不要に括弧を書いて、コンパイルがエラーになる場合というか、 エラーになるコンパイラのバージョンがあるのでしょうか?

    • ベストアンサー
    • Java
  • ASP.NET (VB) データのnull(空白)項目について

    現在、visual web developer 2005 expressで簡単な検索型のwebシステムを構築しています。 DBにはaccessを使用しています。vb.netでコードを記述しているのですが、 データ項目にnull(空白)項目があると"型が一致しません"とのアプリケーション エラーが出てしまいます。 どのように回避すればよいのでしょうか? コードは下記のように記述しています。 ================================================================================================= Private Sub set_data(ByRef d As Data.DataSet, ByVal i As Integer, ByRef txt As TextBox) If Len(d.Tables(0).Rows(0).Item(i)) > 0 Then txt.Text = d.Tables(0).Rows(0).Item(i) End If End Sub ================================================================================================= 上記は最下部に記述し上部にtextboxをフォームと対応させてブラウザで対応項目を表示させています。

専門家に質問してみよう