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();  
}

当我检查数据库时,客户端的角色尚未更新。而我调试的时候,person的值是“System.Data.DataRowView”,这是为什么呢?我该如何解决?

4

2 回答 2

4

您是否确保person给出的是实际名称,而不是类名?如果SelectedItem是一个类,ToString将返回类名(EDIT 或开发人员在他自己的覆盖中返回的任何内容ToString)。

为该行设置一个断点string memberStatus = "platinum"并检查person.


好吧,你ListBox似乎有一个数据绑定。在这种情况下,实际的项目是 aDataRowView并且决定列表中显示的内容DisplayMemberListBox

要获取此人的姓名,您需要从DataRowView. 假设DisplayMember属性设置为"Name"(替换"Name"为您的属性的实际值DisplayMember),以下行会执行此操作:

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

好的,该值的原因System.Data.DataRowView是因为您将列表绑定到DataView. 这很酷。但我们需要考虑到这一点:

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

Name包含人名的字段的名称在哪里。我假设该字段名为Name. 这将解决您的查询。

于 2013-06-12T13:16:02.570 回答