2016-11-03 15 views
0

私はラベルにデータリーダーから列を読み取るためにしようとしている(C#のWinフォーム)は次のよう 私のコードは次のとおりです。C#のWinFormsの引数1:「INT」に「文字列」から変換することはできません

SqlCommand command1 = new SqlCommand("select plant_name,plant_id from plant order by plant_id ", connection); 

     try 
     { 
      connection.Open(); 
      SqlDataReader dr = command1.ExecuteReader(); 

      while (dr.Read()) 
      { 
       string plantlable = dr.GetInt32("plant_id").ToString(); 
       labelplantid.Text = plantlable.ToString(); 

       comboBoxplant.Items.Add(dr["plant_name"]); 


      } 

      dr.Close(); 
      dr.Dispose(); 
      connection.Close(); 
     } 

     catch (Exception ex) 
     { 

      MessageBox.Show(ex.Message, Application.ProductName, MessageBoxButtons.OK, MessageBoxIcon.Error); 
      Application.Exit(); 
     } 
赤い下線plant_idで
string plantlable = dr.GetInt32("plant_id").ToString(); 

次の行に:

私はエラー「『int型』から 『文字列』から変換することはできません引数1」を取得します。

私は間違っていますか? 私はそれを把握していないようです。 plant_idは列型Intです。 データベース用にSQL Server 2008を使用する。

ヒントありがとうございます。

+0

数字以外の文字列から整数値を取得しようとしましたが、意味がありません。代わりに 'dr [" plant_id "]'を使うべきです。 'GetInt32'メソッド情報についてはhttps://msdn.microsoft.com/en-us/library/system.data.sqlclient.sqldatareader.getint32(v=vs.110).aspxを参照してください。 –

+0

ありがとうございました..これはうまくいきました.... labelplantid.Text = dr ["plant_id"]。ToString(); – Harry

答えて

2

SqlDataReader.GetInt32メソッドは、パラメータとして整数を取ります。この整数は、参照しようとしているフィールドのインデックスを示します。あなたの場合、 "plant_name"はインデックス0になり、 "plant_id"はインデックス1になります。これはSQLクエリで指定した順序です。

インデックスを渡す代わりに、GetInt32を辞書ゲッターとして扱い、 "plant_id"に直接アクセスしようとしているため、エラーが発生しています。代わりに、次の試してください:あなたは、インデクサを使用してSqlDataReaderのからオブジェクトとして直接値を取得することができ、また

string plantlable = dr.GetInt32(1).ToString(); 

を(配列)の表記:答えをお探しの方に

string plantlable = dr["plant_id"].ToString(); 
+0

thankyou .. this worked ... string plantlable = dr.GetInt32(1).ToString(); labelplantid.Text = plantlable.ToString(); – Harry

0

この行を使用して、dr.GetInt32("plant_id")は、DataReaderから整数値を読み取ろうとしています。エラーメッセージは文字列をIntegerに変換しようとしていることを示しています。つまり、plant_id列がTextまたはVarcharなどの整数(整数ではない)になります。型をクロスチェックしてください。

ので、あなたはその値を読み取るためにSqlDataReader.GetString方法を試すことができた場合、あなたは.ToString()を追加する必要はありません、この場合には、第ECODEは次のようになります。

labelplantid.Text = dr.GetString("plant_id"); 
+0

私はテーブルを見ましたが、ここではcreateステートメントです。かなり確実なplant_idはintですCREATE TABLE [dbo]。[植物]( \t [ID] [int] NOT NULL、 \t [plant_id] [int] NOT NULL、 \t [plant_name] [varchar](25)NOT NULL、 CONSTRAINT [PK_plant] PRIMARY KEY CLUSTERED – Harry

+0

BTW ..あなたが提供したコードを使用すると、同じエラーが発生します:/ – Harry

0

..ここでそれは次のとおりです。

labelplantid.Text= dr["plant_id"].ToString(); 

またはこの

string plantlable = dr.GetInt32(1).ToString(); 
labelplantid.Text = plantlable.ToString(); 

のいずれかが動作します。プロンプトの答えをありがとう:)

関連する問題