为提高效率,提问时请提供以下信息,问题描述清晰可优先响应。
【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查询数据都会报错,请修复!