我正在尝试更新我的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”为什么会这样?我该如何解决?
答案 0 :(得分:4)
您是否确保在person
中给出了实际名称,而不是类名?如果SelectedItem
是一个类,ToString
将返回类名( EDIT或开发人员在其自己的ToString
覆盖中返回的任何内容)。
将断点设置为string memberStatus = "platinum"
行并检查person
的值。
好吧,您的ListBox
似乎有数据绑定。在这种情况下,实际项目为DataRowView
,DisplayMember
的{{1}}决定列表中显示的内容。
要获取此人的姓名,您需要从ListBox
获取“列”的值。假设DataRowView
属性设置为DisplayMember
(将"Name"
替换为"Name"
属性的实际值),以下行就是这样做的:
DisplayMember
答案 1 :(得分:0)
好的,值为System.Data.DataRowView
的原因是因为您将列表绑定到DataView
。这太酷了。但我们需要考虑到这一点:
string person = ((DataRowView)listBox2.SelectedItem)["Name"] as string;
其中Name
是包含此人姓名的字段的名称。我假设该字段名为Name
。这将修复您的查询。