如何在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表的实体类:
然后创建DbContext类:public class Article { // 假设表的主键是Id,自增 public int Id { get; set; } public string Title { get; set; } public decimal Price { get; set; } // 其他字段根据你的表结构添加 }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
相关产品推荐
相关产品推荐

