我正在尝试编写以下函数,将记录插入到数据库中的表中。我为此使用SQLite。我在这3行中有问题:
insertSQL.Parameters.Add(newUser.Username);
insertSQL.Parameters.Add(newUser.Password);
insertSQL.Parameters.Add(newUser.Email);
错误CS1061'SQLiteCommand'不包含>'Parameters'的定义,并且无法找到接受类型为'SQLiteCommand'的第一个参数的可访问扩展方法'Parameters'(是否缺少> using指令或程序集参考?)
我有类似“使用SQLite;使用静态SQLite.SQLiteCommand;”的用法。 Microsoft文档和许多指南都包括属性“ Parameters”和类似的代码。
public static SQLiteConnection non_async_db;
public void AddUser(User newUser, string login, string password, string email)
{
SQLiteCommand insertSQL = new SQLiteCommand(non_async_db);
insertSQL.CommandText = "INSERT INTO User(Username, Password, Email) VALUES(" + login + ", " + password + ", " + email + ")";
insertSQL.Parameters.Add(newUser.Username);
insertSQL.Parameters.Add(newUser.Password);
insertSQL.Parameters.Add(newUser.Email);
}
我不知道问题出在哪里。也许这种方式已经过时或完全错误?
答案 0 :(得分:0)
似乎是因为您使用的是SQLite的ORM版本,而这些类来自ADO版本。如果您需要ORM版本,则可能有其他方法可以实现此目的。例如,请参见Xamarin Android C# SQLite Parameter Query:
您可能要考虑使用ADO版本的SQLite,它支持您引用的那些类。这是您要实现的目标的示例(请注意,“使用”与您的“使用”不同)。
using System.Data;
using Mono.Data.Sqlite; // Requires reference to: C:\Program Files (x86)\Reference Assemblies\Microsoft\Framework\MonoAndroid\v1.0\Mono.Data.Sqlite.dll
//...
var cmd = new SqliteCommand(Conn) {
CommandText = "INSERT INTO MyTable (Setting, Value) VALUES (@SETTING, @VALUE)",
CommandType = CommandType.Text
};
cmd.Parameters.Add(new SqliteParameter("@SETTING", "My Setting"));
cmd.Parameters.Add(new SqliteParameter("@VALUE", "My Value"));
var nRowsProcessed = cmd.ExecuteNonQuery();
Log.Info("MyApp", $"Rows Processed: {nRowsProcessed}");
顺便说一句,您可以在示例中区分ORM与ADO的一种方式是,ORM类通常在类型名称中使用大写的“ SQ”,而ADO使用“ Sq”(例如,“ SQLiteConnection”与“ SqLiteConnection”)< / p>
希望这会有所帮助!