【发布时间】:2019-09-29 13:43:32
【问题描述】:
我是 Servicestack Ormlite 的新手。
我想使用 Servicestack Ormlite 对数据库执行 SQL 查询,并在数据表中获取结果。
SQL查询会随机生成,每次包含不同的表、列。所以我不能使用 poco 类。
我们使用 SQL Server 作为数据库。
【问题讨论】:
标签: c# sql sql-server ormlite-servicestack
我是 Servicestack Ormlite 的新手。
我想使用 Servicestack Ormlite 对数据库执行 SQL 查询,并在数据表中获取结果。
SQL查询会随机生成,每次包含不同的表、列。所以我不能使用 poco 类。
我们使用 SQL Server 作为数据库。
【问题讨论】:
标签: c# sql sql-server ormlite-servicestack
OrmLite 不支持也不依赖于 DataTables 或 DataSets,作为代码优先的 POCO ORM 严格反对使用。
请参阅Dynamic Result Set docs 以获取在对象列表中查询无类型结构的示例:
db.Select<List<object>>(db.From<Poco>()
.Select("COUNT(*), MIN(Id), MAX(Id)"));
或字典:
db.Select<Dictionary<string,object>>(db.From<Poco>()
.Select("COUNT(*) Total, MIN(Id) MinId, MAX(Id) MaxId"));
【讨论】:
您可以使用 CreateCommand 方法获取数据读取器,如下所示:
var dt = new DataTable();
using (var db = dbFactory.Open())
using (var cmd = db.CreateCommand())
{
cmd.CommandText = "select * from [table]";
cmd.CommandType = CommandType.Text;
using (var reader = cmd.ExecuteReader())
{
while (reader.Read())
{
var row = dt.NewRow();
for (int i = 0; i < reader.FieldCount; i++)
{
if (dt.Columns == null || dt.Columns.Count == 0)
{
for (int j = 0; j < reader.FieldCount; j++)
{
dt.Columns.Add(reader.GetName(j), reader.GetFieldType(j));
}
}
var cell = reader.GetValue(i);
row[i] = cell;
}
dt.Rows.Add(row);
}
}
}
【讨论】: