c# - 是否可以从 Sqlite 查询返回动态对象或数据集?

标签 c# sqlite xamarin sqlite.net

我正在使用 Sqlite.Net在我的 Xamarin.Forms 应用程序中。到目前为止,如果我的对象是这样的类,它在返回对象列表方面做得很好:

SqliteDatabase.Connection.Query<Customer>("Select * from Customers");

我现在想从我的查询中动态返回一个 DataSet 的等价物

SqliteDatabase.Connection.Query("Select * from Customers inner join Calls on Customers.Id=Calls.CustomerId")

现在我想从第二个查询返回一个 DataSet 而不是一个对象列表。我知道我可以创建一个新对象,它结合了 CustomersCalls 列,但我不想每次查询数据库时都必须创建对象。

是否可以动态返回一个DatasetObject

最佳答案

最后,我实际上想出了一个方法,该方法将运行任何查询并将行作为列表中的项目返回,而列作为数组中的对象返回:

    public List<object[]> RunSql(string sqlString, bool includeColumnNamesAsFirstRow)
    {
        var lstRes = new List<object[]>();
        SQLitePCL.sqlite3_stmt stQuery = null;
        try
        {
            stQuery = SQLite3.Prepare2(fieldStrikeDatabase.Connection.Handle, sqlString);
            var colLenght = SQLite3.ColumnCount(stQuery);

            if (includeColumnNamesAsFirstRow)
            {
                var obj = new object[colLenght];
                lstRes.Add(obj);
                for (int i = 0; i < colLenght; i++)
                {
                    obj[i] = SQLite3.ColumnName(stQuery, i);
                }
            }

            while (SQLite3.Step(stQuery) == SQLite3.Result.Row)
            {
                var obj = new object[colLenght];
                lstRes.Add(obj);
                for (int i = 0; i < colLenght; i++)
                {
                     var columnType = SQLitePCL.raw.sqlite3_column_decltype(stQuery, i);

                     switch (columnType)
                     {
                         case "text":
                              obj[i] = SQLite3.ColumnString(stQuery, i);
                              break;
                         case "int":
                               obj[i] = SQLite3.ColumnInt(stQuery, i);
                               break;
                         case "real":
                               obj[i] = SQLite3.ColumnDouble(stQuery, i);
                               break;
                         case "blob":
                               obj[i] = SQLite3.ColumnBlob(stQuery, i);
                               break;
                         case "null":
                               obj[i] = null;
                               break;
                      }
                }
            }
            return lstRes;
        }
        catch (Exception)
        {
            return null;
        }
        finally
        {
            if (stQuery != null)
            {
                SQLite3.Finalize(stQuery); 
            }
        }
    }

关于c# - 是否可以从 Sqlite 查询返回动态对象或数据集?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/39106298/

相关文章:

c# - 制作基本的奔跑 Sprite 效果

sql - 轨道 3.1 : Sqlite exception

sql - 在sql中查找对

android.database.sqlite.SQLiteCantOpenDatabaseException : unknown error (code 14): Could not open database trouble

c# - 如何在文本属性中放置不同的文本格式和超链接

c# - 添加到 ObservableCollection - 对象引用错误

c# - asp.net 从 mysql 为用户/ session 分配角色

c# - 将 YYYYMMDD 字符串转换为 MM/DD/YYYY 字符串

c# - 从特定索引中删除字符串中的字符

xamarin.ios - Xamarin.iOS 上的 MEF 支持