【问题标题】:Get SQL query result in Datatable using Servicestack ormlite使用Servicestack ormlite在Datatable中获取SQL查询结果
【发布时间】:2019-09-29 13:43:32
【问题描述】:

我是 Servicestack Ormlite 的新手。

我想使用 Servicestack Ormlite 对数据库执行 SQL 查询,并在数据表中获取结果。

SQL查询会随机生成,每次包含不同的表、列。所以我不能使用 poco 类。

我们使用 SQL Server 作为数据库。

【问题讨论】:

    标签: c# sql sql-server ormlite-servicestack


    【解决方案1】:

    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"));
    

    【讨论】:

      【解决方案2】:

      您可以使用 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);
              }
          }
      }
      

      【讨论】:

        猜你喜欢
        • 2012-07-16
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2014-09-22
        相关资源
        最近更新 更多