ICode9

精准搜索请尝试: 精确搜索
首页 > 数据库> 文章详细

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

2020-05-02 22:53:06  阅读:440  来源: 互联网

标签:parameters cmd System MuXue objects 报错 Template Zyiz SqlParameter


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

//using System.Data.SqlClient;
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

  

 

标签:parameters,cmd,System,MuXue,objects,报错,Template,Zyiz,SqlParameter
来源: https://www.cnblogs.com/puzi0315/p/12820093.html

本站声明: 1. iCode9 技术分享网(下文简称本站)提供的所有内容,仅供技术学习、探讨和分享;
2. 关于本站的所有留言、评论、转载及引用,纯属内容发起人的个人观点,与本站观点和立场无关;
3. 关于本站的所有言论和文字,纯属内容发起人的个人观点,与本站观点和立场无关;
4. 本站文章均是网友提供,不完全保证技术分享内容的完整性、准确性、时效性、风险性和版权归属;如您发现该文章侵犯了您的权益,可联系我们第一时间进行删除;
5. 本站为非盈利性的个人网站,所有内容不会用来进行牟利,也不会利用任何形式的广告来间接获益,纯粹是为了广大技术爱好者提供技术内容和技术思想的分享性交流网站。

专注分享技术,共同学习,共同进步。侵权联系[81616952@qq.com]

Copyright (C)ICode9.com, All Rights Reserved.

ICode9版权所有