尝试将给定 ID 与存储在数据库中的 ID 进行比较

Trying to compare a given ID with one stored on the DB

你能帮我解决这个问题吗? 实在想不通怎么办。

我想做的是,当我给它一个 ID 时,将它与存储在数据库中的另一个 ID 进行比较。

public Rubro GetRubroById(int GivenId)
{

    Rubro rubro = new Rubro();
    SqlCommand command = new SqlCommand

    ("SELECT * FROM Rubro WHERE GivenId = Id", con);
    try
    {
        con.Open();
        SqlDataReader reader = command.ExecuteReader();
        while (reader.Read())
        {
            rubro.Id = reader.GetInt32(0);
            rubro.Name = reader.GetString(1);
        }
        con.Close();
    }
    catch (SqlException ex)
    {
        MessageBox.Show(ex.Message);
    }

    return rubro;
}

您必须将值传递给 sql 查询参数:

using(var command = new SqlCommand("SELECT * FROM Rubro WHERE Id = @GivenId", con))
{
    try
    {
        command.Parameters.Add("@GivenId", SqlDbType.Int).Value = GivenId;
        con.Open();
        using(var reader = command.ExecuteReader())
        while (reader.Read())
        {
            rubro.Id = reader.GetInt32(0);
            rubro.Name = reader.GetString(1);
        }
        con.Close();
    }
    catch (SqlException ex)
    {
       MessageBox.Show(ex.Message);
    }
}

问题是您传递的 SQL 中的 GivenId 变量与 GetRubroById 方法的 GivenId 变量没有关系。尽管它们的名称相同,但两者存在于系统的不同部分。

您需要使用参数将值传递给语句:

SqlCommand command = new SqlCommand("SELECT * FROM Rubro WHERE @GivenId = Id", con);
command.Parameters.Add("@GivenId", SqlDbType.Int);
command.Parameters["@GivenId"].Value = GivenId; // rename to givenId

您应该根据 .NET 命名约定将 GivenId 重命名为 givenId