为特定用户更新数据库
本文关键字:更新 数据库 用户 | 更新日期: 2023-09-27 18:18:06
我试图更新我的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();
}
当我检查数据库时,Client's Role还没有更新。当我调试时,person的值是" system。data "为什么呢?我怎样才能修好它?
您是否确定在person
中给出了实际名称,而不是类名称?如果SelectedItem
是一个类,ToString
将返回类名(EDIT或开发人员在自己的ToString
重写中返回的任何内容)。
设置一个断点到string memberStatus = "platinum"
行,检查person
的值
嗯,你的ListBox
似乎有一个数据绑定。在这种情况下,实际的项目是DataRowView
, ListBox
的DisplayMember
决定列表中显示的内容。
要获取人名,需要从DataRowView
中获取"Column"的值。假设DisplayMember
属性被设置为"Name"
(用DisplayMember
属性的实际值替换"Name"
),下面的代码行做到了这一点:
string person = ((DataRowView)listBox2.SelectedItem)["Name"] as string;
好,值为System.Data.DataRowView
的原因是因为您将列表绑定到DataView
。这很酷。但是我们需要考虑到这一点:
string person = ((DataRowView)listBox2.SelectedItem)["Name"] as string;
其中Name
是包含该人姓名的字段的名称。我假设该字段名为Name
。这将修复您的查询。