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

如何在.NET MAUI中连接SQL Server并实现CRUD操作(安卓适配)

.NET MAUI 连接本地SQL Server(安卓模拟器)及CRUD实现指南

一、直接连接失效的原因

  • 安卓模拟器的localhost指向自身虚拟机,而非你的PC主机,无法直接访问本地SQL Server
  • 本地SQL Server默认仅允许本地连接,未开启远程访问权限
  • 移动端硬编码数据库连接字符串存在严重安全风险(易被反编译获取,导致数据泄露)

二、直接连接的测试配置(不推荐用于生产)

1. 开启SQL Server远程访问

  • 打开SQL Server配置管理器 → SQL Server网络配置 → 启用TCP/IP协议
  • 编辑TCP/IP属性:在IP地址列表中,设置IPAll的TCP端口为1433,启用所有IP地址
  • 重启SQL Server服务
  • 在Windows防火墙中添加入站规则,允许1433端口的TCP连接

2. 修改MAUI连接字符串

替换localhost为模拟器对应的主机IP:

  • Android Studio模拟器用10.0.2.2
  • Genymotion模拟器用10.0.3.2

示例连接字符串:

var connString = "Server=10.0.2.2,1433;Database=YourDBName;User Id=YourUsername;Password=YourPassword;TrustServerCertificate=True;";

注:TrustServerCertificate=True仅用于测试,生产环境需配置合法SSL证书

3. 安卓平台权限配置

在Platforms/Android/AndroidManifest.xml中添加网络权限:

<uses-permission android:name="android.permission.INTERNET" />

三、生产环境推荐:ASP.NET Core API中间层

直接连接数据库在移动端弊端太多,通过API作为中间层是行业标准方案,优势包括:

  • 隐藏数据库连接信息,避免安全泄露
  • 可实现权限控制、数据缓存、请求限流等功能
  • 更稳定的网络交互(API可处理重试、超时等逻辑)

1. 快速搭建API

  • 创建ASP.NET Core Web API项目
  • 添加Microsoft.EntityFrameworkCore.SqlServer包,用EF Core实现数据库操作(或直接用ADO.NET)
  • 配置DbContext:
    public class AppDbContext : DbContext
    {
        public AppDbContext(DbContextOptions<AppDbContext> options) : base(options) { }
        public DbSet<Product> Products { get; set; } // 替换为你的实体类
    }
    
  • 在Program.cs中注册DbContext:
    builder.Services.AddDbContext<AppDbContext>(opt =>
        opt.UseSqlServer(builder.Configuration.GetConnectionString("DefaultConnection")));
    
  • 编写CRUD控制器示例:
    [ApiController]
    [Route("api/products")]
    public class ProductsController : ControllerBase
    {
        private readonly AppDbContext _db;
        public ProductsController(AppDbContext db) => _db = db;
    
        [HttpGet]
        public async Task<IActionResult> GetAll() => Ok(await _db.Products.ToListAsync());
    
        [HttpPost]
        public async Task<IActionResult> Create(Product product)
        {
            _db.Products.Add(product);
            await _db.SaveChangesAsync();
            return CreatedAtAction(nameof(GetById), new { id = product.Id }, product);
        }
    
        // 补充GetById、Put、Delete接口
    }
    

2. MAUI中调用API

用HttpClient发起请求,示例:

private readonly HttpClient _httpClient;

public MainPage()
{
    InitializeComponent();
    _httpClient = new HttpClient { BaseAddress = new Uri("http://10.0.2.2:5123/") }; // 替换为你的API地址
}

private async Task LoadProducts()
{
    var products = await _httpClient.GetFromJsonAsync<List<Product>>("api/products");
    // 将数据绑定到CollectionView或其他UI控件
}

注:API需开启跨域支持,在Program.cs中添加:

builder.Services.AddCors(opt => opt.AddPolicy("AllowAll", policy =>
    policy.AllowAnyOrigin().AllowAnyMethod().AllowAnyHeader()));
app.UseCors("AllowAll");

四、总结

  • 直接连接仅适合本地快速测试,生产环境务必使用API中间层
  • API方案更安全、易维护,且能适配更多扩展需求

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.22 04:00:36