C# 必须声明标量变量"@ASIN“;

C# 必须声明标量变量"@ASIN“;,c#,sql,asp.net,model-view-controller,C#,Sql,Asp.net,Model View Controller,我不明白错误信息。用标量变量表示什么@ASIN值应该存储在我为GetByAsin方法创建的id变量中 //Gets one Music Detail public MusicDescriptionModel GetByAsin(string id) { using (IDbConnection db = connection) { string sql = "select ASIN, Title, Artist, Price, ReleaseDate,Number

我不明白错误信息。用标量变量表示什么@ASIN值应该存储在我为GetByAsin方法创建的id变量中

//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;
    }
}
//获取一个音乐详细信息
公共音乐描述模型GetByAsin(字符串id)
{
使用(IDbConnection db=connection)
{
string sql=“选择ASIN、标题、艺术家、价格、发布日期、编号、标签、详细页面URL、评论”+
“来自TBL说明,其中id=@ASIN”;
//需要参数化ID以避免sql注入攻击。
MusicDescriptionModel musicdesc=db.Query(sql,new{id}).SingleOrDefault();
返回音乐CDESC;
}
}

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

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

你不能使用一个不同的名字,并期望它神奇地为你排列它们。它们需要匹配。

您还没有为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 ASIN = @ASINSqlParam";
        //need to parameterize ID to avoid sql injection attacks.
        MusicDescriptionModel musicdesc = db.Query<MusicDescriptionModel>(sql, new { ASINSqlParam = id }).SingleOrDefault();
你不能使用一个不同的名字,并期望它神奇地为你排列它们。它们需要匹配。

string sql=“选择ASIN、标题、艺术家、价格、发布日期、编号、标签、详细页面URL、评论”+
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();
“来自TBL说明,其中ASIN=@ASINSqlParam”; //需要参数化ID以避免sql注入攻击。 MusicDescriptionModel musicdesc=db.Query(sql,new{ASINSqlParam=id}).SingleOrDefault();
我们应该做到这一点

文档可能会有所帮助。

string sql=“选择ASIN、标题、艺术家、价格、发布日期、编号、标签、详细页面URL、查看”+
“来自TBL说明,其中ASIN=@ASINSqlParam”;
//需要参数化ID以避免sql注入攻击。
MusicDescriptionModel musicdesc=db.Query(sql,new{ASINSqlParam=id}).SingleOrDefault();
我们应该做到这一点


文档可能会有所帮助。

问题出在我的where语句中 我需要创建标量变量@id
WHERE-ASIN=@id

问题出在我的WHERE语句中 我需要创建标量变量@id
其中ASIN=@id

如何在sql字符串中设置@ASIN?它在id=@ASIN@mason请告诉我@ASIN是如何在您的sql字符串中设置的?它在id=@ASIN@mason打败我,我试过了,但它给了我一个错误消息,说id是无效的column@TimothyWong然后看看
tblDescription
,看看应该在哪个列上进行筛选。我没有访问您的数据库的权限,无法查看表中定义了哪些列。我正在尝试使要传递的字符串id等于ASIN。这就是为什么在where语句中放置id=@ASIN。问题是:MusicDescriptionModel musicdesc=db.Query(sql,new{id}).SingleOrDefault()@TimothyWong尝试在SSMS或SQCMD中运行查询。在那里不行吗?那么它也不会对整洁的人起作用。如果列不存在,则无法使用该列。我尝试了该列,但它给我一条错误消息,说明id无效column@TimothyWong然后看看
tblDescription
,看看应该在哪个列上进行筛选。我没有访问您的数据库的权限,无法查看表中定义了哪些列。我正在尝试使要传递的字符串id等于ASIN。这就是为什么在where语句中放置id=@ASIN。问题是:MusicDescriptionModel musicdesc=db.Query(sql,new{id}).SingleOrDefault()@TimothyWong尝试在SSMS或SQCMD中运行查询。在那里不行吗?那么它也不会对整洁的人起作用。如果列不存在,则不能使用该列。