asp.net System.InvalidCastException:SqlParameterCollection仅接受非空SqlParameter类型对象,而不接受SqlParameter对象,

tyky79it  于 2023-02-01  发布在  .NET
关注(0)|答案(3)|浏览(145)

我把我的项目从ASP.NETCore2.2迁移到ASP.NETCore3.0。现在我遇到了这个异常。在ASP.NETCore2.2中,它使用的是FromSql();现在它使用FromSqlRaw()。我正在使用实体框架核心调用我的过程。

SqlParameter Username = new SqlParameter
            {
                ParameterName = "USERNAME",
                SqlDbType = SqlDbType.NVarChar,
                Value = user.Username,
                Direction = ParameterDirection.Input,
                Size = 50
            };

SqlParameter Password = new SqlParameter
            {
                ParameterName = "PASSWORD",
                SqlDbType = SqlDbType.NVarChar,
                Value = user.Password,
                Direction = ParameterDirection.Input,
                Size = 50
            };

SqlParameter msgOut = new SqlParameter
            {
                ParameterName = "MSG",
                SqlDbType = SqlDbType.NVarChar,
                Direction = ParameterDirection.Output,
                Size = 1000
            };

SqlParameter statusOut = new SqlParameter
            {
                ParameterName = "STATUS",
                SqlDbType = SqlDbType.Int,
                Direction = ParameterDirection.Output
            };

var sql = @"EXEC PRC_USERS_LOGIN
                        @USERNAME, 
                        @PASSWORD, 
                        @MSG OUT, 
                        @STATUS OUT";

Users resultUser = new Users();
resultUser = ctx.Users.FromSqlRaw(sql, Username, Password, msgOut, statusOut)
                      .FirstOrDefault();
toiithl6

toiithl61#

更换后此代码工作正常

System.Data.SqlClient.SqlParameter

Microsoft.Data.SqlClient.SqlParameter

以及

FirstOrDefault();

ToList();
sd2nnvve

sd2nnvve2#

通过将使用System.Data.SqlClient更改为使用Microsoft.Data.SqlClient进行修复
https://github.com/aspnet/EntityFrameworkCore/issues/16812#issuecomment-516013245

piv4azn7

piv4azn73#

反之亦然:您必须将System.Data.SqlClient.SqlParameters与EF 6一起使用,* 而不是 * Microsoft.Data.SqlClient.SqlParameters
此外,请确保使用Microsoft.SqlServer.Server.SqlDataRecords,而不是Microsoft.Data.SqlClient.Server.SqlDataRecords

相关问题