2017-05-08 11 views
2

你可以帮助我吗? 我真的不知道该怎么做。试图比较一个给定的ID与存储在数据库

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

你没有添加你的'SqlParameter' – Jonesopolis

回答

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命名约定重命名GivenIdgivenId

+1

这实际上有效!非常感谢! –

1

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