【问题标题】:how to insert a List object to sqlite?如何将 List 对象插入到 sqlite?
【发布时间】:2019-10-28 05:21:24
【问题描述】:

这是我的课程,帮助我反序列化 json 从 api 获取结果

public class STOCKS
    {
        public class RootObject  
        {

            [PrimaryKey] 

            public int sto_RECno { get; set; }
            public int sto_RECid_RECno { get; set; 
         }

      }

这是我的 json 反序列化操作。

var content = await _client.GetStringAsync("http://webapi/somewhere/");
var StockLIST= JsonConvert.DeserializeObject<List<STOCKS.RootObject>>(content);

我想将此数据插入我的 sqlite

 conn = DependencyService.Get<ISQLite>().GetConnection(); 
                    conn.CreateTable<STOCKS.RootObject>();
 conn.Insert(StockLIST);

但它失败了。

我不明白,我错在哪里。? 我的 Stocks 类包含近 90 个变量。所以我正在寻找合适的解决方案。

我应该将列表转换为数据表还是什么?

感谢您的帮助。

【问题讨论】:

  • 确认一下:您是要插入一个列表对象,还是单独插入列表中的每个项目?
  • @Sainath 。我的 STOCKS 类中有近 90 个变量。我应该把它们都一个一个写出来吗?
  • @John 我是编程新手。我想将列表对象插入到 sqlite。例如。 Mylist 包含 16 条记录。我想插入所有这些。

标签: c# sqlite xamarin


【解决方案1】:

首先,您可以使用以下方式将您的对象插入数据库。

  List<Note> StockLIST = new List<Note>();
        StockLIST.Add(new Note() {Text="bbbb",Gender="fame",Date= DateTime.UtcNow });
        StockLIST.Add(new Note() { Text = "bbbb1", Gender = "fame", Date = DateTime.UtcNow });
        StockLIST.Add(new Note() { Text = "bbbb2", Gender = "fame", Date = DateTime.UtcNow });
        StockLIST.Add(new Note() { Text = "bbbb3", Gender = "fame", Date = DateTime.UtcNow });

        foreach (var item in StockLIST)
        {
            await App.Database.SaveNoteAsync(item);
        }

当您将数据插入数据库时​​,您应该使用async/await。这是关于实现SaveNoteAsync的代码

    public Task<int> SaveNoteAsync(Note note)
    {
        if (note.ID != 0)
        {
            return _database.UpdateAsync(note);
        }
        else
        {
            return _database.InsertAsync(note);
        }
    }

当我们在xamarin 中需要sqlite 时,我们将首先连接到App.xaml 中的数据库。

  public partial class App : Application
{
    static NoteDatabase database;

    public static NoteDatabase Database
    {
        get
        {
            if (database == null)
            {
                database = new NoteDatabase(Path.Combine(Environment.GetFolderPath(Environment.SpecialFolder.LocalApplicationData), "Notes5.db3"));
            }
            return database;
        }
    }
}

这是运行截图。

这是我的demo(实现CURD)。你可以参考一下

https://github.com/851265601/MyNewDataBase

【讨论】:

  • @Fk Bey 这个问题有更新吗,如果回复有帮助,请不要忘记标记为答案(点击右上角✔),它会帮助其他有类似的人问题。
  • 我用 foreach 循环 ( John ) 解决了处理每个列表项的问题,@Leon Lu 感谢您的代码。效果很好。
【解决方案2】:

我不是 SQLite 人,但假设 conn.Insert(...) 适用于单个项目,那么您只需遍历列表中的每个项目并插入它:

foreach (var StockItem in StockLIST)
{
    conn.Insert(StockItem);
}

【讨论】:

  • 谢谢。它非常有效。我慢慢地慢慢明白了。有没有办法学习如何使用这些课程? @约翰
  • conn.InsertAll(StockLIST);这段代码在没有 foreach 循环的情况下也能很好地工作。
猜你喜欢
  • 2012-08-22
  • 2018-08-27
  • 2013-01-19
  • 2020-07-16
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2022-07-21
相关资源
最近更新 更多