1

特定の名前で SQL データベースを更新しようとしていますが、次のコードが機能しません。理由はありますか?

ボタンのクリックで私がやっていることは次のとおりです。

string person = listBox2.SelectedItem.ToString();
string memberStatus = "platinum";
string conn = "Data Source=.;Initial Catalog=myDB;Integrated Security=True";
using (SqlConnection connection = new SqlConnection(conn))
{
    SqlCommand cmd = new SqlCommand("UPDATE Client Set Role = @Status  WHERE Name = @name");
    cmd.CommandType = CommandType.Text;
    cmd.Connection = connection;
    cmd.Parameters.AddWithValue("@Status", memberStatus);
    cmd.Parameters.AddWithValue("@name", person);
    connection.Open();
    cmd.ExecuteNonQuery();  
}

データベースを確認すると、クライアントの役割が更新されていません。そして、デバッグすると、人の値は「System.Data.DataRowView」になります。なぜですか? どうすれば修正できますか?

4

2 に答える 2

4

personクラス名のようなものではなく、実際の名前が指定されていることを確認しましたか? SelectedItemがクラスの場合ToString、クラス名を返します ( EDIT または開発者が独自のオーバーライドで返すものToString)。

行にブレークポイントを設定し、string memberStatus = "platinum"の値を確認しますperson


さて、あなたListBoxはデータバインディングを持っているようです。その場合、実際の項目は でDataRowViewあり、DisplayMemberの によってListBoxリストに表示される内容が決まります。

個人の名前を取得するには、 から「列」の値を取得する必要がありますDataRowViewDisplayMember次の行は、プロパティが(プロパティの実際の値に"Name"置き換えます) に設定されていると仮定して、これを行います。"Name"DisplayMember

string person = ((DataRowView)listBox2.SelectedItem)["Name"] as string; 
于 2013-06-12T13:00:48.707 に答える
0

OK、値が である理由はSystem.Data.DataRowView、リストを にバインドしたためですDataView。そして、それはクールです。しかし、次のことを考慮する必要があります。

string person = ((DataRowView)listBox2.SelectedItem)["Name"] as string;

Name人の名前を含むフィールドの名前はどこにありますか。フィールドの名前はName. これにより、クエリが修正されます。

于 2013-06-12T13:16:02.570 に答える