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

Xamarin.Forms连接SQL Server遇SQLite.Interop.dll缺失异常求助

问题根源:用错了数据库连接库!

你遇到的System.DllNotFoundException: SQLite.Interop.dll异常,核心原因是**System.Data.SQLite是专门用于连接SQLite本地文件数据库的库,而你要连接的是SQL Server数据库**——这完全是两个不同的数据库系统,用错库自然会找不到对应的本地依赖文件(SQLite.Interop.dll是SQLite的本地交互库,Xamarin.Forms跨平台环境下本来就不适合用这个库)。

解决步骤

1. 替换正确的SQL Server连接库

在Xamarin.Forms项目中,你需要使用System.Data.SqlClient(或最新的Microsoft.Data.SqlClient)来连接SQL Server:

  • 打开NuGet包管理器,搜索并安装System.Data.SqlClient(选择支持Xamarin的版本)。
  • 移除项目中已安装的System.Data.SQLite相关包,避免依赖冲突。

2. 修改代码中的连接对象

把所有SQLite相关的类替换为SqlClient对应的类,修改后的代码如下:

using SimpleDb.Models;
using System;
using System.Collections.ObjectModel;
// 替换为SQL Server对应的命名空间
using System.Data.SqlClient;
using Xamarin.Forms;

namespace SimpleDb {
    public partial class MainPage : ContentPage {
        ObservableCollection<User> usersCollection = new ObservableCollection<User>();
        private string connString;

        public MainPage() {
            InitializeComponent();
            // 注意:移动平台无法使用Windows集成身份验证,建议改用SQL Server账号密码
            connString = @"Data Source=TOM-PC\SQLEXPRESS;Initial Catalog=TracksDatabase;User ID=你的SQL账号;Password=你的密码;Connect Timeout=30;Encrypt=False;TrustServerCertificate=False;ApplicationIntent=ReadWrite;MultiSubnetFailover=False";
            usersView.ItemsSource = usersCollection;
        }

        private void Button_OnClicked(object sender, EventArgs e) {
            // 替换为SqlConnection
            using (SqlConnection conn = new SqlConnection(connString)) {
                conn.Open();
                string select = "SELECT Username,Password FROM Users";
                // 替换为SqlCommand
                using (SqlCommand cmd = new SqlCommand(select, conn)) {
                    // 替换为SqlDataReader
                    using(SqlDataReader rd = cmd.ExecuteReader()) {
                        while (rd.Read()) {
                            usersCollection.Add(new User() { 
                                Username = rd.GetString(0), 
                                Password = rd.GetString(1) 
                            });
                        }
                    }
                }
            }
        }
    }
}

3. 处理移动平台的额外配置

  • 网络权限:确保Android/iOS项目配置了访问网络的权限:
    • Android:在AndroidManifest.xml中添加<uses-permission android:name="android.permission.INTERNET" />
    • iOS:在Info.plist中添加NSAppTransportSecurity配置,允许访问非HTTPS的SQL Server地址(SQL Server默认用TCP/IP非加密连接)。
  • SQL Server网络配置:确保你的SQL Server开启了TCP/IP协议,允许远程连接,并且防火墙开放了1433端口(SQL Server默认端口)。
  • 身份验证问题:移动设备无法使用Windows集成身份验证(Integrated Security=True),因为设备运行的不是Windows域环境,必须改用SQL Server身份验证,创建一个具有数据库访问权限的账号,在连接字符串中指定User ID和Password。

4. 关于平台架构的说明

你之前切换Any CPU/x86/x64没用,是因为这个异常根本不是架构问题导致的——你用错了库,所以不管怎么切换架构,都会找不到SQLite的本地依赖。解决库的问题后,这个异常会自动消失。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.12 04:40:51