c# - 读入 DataTable 时的列类型
问题描述
通过 Load 将全部内容读入 DataTable 后,所有列的类型Rows.ItemArray
始终为“对象”。尽管在运行时,读者应该知道正确的类型。由于某些原因,我需要一个 DataTable 演示文稿。
using (var cmd = new NpgsqlCommand(sql, conn))
{
var reader = cmd.ExecuteReader();
int fieldCount = reader.FieldCount;
workTable = new DataTable(DateTime.Now.ToString());
workTable.Load(reader);
return workTable;
}
这是因为我需要在内存中对我的查询进行完整的数据表示。因此,要求迫使我定义如下:
public IDictionary Pair(string key1, string key2)
{
var r = from DataRow r1 in workTable.Rows
from DataRow r2 in workTable.Rows
select new { rk1 = r1[key1], rk2 = r2[key2] };
Dictionary<Object, Object> result = r.ToDictionary(x => x.rk1, x => x.rk2);
return result;
}
它有效,但我是 c# 的新手,我认为也许有一些可能性可以更精确地处理数据类型。
解决方案
如果您需要识别 DataTable 的列的数据类型。您可以访问 DataTable.Columns 集合。举个例子。
如果您有以下表结构。
CREATE TABLE table01 (
id int NOT NULL,
field1 varchar(30),
field2 timestamp);
您可以执行以下代码段
string sql = "Select * from table01";
using (var conn = new NpgsqlConnection(cs))
{
conn.Open();
using (var cmd = new NpgsqlCommand(sql, conn))
{
var reader = cmd.ExecuteReader();
int fieldCount = reader.FieldCount;
var workTable = new DataTable(DateTime.Now.ToString());
workTable.Load(reader);
for (int i = 0; i < workTable.Columns.Count; i++)
{
Console.WriteLine($"field: {workTable.Columns[i].ColumnName} is of type {workTable.Columns[i].DataType.ToString()}");
}
}
}
将输出以下内容。
field: id is of type System.Int32
field: field1 is of type System.String
field: field2 is of type System.DateTime
-HTH
推荐阅读
- javascript - 在这里,我有商店和用户的纬度和经度,我想按顺序显示商店列表
- elasticsearch - 如何在使用外部版本控制时更新 ElasticSearch 中的文档
- reactjs - 错误:将 react redux 从 5 升级到 7 后 - 浏览器控制台中的错误:在“Connect(Compo) 的上下文中找不到“store”
- python - Dnspython-如何创建 PTR dns crecord?
- python - 尝试从 python 连接 Hive 时出现错误“UnicodeError:标签太长”
- python - RE: 如何在 python 中制作流畅的动画
- node.js - 更改 cronjob 写入的路径
- flutter - Flutter 小部件在 2.0 版中不可用
- javascript - Oracle Apex 图表 - 刷新时重置缩放级别
- sharepoint - 如何从数据库中获取 Project server 2016 中的基线 X 日期?