为特定用户更新数据库

本文关键字:更新 数据库 用户 | 更新日期: 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, ListBoxDisplayMember决定列表中显示的内容。

要获取人名,需要从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。这将修复您的查询。