You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何在Xamarin.Android中引用已创建的MobileSell.db SQLite数据库?

嘿,我来一步步帮你搞定这个问题!你已经把MobileSell.db放到项目根目录了,接下来分两种常用的方式来引用它并执行类似插入的操作:

方式一:用原生SQLite连接(适合直接写SQL语句)

这种方式适合你想直接控制SQL逻辑的场景,步骤如下:

  • 第一步:安装必要的NuGet包
    打开Visual Studio的NuGet包管理器(右键项目 -> 管理NuGet程序包),搜索并安装System.Data.SQLite.Core;或者在Package Manager Console里执行命令:
    Install-Package System.Data.SQLite.Core
    
  • 第二步:设置数据库文件的输出属性
    这一步很关键!右键项目里的MobileSell.db文件 -> 属性 -> 在“复制到输出目录”选项里选择**“如果较新则复制”**(或者“始终复制”)。这样编译后数据库文件会被复制到程序运行的目录,避免运行时找不到文件。
  • 第三步:编写连接和插入代码
    先获取数据库的正确路径(不要硬编码绝对路径,不然换环境就失效了),然后创建连接、执行插入操作。比如对应你说的connection.InsertIntoTableArticles(value),可以这么写:
    using System.Data.SQLite;
    using System.IO;
    using System;
    
    // 获取数据库文件的路径:程序运行的根目录 + 数据库名
    string dbPath = Path.Combine(AppDomain.CurrentDomain.BaseDirectory, "MobileSell.db");
    
    // 创建连接
    using (SQLiteConnection connection = new SQLiteConnection($"Data Source={dbPath};Version=3;"))
    {
        connection.Open();
    
        // 假设你的TableArticles有Id、Title、Price字段,value是对应的实体
        string insertSql = "INSERT INTO TableArticles (Title, Price) VALUES (@Title, @Price)";
        using (SQLiteCommand command = new SQLiteCommand(insertSql, connection))
        {
            // 参数化查询,防止SQL注入
            command.Parameters.AddWithValue("@Title", value.Title);
            command.Parameters.AddWithValue("@Price", value.Price);
    
            // 执行插入
            int rowsAffected = command.ExecuteNonQuery();
            Console.WriteLine($"成功插入{rowsAffected}条数据");
        }
    }
    
方式二:用Entity Framework Core(ORM方式,更简洁)

如果你不想写原生SQL,用EF Core的ORM会更省心,代码更简洁:

  • 第一步:安装NuGet包
    同样在NuGet包管理器里搜索安装Microsoft.EntityFrameworkCore.Sqlite;或者Package Manager Console执行:
    Install-Package Microsoft.EntityFrameworkCore.Sqlite
    
  • 第二步:同样设置数据库文件的输出属性
    和方式一的第二步一样,确保文件能复制到输出目录。
  • 第三步:创建实体类和DbContext
    先创建对应TableArticles表的实体类:
    public class Article
    {
        // 假设表的主键是Id,自增
        public int Id { get; set; }
        public string Title { get; set; }
        public decimal Price { get; set; }
        // 其他字段根据你的表结构添加
    }
    
    然后创建DbContext类:
    using Microsoft.EntityFrameworkCore;
    using System.IO;
    using System;
    
    public class MobileSellDbContext : DbContext
    {
        public DbSet<Article> TableArticles { get; set; }
    
        protected override void OnConfiguring(DbContextOptionsBuilder optionsBuilder)
        {
            // 设置连接字符串,同样用相对路径
            string dbPath = Path.Combine(AppDomain.CurrentDomain.BaseDirectory, "MobileSell.db");
            optionsBuilder.UseSqlite($"Data Source={dbPath}");
        }
    }
    
  • 第四步:执行插入操作
    这时候就可以像你伪代码那样简洁地插入数据了:
    using (var context = new MobileSellDbContext())
    {
        // 假设value是你要插入的Article对象
        context.TableArticles.Add(value);
        context.SaveChanges(); // 这一步会自动生成并执行插入SQL
        Console.WriteLine("数据插入成功");
    }
    
小提醒
  • 不要直接用绝对路径,比如C:\xxx\MobileSell.db,不然换机器或者发布后会找不到文件;
  • 用参数化查询(方式一里的@Title、@Price)或者EF Core的Add方法,都能避免SQL注入问题;
  • 如果你的数据库表结构比较复杂,EF Core还能帮你自动处理关联、查询等操作,比原生SQL更高效。

内容的提问来源于stack exchange,提问作者Profile2ForStack

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.15 07:57:11