如何修复"不存在从对象类型System.Data.SqlClient.SqlParameter到已知托管提供程序本机类型的映射"错误 ASP.Net



我正在尝试从控制器调用存储过程。它的值来自 ajax 到控制器。如何解决我遇到的此错误?

这是我的存储过程

ALTER PROCEDURE [dbo].[sp_Get_OADetails_By_Customer]
    @CustCode NVARCHAR(15),
    @Status INT,
    @Sdate NVARCHAR(20),
    @Edate NVARCHAR(20)
AS
BEGIN
    SELECT   
        O.OANO, O.OADate, O.PONO, O.PODATE,
        SO.POLI, SO.ID, SO.MOULDCODE, SO.DESCRIPTION,
        SO.Drg, SO.Rev, M.METALNAME,
        SO.QTY, U.UNITName, SO.DELIVERYDT 
    FROM
        OADetails AS O 
    LEFT OUTER JOIN 
        CustomerDetails AS C ON O.PCODE = C.PCODE 
    LEFT OUTER JOIN 
        SubOADetail AS SO ON O.OANO = SO.OANO 
    LEFT OUTER JOIN 
        MetalDetails AS M ON SO.METALCODE = M.METALCODE 
    LEFT OUTER JOIN 
        UNITMaster AS U ON SO.UNIT = U.UNITID 
    WHERE
        C.CUSTCODE = @CustCode 
        AND O.Status = @Status 
        AND o.OADATE BETWEEN @Sdate AND @Edate
END

这是我的控制器

[HttpPost]
public ActionResult GetOADetailByCustomer(string custcode, int status, string yr)
{
        var CST = new SqlParameter
        {
            ParameterName = "CUSTCODE",
            Value = custcode
        };
        var ST = new SqlParameter
        {
            ParameterName = "Status",
            Value = status
        };
        var yearval = Db.Years.Where(x => x.YEAR1 == yr).FirstOrDefault();
        var courseList = Db.Database.SqlQuery<OADetail>("exec sp_OADetails_Get @CustCode, @Status, @Sdate, @Edate",
            new SqlParameter("@CustCode", CST),
            new SqlParameter("@Status", ST),
            new SqlParameter("@Sdate", yearval.SDATE),
            new SqlParameter("@Edate", yearval.EDATE)).FirstOrDefault<OADetail>();
        return View();
}

谁能帮我?

提前谢谢你..

正如 user2864740 所说的那样,您正在将 SqlParameters 加倍

因此,更改为以下内容将修复它。

[HttpPost]
public ActionResult GetOADetailByCustomer(string custcode, int status, string yr)
{
        var CST = custcode;
        var ST = status;
        var yearval = Db.Years.Where(x => x.YEAR1 == yr).FirstOrDefault();
        var courseList = Db.Database.SqlQuery<OADetail>("exec sp_OADetails_Get @CustCode, @Status, @Sdate, @Edate",
            new SqlParameter("@CustCode", CST),
            new SqlParameter("@Status", ST),
            new SqlParameter("@Sdate", yearval.SDATE),
            new SqlParameter("@Edate", yearval.EDATE)).FirstOrDefault<OADetail>();
        return View();
}

最新更新