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非加密连接)。
- Android:在
- 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
相关产品推荐
相关产品推荐

