C# - 将 DataReader 转换为 DataTable

     2023-05-07     22

关键词:

【中文标题】C# - 将 DataReader 转换为 DataTable【英文标题】:C# - Converting DataReader to DataTable 【发布时间】:2021-06-23 15:24:30 【问题描述】:

我想将 DataReader 转换为 DataTable 以显示数据库中的列表(demoClients)中的所有客户。

目前我有这个:

   using System;
    using System.Collections.Generic;
    using System.Linq;
    using System.Threading.Tasks;
    using MySqlConnector;
    using ProjectDatabase.Controllers;
    using System.Data;
    using System.Data.Common;
    namespace ProjectDatabase.Models
    
        public class demoClientsQuery
        
            public AppDb Db  get; 
    
            public demoClientsQuery(AppDb db)
            
                Db = db;
            
    
            public async Task<demoClients> FindAllClientsAsync(int id)
            
                using var cmd = Db.conDemo.CreateCommand();
                cmd.CommandText = @"Query";
                cmd.Parameters.Add(new MySqlParameter
                
                    ParameterName = "@id_customer",
                    DbType = DbType.Int32,
                    Value = id,
                );
                
                MySqlDataReader dataReader = cmd.ExecuteReader();
                DataTable dataTable = new DataTable();
                dataTable.Load(dataReader);
                var result = await ReadAllAsync(dataTable);            
                return result.Count > 0 ? result[0] : null;
            
    
    
            public async Task<List<demoClients>> LatestClientsAsync()
            
                using var cmd = Db.conDemo.CreateCommand();
                cmd.CommandText = @"Query";
    
                var aa = await LatestClientsAsync2();
                
                MySqlDataReader dataReader = cmd.ExecuteReader();
                DataTable dataTable = new DataTable();
                dataTable.Load(dataReader);            
                return await ReadAllAsync(dataTable);
            
    
            public async Task<DataTable> LatestClientsAsync2()
            
                using var cmd = Db.conDemo.CreateCommand();
                cmd.CommandText = @"Query";
    
    
                //return await ReadAllAsync(await cmd.ExecuteReaderAsync());
                return await ToDataTable(cmd);
            
    
            private async Task<DataTable> ToDataTable(MySqlCommand cmd)
            
    
    
                cmd.CommandType = CommandType.Text;
                using (DbDataAdapter dataAdapter = new MySqlDataAdapter(cmd))
                
                    cmd.CommandType = CommandType.Text;                               
                    DataTable data = new DataTable();                
                    dataAdapter.Fill(data);
                    
                    return data;
                
               
            
    
            private async Task<List<demoClients>> ReadAllAsync(DataTable dataTable)
            
                var adb_demo_clients = new List<demoClients>();
                using (dataTable)
                
                    
                    foreach (DataRow dr in dataTable.Rows)
                    
                        int id_customer = Convert.ToInt32(dr["id_customer"]);
                        string delivery_person_name = Convert.ToString(dr["delivery_person_name"]);
                        string firstname = Convert.ToString(dr["firstname"]);
                        string lastname = Convert.ToString(dr["lastname"]);
                        string email = Convert.ToString(dr["email"]);
                    
                    
                
                return adb_demo_clients;
            
       
        
    

我遇到的唯一问题是它什么都不返回,它返回空,我的代码中的某些东西没有从我的数据库中返回我的数据。

任何帮助将不胜感激。

感谢您的宝贵时间。

【问题讨论】:

doesn't return nothing - 所以它确实返回了一些东西 您的MySqlConnection 和您的connectionString 在哪里?你能连接到数据库吗?或者你在数据表中转换你的回报有问题吗? 直到DataTable 派生自IDisposable,您可以将其放入using 语句中 您知道您的方法ReadAllAsync 只读取数据表行但从不向列表中添加任何内容adb_demo_clients foreach (DataRow dr in dataTable.Rows) demoClients d = new demoClients(); d.Id = Convert.ToInt32(dr["id_customer"]);; //fill all you fields that you need 所以在那之后你必须在你的列表中添加adb_demo_clients.add(d);(在你关闭你的foreach之前) 【参考方案1】:

您必须在 foreach 内的 ReadAllAsync 方法上将项目添加到 adb_demo_clients 列表中:

private async Task<List<demoClients>> ReadAllAsync(DataTable dataTable)

    var adb_demo_clients = new List<demoClients>();
    using (dataTable)
           
        foreach (DataRow dr in dataTable.Rows)
        
            demoClients d = new demoClients();

            d.id_customer = Convert.ToInt32(dr["id_customer"]);
            d.delivery_person_name = Convert.ToString(dr["delivery_person_name"]);

            // all fields that you need
            ...
            
            // Add the item in your List
            adb_demo_clients.add(d);
        
        
    
    return adb_demo_clients;

【讨论】:

C# - 无法将类型“IBM.Data.DB2.iSeries.iDB2DataReader”隐式转换为“System.Data.SqlClient.SqlDataReader”

】C#-无法将类型“IBM.Data.DB2.iSeries.iDB2DataReader”隐式转换为“System.Data.SqlClient.SqlDataReader”【英文标题】:C#-Cannotimplicitlyconverttype\'IBM.Data.DB2.iSeries.iDB2DataReader\'to\'System.Data.SqlClient.SqlDataReader\'【发布时间】:2018-01- 查看详情

如何将 DataSet a 转换为 DataReader?

】如何将DataSeta转换为DataReader?【英文标题】:HowcanIconvertDataSetatoaDataReader?【发布时间】:2011-04-0113:54:57【问题描述】:如何将DataSet转换为DataReader?【问题讨论】:你不能。如果您需要更多解释,请提供更多信息。我觉得你正... 查看详情

如何将 SQL 转换为 C#

】如何将SQL转换为C#【英文标题】:HowtotranslateSQLtoC#【发布时间】:2022-01-1321:58:35【问题描述】:我有一个如下所示的SQL查询:SELECTa.Date,CASEWHENa.Type=\'String1\'ORa.Type=\'String2\'THEN\'foo\'ELSE\'bar\'ENDASVisitType,DATEDIFF(d,(SELECTTOP1DateFROMdim.Dat 查看详情

将 C# DateTime 转换为 Javascript 日期

】将C#DateTime转换为Javascript日期【英文标题】:ConvertC#DateTimetoJavascriptDate【发布时间】:2013-07-3018:43:10【问题描述】:我在Javascript中有一个从MVC接收C#DateTime的函数。如果日期为空,则应返回“-”,如果是有效日期,则应返回格... 查看详情

如何轻松将 DataReader 转换为 List<T>? [复制]

】如何轻松将DataReader转换为List<T>?[复制]【英文标题】:HowcanIeasilyconvertDataReadertoList<T>?[duplicate]【发布时间】:2009-09-2309:14:58【问题描述】:我在DataReader中有数据,我想将其转换为List&lt;T&gt;。对此有什么可能的... 查看详情

当行尾有多余空格时,将 .dat 文件转换为 DataFrame

】当行尾有多余空格时,将.dat文件转换为DataFrame【英文标题】:Convert.datfileintoDataFramewhenthereisextrawhitespaceattheendofrows【发布时间】:2022-01-1404:29:24【问题描述】:我正在尝试将数据.dat文件转换为pandas数据框。但是,.dat文件在每... 查看详情

c#如何将查询后的结果放入list中

如果是用ADO读取的查询后的数据,建议使用DataReader,而不要把Dataset转换为List,List最好用强类型封装。使用DataReader只需要遍历一次就可以了,Dataset转换LIst要至少两次。代码大概如下:while(DataReader.read())List<类型>.Add(实体)... 查看详情

如何正确地将 DataReader 转换为 DTO/List<DTO>? [复制]

】如何正确地将DataReader转换为DTO/List<DTO>?[复制]【英文标题】:HowtoconvertaDataReadertoaDTO/List<DTO>properly?[duplicate]【发布时间】:2013-09-2107:30:26【问题描述】:我正在尝试找到一种将DataReader转换为DTO的简单方法(就像列名... 查看详情

datareader相关知识点

C#中提供的DataReader可以从数据库中每次提取一条数据。1.获取数据的方式[1]DataReader为在线操作数据,DataReader会一直占用SqlConnection连接,在其获得数据过程中其它操作不可以再使用SqlConnection连接对象。[2]DataSet为离线操作数据,Da... 查看详情

DataReader 循环查询中的 C# MySQL 查询

】DataReader循环查询中的C#MySQL查询【英文标题】:C#MySQLQueryinDataReaderloopquery【发布时间】:2013-05-2707:15:10【问题描述】:我在C#中有一个方法,它应该从mysql获取一些数据,然后将这些数据插入另一个表中。问题是,无论我尝试什... 查看详情

如何将 Matlab 变量转换为带有标题的 .dat(文本)文件

】如何将Matlab变量转换为带有标题的.dat(文本)文件【英文标题】:HowtoconvertMatlabvariablesto.dat(text)filewithheaders【发布时间】:2011-03-1112:08:46【问题描述】:已编辑问题:我在名为avg_data_models的变量中有2500行x100列数据。我还有250... 查看详情

mysql datareader找不到行c#

】mysqldatareader找不到行c#【英文标题】:mysqldatareadernotfindingrowsc#【发布时间】:2014-04-2712:47:34【问题描述】:我有一个关于c#和mysql的问题。我想制作一个连接到本地数据库的非常简单的登录表单。我的连接正常工作(经过测试... 查看详情

c#公共帮助类jsonhelper操作帮助类

...换动态类、object动态类转换json包、json转换object动态类、DataReader转换为Json、DataSet转换为Json、DataTable转成Json、Datatable转换为Json、格式化字符型日期型布尔型、过滤特殊字符 查看详情

无法在 DataReader.GetString() 中将“System.Int32”类型的对象转换为“System.String”类型

】无法在DataReader.GetString()中将“System.Int32”类型的对象转换为“System.String”类型【英文标题】:Unabletocastobjectoftype\'System.Int32\'totype\'System.String\'inDataReader.GetString()【发布时间】:2013-11-0402:58:33【问题描述】:我试图将数据库中... 查看详情

将 php 转换为 c#,将 curl 转换为 .net [关闭]

】将php转换为c#,将curl转换为.net[关闭]【英文标题】:Convertingphptoc#,curlto.net[closed]【发布时间】:2016-04-1808:17:23【问题描述】:我正在尝试将PHP文件转换为C#。问题是我不知道curl的等效.net命令。ob_start();$ret=curl_exec($ch);$content=ob_g... 查看详情

将 XML 转换为动态 C# 对象

】将XML转换为动态C#对象【英文标题】:ConvertingXMLtoadynamicC#object【发布时间】:2012-10-2117:06:25【问题描述】:我使用以下C#代码通过JSON.Net框架将JSON数据字符串转换为动态对象://Createsadynamic.NetobjectrepresentingtheJSONdatavarProductDB=Json... 查看详情

Pandas DataReader 无法将 % 识别为字符串的一部分

】PandasDataReader无法将%识别为字符串的一部分【英文标题】:PandasDataReaderdoesnotrecognise%aspartofthestring【发布时间】:2017-06-2221:24:27【问题描述】:以下代码尝试从googleFinance调用DAX历史索引,但是当函数实际调用“INDEXDB%3ADAX”时,... 查看详情

如何将 C++ 结构转换为 C# 结构

】如何将C++结构转换为C#结构【英文标题】:HowtoConvertaC++StructureintoC#Structure【发布时间】:2009-11-1604:07:24【问题描述】:我需要将一个复杂的C++结构转换为C#结构,我已经在C#中转换了其他结构,这个包含一些二维数组,问题是... 查看详情