我需要在我正在使用Xamarin.Forms开发的应用程序上使用System.Data.SqlClient
,但我无法使用此软件包。我尝试将它添加到“.Droid”项目(它似乎在PCL上不可用)但在命名空间中找不到它。我通过Visual Studio 2015中的NuGet包管理器添加了它。
我需要做in here之类的事情。我知道不推荐。我计划稍后开发一个REST API,但是现在我需要这样做才能构建应用程序的原型/ alpha版本。
编辑:如果我不能使用SqlClient,我可以在Xamarin中使用什么来打开与SQL Server的连接?
答案 0 :(得分:1)
如果您想使用System.Data.SqlClient
,则需要使用您链接到自己的帖子中提到的方法。原因很简单,因为包不是作为PCL构建的。
如果这不可行,请使用与PCL兼容的SQLite.NET
package。
答案 1 :(得分:0)
从您应用中的system.data.sqlite
下载NuGet
个套件。它将为您提供system.data
,system.data.sqlclient
和system.data.sqlLite
等程序集以及更多数据库连接。
答案 2 :(得分:-1)
SQLite是向Xamarin.Forms应用程序实现SQL数据库的推荐方法。
以下是将SQLite添加到Xamarin.Forms应用程序的演练!
将SQLite-net NuGet创建的@Frank Krueger添加到解决方案中的每个项目中;即将此NuGet包添加到您的Xamarin.Forms PCL,Android项目等
将此类添加到您的Xamarin.Forms PCL。
此数据库类将用于将数据保存到SQLite数据库并从中加载数据。
public class Database
{
#region Constant Fields
readonly static object _locker = new object();
readonly SQLiteConnection _database;
#endregion
#region Constructors
public Database()
{
_database = DependencyService.Get<ISQLite>().GetConnection();
_database.CreateTable<DataModel>();
}
#endregion
#region Methods
public async Task<IList<DataModel>> GetAllDataAsync()
{
return await Task.Run(() =>
{
lock (_locker)
{
return _database.Table<DataModel>().ToList();
}
});
}
public async Task<int> SaveDataAsync(DataModel dataModel)
{
var isDataInDatabase = (await GetAllDataAsync()).FirstOrDefault(x => x.Equals(dataModel)) != null;
return await Task.Run(() =>
{
if (isDataInDatabase)
{
lock (_locker)
{
_database.Update(dataModel);
}
return dataModel.ID;
}
lock (_locker)
{
return _database.Insert(dataModel);
}
});
}
#endregion
将此界面添加到您的Xamarin.Forms PCL。
此接口允许您使用Dependancy Service使用特定于平台的API检索数据库连接
public interface ISQLite
{
SQLiteConnection GetConnection();
}
将此课程添加到Android PCL
此ISQLite数据库的实现将使用Xamarin.Android文件夹路径检索数据库连接。
[assembly: Dependency(typeof(SQLite_Android))]
namespace SampleApp.Droid
{
public class SQLite_Android : ISQLite
{
#region ISQLite implementation
public SQLiteConnection GetConnection()
{
var sqliteFilename = "SQLiteDatabase.db3";
string documentsPath = System.Environment.GetFolderPath(System.Environment.SpecialFolder.Personal); // Documents folder
var path = Path.Combine(documentsPath, sqliteFilename);
var conn = new SQLiteConnection(path, SQLiteOpenFlags.ReadWrite | SQLiteOpenFlags.Create | SQLiteOpenFlags.SharedCache);
// Return the database connection
return conn;
}
#endregion
}
}
将Database.cs
的这个静态实现添加到Xamarin.Forms PCL的App
类中。
public class App : Application
{
static OpportunityModelDatabase _database;
...
public static OpportunityModelDatabase Database =>
_database ?? (_database = new OpportunityModelDatabase());
}
以下是如何从其他类
检索数据的示例var AllData = await App.Database.GetAllDataAsync();
以下是我创建的示例应用,演示了如何在Xamarin.Forms应用中实现SQLite。随意下载它以更好地理解如何实现SQLite! https://github.com/brminnick/InvestmentDataSampleApp