注册

EF Core6下执行查询出错

weiky 2023/02/10 1091 0

为提高效率,提问时请提供以下信息,问题描述清晰可优先响应。
【DM版本】:8
【操作系统】:window10
【CPU】:
【问题描述】*:EF Core6下执行查询出错
代码:```C#

public DataTable GetDataTable(string sql, params DbParameter[] parameters)
        {
            var command = CreateCommand(sql, parameters);
            var reader = command.ExecuteReader();
            var dt = new DataTable();
            dt.Load(reader);
            reader.Close();
            return dt;
        }

public DbCommand CreateCommand(string sql, params DbParameter[] parameters)
        {
            var conn = Database.GetDbConnection();
            if (conn.State != ConnectionState.Open) conn.Open();
            var cmd = conn.CreateCommand();
            cmd.CommandText = sql;
            cmd.CommandTimeout = 600;
            if (parameters?.Length > 0)
            {
                cmd.Parameters.AddRange(parameters);
            }
            return cmd;
        }
调用下面这句出错
var dt = objContext.GetDataTable("SELECT * from T_Child");
出错详细信息:
System.ArgumentException
  HResult=0x80070057
  Message=Source array was not long enough. Check the source index, length, and the array's lower bounds. Arg_ParamName_Name
  Source=System.Private.CoreLib
  StackTrace:
   在 System.Array.Copy(Array sourceArray, Int32 sourceIndex, Array destinationArray, Int32 destinationIndex, Int32 length, Boolean reliable)
   在 System.Array.Copy(Array sourceArray, Int32 sourceIndex, Array destinationArray, Int32 destinationIndex, Int32 length)
   在 Dm.DmResultSetCache.GetBytes(Int16 columnNo, Byte[]& val_buf)
   在 Dm.DmDataReader.GetByteArrayValue(Int32 columnIndex, Byte[]& value)
   在 Dm.DmDataReader.do_GetString(Int32 i)
   在 Dm.DmDataReader.FillSchemaTable(DataTable schTbl)
   在 Dm.DmDataReader.do_GetSchemaTable()
   在 System.Data.ProviderBase.SchemaMapping..ctor(DataAdapter adapter, DataSet dataset, DataTable datatable, DataReaderContainer dataReader, Boolean keyInfo, SchemaType schemaType, String sourceTableName, Boolean gettingData, DataColumn parentChapterColumn, Object parentChapterValue)
   在 System.Data.Common.DataAdapter.FillMappingInternal(DataSet dataset, DataTable datatable, String srcTable, DataReaderContainer dataReader, Int32 schemaCount, DataColumn parentChapterColumn, Object parentChapterValue)
   在 System.Data.Common.DataAdapter.FillMapping(DataSet dataset, DataTable datatable, String srcTable, DataReaderContainer dataReader, Int32 schemaCount, DataColumn parentChapterColumn, Object parentChapterValue)
   在 System.Data.Common.DataAdapter.FillFromReader(DataSet dataset, DataTable datatable, String srcTable, DataReaderContainer dataReader, Int32 startRecord, Int32 maxRecords, DataColumn parentChapterColumn, Object parentChapterValue)
   在 System.Data.Common.DataAdapter.Fill(DataTable[] dataTables, IDataReader dataReader, Int32 startRecord, Int32 maxRecords)
   在 System.Data.DataTable.Load(IDataReader reader, LoadOption loadOption, FillErrorEventHandler errorHandler)
   在 System.Data.DataTable.Load(IDataReader reader)
   在 MultiDBDemo.Entity.Entities.GetDataTable(String sql, DbParameter[] parameters) 在 D:\VS2017Pro\MultiDBDemo\Entity\Entities.cs 中: 第 28 行
   在 MultiDBDemo.Pages.IndexModel.CreateDMContext(String server, String un, String pwd, String db) 在 D:\VS2017Pro\MultiDBDemo\Pages\Index.cshtml.cs 中: 第 42 行
   在 MultiDBDemo.Pages.IndexModel.OnGet() 在 D:\VS2017Pro\MultiDBDemo\Pages\Index.cshtml.cs 中: 第 52 行
   在 Microsoft.AspNetCore.Mvc.RazorPages.Infrastructure.ExecutorFactory.VoidHandlerMethod.Execute(Object receiver, Object[] arguments)
   在 Microsoft.AspNetCore.Mvc.RazorPages.Infrastructure.PageActionInvoker.<InvokeHandlerMethodAsync>d__29.MoveNext()
"
   测试发现,直接通过SQL查询数据都会报错,请修复!
回答 0
暂无回答
扫一扫
联系客服