C# 为特定用户更新数据库

C# 为特定用户更新数据库,c#,.net,ado.net,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 =

我正在尝试为特定名称更新我的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为什么?如何修复它?

您是否确保亲自给出了实际名称,而不是类名?如果SelectedItem是一个类,则ToString将返回类名EDIT或开发人员在自己的ToString重写中返回的任何内容

将断点设置为字符串memberStatus=platinum行,并检查person的值

嗯,您的列表框似乎有一个数据绑定。在这种情况下,实际项目是DataRowView,ListBox的DisplayMember决定列表中显示的内容

要获取人名,需要从DataRowView获取列的值。假设DisplayMember属性设置为使用DisplayMember属性的实际值命名替换名称,则下一行将执行此操作:

string person = ((DataRowView)listBox2.SelectedItem)["Name"] as string; 
您是否确保亲自给出了实际名称,而不是类名?如果SelectedItem是一个类,则ToString将返回类名EDIT或开发人员在自己的ToString重写中返回的任何内容

将断点设置为字符串memberStatus=platinum行,并检查person的值

嗯,您的列表框似乎有一个数据绑定。在这种情况下,实际项目是DataRowView,ListBox的DisplayMember决定列表中显示的内容

要获取人名,需要从DataRowView获取列的值。假设DisplayMember属性设置为使用DisplayMember属性的实际值命名替换名称,则下一行将执行此操作:

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

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

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

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

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

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

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

当我检查数据库时,客户端的角色尚未更新。person是否具有您期望的值?听起来好像您的where子句有误。运行SELECT*FROM Client where Name=@Name并验证您是否得到了结果调试时person的值是多少?当我检查数据库时,客户端的角色尚未更新。person是否具有您期望的值?听起来您的where子句有误。运行SELECT*FROM Client where Name=@Name并验证是否得到结果。调试person时person的值是多少?当我调试并将鼠标悬停在person上时,它会显示System.Data.DataRowView为什么?如何修复它?当我调试并将鼠标悬停在person上时,它会显示System.Data.DataRowView为什么?我该怎么修?谢谢你的帮助!这就解决了@杰克,太棒了。我很高兴能帮上忙!谢谢你的帮助!这就解决了@杰克,太棒了。我很高兴能帮上忙!