更新特定用户的数据库

时间:2013-06-12 12:57:52

标签: c# .net ado.net

我正在尝试更新我的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”为什么会这样?我该如何解决?

2 个答案:

答案 0 :(得分:4)

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

将断点设置为string memberStatus = "platinum"行并检查person的值。


好吧,您的ListBox似乎有数据绑定。在这种情况下,实际项目为DataRowViewDisplayMember的{​​{1}}决定列表中显示的内容。

要获取此人的姓名,您需要从ListBox获取“列”的值。假设DataRowView属性设置为DisplayMember(将"Name"替换为"Name"属性的实际值),以下行就是这样做的:

DisplayMember

答案 1 :(得分:0)

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

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

其中Name是包含此人姓名的字段的名称。我假设该字段名为Name。这将修复您的查询。