zoukankan      html  css  js  c++  java
  • .netcore 3.1 EFCore报错-The SqlParameterCollection only accepts non-null SqlParameter type objects, not SqlParameter objects.

    把.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:VSWrokMuXue.Zyiz.Template.WebApiMuXue.Zyiz.Template.InfrastructureRepositoryBaseRepository.cs:line 609
       at MuXue.Zyiz.Template.Infrastructure.Repository.ordersRepository.<QueryListSmallModel>d__1.MoveNext() in D:VSWrokMuXue.Zyiz.Template.WebApiMuXue.Zyiz.Template.InfrastructureRepositoryordersRepository.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:VSWrokMuXue.Zyiz.Template.WebApiMuXue.Zyiz.Template.ServiceImplordersService.cs:line 63
    

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

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

    原来是 

    using System.Data.SqlClient;
    

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

    Microsoft.Data.SqlClient
    

      

  • 相关阅读:
    转载:SQL server2005 里面没有management studio!下载SQL开发版本
    LInux、Ubuntu、win7、win8纯净版 镜像包链接地址 收集
    [转]Lucene经验总结 (转注:较旧,但有干货)
    几篇调试IIS内存过高或CPU过高的好文章
    Web应用程序
    使用ASP.NET State Server实现多应用程序间共享Session State
    [转]使用visual studio进行web应用程序性能测试
    [转] ASP.NET WEB API程序在VS启动或发布到IIS后启动后发生
    [转]优化Redis内存的9个要点
    [转]使用Memcached的8个要点
  • 原文地址:https://www.cnblogs.com/puzi0315/p/12820093.html
Copyright © 2011-2022 走看看