2017-02-17 42 views
0

我不明白错误消息。标量变量是什么? @ASIN值应该存储在为GetByAsin方法创建的id变量中。必须声明标量变量“@ASIN”

//Gets one Music Detail 
    public MusicDescriptionModel GetByAsin(string id) 
    { 
     using (IDbConnection db = connection) 
     { 
      string sql = "select ASIN, Title, Artist, Price, ReleaseDate,NumberDisks,label,DetailPageURL, Review" + 
          "FROM tblDescription WHERE id = @ASIN"; 
      //need to parameterize ID to avoid sql injection attacks. 
      MusicDescriptionModel musicdesc = db.Query<MusicDescriptionModel>(sql, new { id }).SingleOrDefault(); 
      return musicdesc; 
     } 
    } 
+0

如何@ASIN得到您的SQL字符串设定? – Jake

+0

它在id = @ASIN –

+0

@mason击败了我。 – Jake

回答

2

您尚未传递变量以使Dapper绑定到@ASIN。尝试:

MusicDescriptionModel musicdesc 
    = db.Query<MusicDescriptionModel>(sql, new { ASIN = id }).SingleOrDefault(); 

或尝试:

string sql = "select ASIN, Title, Artist, Price, ReleaseDate,NumberDisks,label,DetailPageURL, Review" + 
         "FROM tblDescription WHERE id = @Id"; 

不能使用不同的名称,并期望它奇迹般地排队他们为你。他们需要匹配。

+0

我试过了,但它给了我一个错误消息,说ID是一个无效的列 –

+0

@TimothyWong那么看看'tblDescription',看看你应该过滤哪一列。我无法访问数据库以查看您的表上定义了哪些列。 – mason

+0

我想让我想传递的字符串id等于ASIN。这就是为什么把id = @ASIN放在我的where语句中。问题是:MusicDescriptionModel musicdesc = db.Query (sql,new {id})。SingleOrDefault(); –

0
string sql = "select ASIN, Title, Artist, Price, ReleaseDate,NumberDisks,label,DetailPageURL, Review" + 
         "FROM tblDescription WHERE ASIN = @ASINSqlParam"; 
     //need to parameterize ID to avoid sql injection attacks. 
     MusicDescriptionModel musicdesc = db.Query<MusicDescriptionModel>(sql, new { ASINSqlParam = id }).SingleOrDefault(); 

应该这样做。

Docs here可能会有所帮助。

0

的问题是在我的WHERE语句 我需要做的标量变量@id WHERE ASIN = @id