【问题标题】:Trying to compare a given ID with one stored on the DB尝试将给定 ID 与存储在数据库中的 ID 进行比较
【发布时间】:2017-10-06 11:48:49
【问题描述】:

你能帮我解决这个问题吗? 我真的不知道该怎么做。

我想要做的是,当我给它一个 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;
}

【问题讨论】:

  • 你没有添加你的SqlParameter

标签: c# sql database sqldatareader reader


【解决方案1】:

问题是你传递的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

【讨论】:

    【解决方案2】:

    您必须将值传递给 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);
        }
    }
    

    【讨论】:

      猜你喜欢
      • 2011-07-15
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2014-09-22
      • 2013-09-07
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多