.netcore 3.1 EFCore报错-The SqlParameterCollection only accepts non-null SqlParameter type objects, no

把.netcore 2.2升级到3.1后,EFcore里,执行自己写的sql一直报错。部分代码如下:

//using System.Data.SqlClient;<br>  List<SmallOrderResp> result = new List<SmallOrderResp>();
            string sql = @"select * from cs_orders";
            SqlParameter[] parameters = {
                           new SqlParameter("@app_user_id",app_user_id)
                   };
            result= this.QueryBySql<SmallOrderResp>(sql, parameters).ToList();
/// <summary>
       /// 执行SQL查询-返回List
       /// </summary>
       public virtual IEnumerable<Entity> QueryBySql<Entity>(string sql, object[] parameters = null)
       {
           DbConnection connection = _dbContext.Database.GetDbConnection();
           DbCommand cmd = connection.CreateCommand();
           connection.Open();
           cmd.CommandText = sql;
           cmd.CommandType = CommandType.Text;
           if (parameters != null)
           {
               cmd.Parameters.AddRange(parameters);
           }
           DataTable dt = new DataTable();
           using (DbDataReader reader = cmd.ExecuteReader())
           {
               dt.Load(reader);
               cmd.Parameters.Clear();
           }
           connection.Close();
           return ConvertHelper.DataTableToIList<Entity>(dt).ToList();
       }

 

 

简单的错误信息如下:

The SqlParameterCollection only accepts non-null SqlParameter type objects, not SqlParameter objects.

详细信息如下:

at Microsoft.Data.SqlClient.SqlParameterCollection.ValidateType(Object value)
at Microsoft.Data.SqlClient.SqlParameterCollection.AddRange(Array values)
at MuXue.Zyiz.Template.Infrastructure.Repository.BaseRepository`1.QueryBySql[Entity](String sql, Object[] parameters) in D:\VSWrok\MuXue.Zyiz.Template.WebApi\MuXue.Zyiz.Template.Infrastructure\Repository\BaseRepository.cs:line 609
at MuXue.Zyiz.Template.Infrastructure.Repository.ordersRepository.<QueryListSmallModel>d__1.MoveNext() in D:\VSWrok\MuXue.Zyiz.Template.WebApi\MuXue.Zyiz.Template.Infrastructure\Repository\ordersRepository.cs:line 38
at System.Runtime.ExceptionServices.ExceptionDispatchInfo.Throw()
at System.Runtime.CompilerServices.TaskAwaiter.ThrowForNonSuccess(Task task)
at System.Runtime.CompilerServices.TaskAwaiter.HandleNonSuccessAndDebuggerNotification(Task task)
at System.Runtime.CompilerServices.TaskAwaiter`1.GetResult()
at MuXue.Zyiz.Template.Service.Impl.ordersService.<GetList>d__9.MoveNext() in D:\VSWrok\MuXue.Zyiz.Template.WebApi\MuXue.Zyiz.Template.Service\Impl\ordersService.cs:line 63

找了很长时间一直未找到解决方案,最终在github上找到问题所在:

https://github.com/dotnet/efcore/issues/16812

原来是 

using System.Data.SqlClient;

这个的错误,.netcore 3.1以后,就不能用这个了。需要用另一个,如下。

Microsoft.Data.SqlClient

 

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值