私の問題の解決策を探しましたが、問題の解決策が見つからないため、別の投稿を作成する必要があります。C#データベースエラー、リストボックス内の項目を別のリストボックスから変更する
チームリストボックスで別のアイテムを選択すると、プレイヤーリストボックス内のアイテムを変更したいと考えています。
たとえばチームリストボックスでチーム1を選択すると、チーム1のプレイヤーをプレーヤーリストボックスに追加する必要があります。
私のプログラムはadapter.fill(playertable)部分に失敗し、私が取得エラー:私はプレーヤーとの間などassosiativeテーブルを働く選手、チームとteam_player、ある3つのSQLテーブルを作成している
System.ArgumentException : No mapping exists from object type System.Data.DataRowView to a known managed provider native type.
チーム。
また、チームリストボックスで選択したアイテムの値をMessagebox.Show(listboxpteams.SelectedValue.ToString())
で取得しようとすると値は取得できませんが、System.Data.DataRowViewが表示されます。
public partial class Form2 : Form
{
SqlConnection connection;
string connectionString;
public Form2()
{
InitializeComponent();
connectionString = ConfigurationManager.ConnectionStrings["Peehootee.Properties.Settings.playersConnectionString"].ConnectionString;
}
private void Form2_Load (object sender, EventArgs e)
{
fillteams();
}
private void fillteams()
{
using (connection = new SqlConnection(connectionString))
using (SqlDataAdapter adapter = new SqlDataAdapter("SELECT name FROM team", connection))
{
DataTable teamtable = new DataTable();
adapter.Fill(teamtable);
listboxteams.DisplayMember = "name";
listboxteams.ValueMember = "Idteam";
listboxteams.DataSource = teamtable;
}
}
private void populateplayers()
{
String query = "Select a.firstname+ ' ' + a.surname AS Name, From player a inner JOIN team_player b on a.Idplayer = b.playerid where b.teamid = @Idteam";
using (connection = new SqlConnection(connectionString))
using (SqlCommand command = new SqlCommand(query, connection))
using (SqlDataAdapter adapter = new SqlDataAdapter(command))
{
command.Parameters.AddWithValue("@Idteam",listboxteams.selectedvalue);
DataTable playertable = new DataTable();
adapter.Fill(playertable);
listboxplayers.Displaymember = "Name";
listboxplayers.ValueMember = "Idplayer";
listboxplayers.DataSource = playertable;
}
}
private void Form2_FormClosed(object sender, FormClosedEventArgs e)
{
Application.Exit();
}
private void listboxteams_SelectedIndexChanged(object sender, EventArgs e)
{
populateplayers();
}
}
}
リストボックスをチームで埋めるクエリに_idteam_ Typoという名前のフィールドや重大なエラーがありませんか? – Steve
プレイヤーに入力したクエリが間違っている(最後のフィールドの後にカンマ)これは入力ミスの場合があります。そうしないと、クエリの最初の使用時に構文エラー例外が発生します(クエリーテキストに_idplayer_がありません)。 – Steve
クエリは機能し、私はそれをテストしました。私は構文エラーを取得していないので、私はこの投稿に誤字があると思います。私の選手のテーブルのプライマリキーはIdplayer、チームテーブルのプライマリキーはIdteam、assosiativeテーブルの外部キーはplayeridとteamidです。 – iFision