2017-11-28 12 views
1

エンティティAuthorId(int)(AuthorIdが主キー)、Name(nvarchar)およびNationality(nvarchar)というデータベースを持っています。また、そのデータベースの名前を表示するリストボックスと、リストボックス内の選択された項目のID、名前、国籍、各テキストボックスに1つずつ表示する3つのテキストボックスが表示されます。クエリ結果をリストボックスに表示するにはどうすればよいですか?

Conversion failed when converting the varchar value to data type int.

は、ここで私は、データを取得し、リストボックスに表示方法は次のとおりです:

public void GetAuthorData() 
{ 
    string connectionString = //connection string here 
    using (SqlConnection con = new SqlConnection(connectionString)) 
    { 
     con.Open(); 
     var query = "SELECT * FROM Author"; 
     using (SqlCommand cmd = new SqlCommand(query, con)) 
     using (SqlDataReader reader = cmd.ExecuteReader()) 
     { 
      while (reader.Read()) 
      { 
       Author a = new Author(); 
       a.Id = reader.GetInt32(0); 
       a.Name = reader.GetString(1); 
       a.Nationality = reader.GetString(2); 

       AuthorListBox.Items.Add(a); 
      } 
     } 
    } 
} 

そして、ここでは、私はテキストボックス内のデータを表示する方法は次のとおりです。私はそれが今、私は次のエラーを取得する持っているものと

private void AuthorListBox_SelectionChanged(object sender, SelectionChangedEventArgs e) 
{ 
    DeleteAuthortButton.IsEnabled = true; 
    SaveChangesButton.IsEnabled = true; 

    var aa = sender as ListBox; 
    if (aa.SelectedItem != null) 
    { 
     var author = aa.SelectedItem.ToString(); 
     string connectionString = //connection string here 
     using (SqlConnection con = new SqlConnection(connectionString)) 
     { 
      con.Open(); 
      var query = "SELECT * FROM Author where Name = '" + author + "'"; 
      using (SqlCommand cmd = new SqlCommand(query, con)) 
      using (SqlDataReader reader = cmd.ExecuteReader()) 
      { 
       while (reader.Read()) 
       { 
        Author a = new Author(); 
        a.Id = reader.GetInt32(0); 
        a.Name = reader.GetString(1); 
        a.Nationality = reader.GetString(2); 

        IdTextBox.Text = a.Id.ToString(); 
        AuthorNameTextBox.Text = a.Name; 
        NationalityTextBox.Text = a.Nationality; 
       } 
      } 
     } 
    } 
} 
+0

'a.Id = Convert.ToString(リーダー[0]);' –

+0

あなたはまだ著者として 'VARの作者= aa.SelectedItem ...それを使用する項目をリストする者を設定;'とあなたドンDBから何かを再度選択する必要はありません。 – Reniuz

+0

@DmitryBychenko私は "暗黙のうちにタイプ '文字列'を 'int'に変換することはできません。 – anek05

答えて

1

あなたは、データベースのデータを取得する必要はありません。著者に関するすべての情報が一覧に表示されます。

private void AuthorListBox_SelectionChanged(object sender, SelectionChangedEventArgs e) 
    { 
     DeleteAuthortButton.IsEnabled = true; 
     SaveChangesButton.IsEnabled = true; 

     var aa = sender as ListBox; 
     if (aa.SelectedItem != null) 
     { 
      var author = aa.SelectedItem as Author; 

      IdTextBox.Text = author.Id.ToString(); 
      AuthorNameTextBox.Text = author.Name; 
      NationalityTextBox.Text = author.Nationality; 
     } 
    } 
+0

これはこれを修正しました! – anek05

0

SQLのNumberは.NETにない必要対応を行いint

 a.Id = reader.GetInt32(0); // May fail even if Id is Number 

Convertを使用してみてください:

 // Whatever Author.Id is 
     // (e.g. Number(10) which will be mapped to Int64, not int or 
     //  Number(30) which can be mapped to String), 
     // try convert it into `Int32 == int` 
     a.Id = Convert.ToInt32(reader[0]); 
     a.Name = Convert.ToString(reader[1]); 
     a.Nationality = Convert.ToString(reader[2]); 
+0

私はエラーメッセージを受け取っていませんでしたが、テキストボックスに何も印刷しませんでした。 – anek05

+0

@ anek05: 'AuthorListBox'が正しく埋め込まれていますか? –

+0

申し訳ありません。リストボックスに表示されている3つの項目がリストボックスに表示されていれば、それは意味します。 – anek05

関連する問題