database - 如何在 Mono Data SQL 中获取 DataTable
问题描述
我编写了一个函数来获取我的数据库中的对象列表
public List<T> GetList<T>() where T: new()
{
IDbCommand dbCmd = dbcon.CreateCommand();
dbCmd.CommandText = "SELECT * FROM " + typeof(T).FullName;
IDataReader reader = dbCmd.ExecuteReader();
DataTable schemaTable = reader.GetSchemaTable();
List<T> returnList = new List<T>();
foreach (DataRow row in schemaTable.Rows)
{
T obj = new T();
foreach(var prop in obj.GetType().GetProperties())
{
prop.SetValue(obj, row[prop.Name], null);
}
returnList.Add(obj);
}
return returnList;
}
但是,如果我为我的 Weapon 类运行它,它有
public int ID { get; set;}
public int Cost { get; set; }
public int Power { get; set; }
public int Distance { get; set; }
我得到 25 列,如果为 Monster 类运行,我得到相同的 25 列,分别为“ColumnName”、“ColumnOrdinal”、“ColumnSize”、“NumericPrecision”等...
所以我不能设置我的“成本”属性,因为这个数据集没有成本列名称。
如何正确获取 SchemaTable?
解决方案
我在不使用 SchemaTable 的情况下解决了我的问题
public List<T> GetList<T>() where T: new()
{
IDbCommand dbCmd = dbcon.CreateCommand();
dbCmd.CommandText = String.Format("SELECT * FROM {0}", typeof(T).FullName);
IDataReader reader = dbCmd.ExecuteReader();
List<T> returnList = new List<T>();
while (reader.Read())
{
T obj = new T();
foreach(var prop in obj.GetType().GetProperties())
{
prop.SetValue(obj, Convert.ChangeType(reader[prop.Name], prop.PropertyType), null);
}
returnList.Add(obj);
}
return returnList;
}
此脚本成功获取给定表中的所有项目。
推荐阅读
- python - 如何在 Tweepy 中为 API.search 的 geocode 参数指定多个坐标
- git - 在 Azure git 中锁定分支的 API
- angular - Angular 材质拖放 cdk:将项目合二为一并交换元素
- mysql - 为什么 MySQL Workbench 中的“获取”(如持续时间/获取)需要很长时间才能获取非常有限的数据量?
- typescript - nestjs 套接字连接和断开连接
- graphql - 如何使用 github GraphQL API 创建问题?
- c - malloc() 调用不会跨函数持续存在
- sql-server - 为什么powershell会忽略Invoke-DbaQuery的queryTimeout参数并无限期挂起?
- google-cloud-platform - 如何通过 GCP Cloud Functions 以编程方式导出计算实例的谷歌云监控图?
- haskell - 向并行代码添加进度条 (Haskell)