通过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#还是陌生的,我认为也许有可能使数据类型更精确。
答案 0 :(得分:0)
如果需要标识数据表的列的数据类型。您可以访问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