为什么我有错误“'SQLiteCommand' 不包含 'Parameters' 的定义”?
Why I have error " 'SQLiteCommand' does not contain a definition for 'Parameters' "?
我正在尝试编写如下所示的函数以将记录插入到我的数据库中的 table。我正在为此使用 SQLite。我在这 3 行中遇到问题:
insertSQL.Parameters.Add(newUser.Username);
insertSQL.Parameters.Add(newUser.Password);
insertSQL.Parameters.Add(newUser.Email);
错误内容:
Error CS1061 'SQLiteCommand' does not contain a definition for >'Parameters' and no accessible extension method 'Parameters' accepting a >first argument of type 'SQLiteCommand' could be found (are you missing a >using directive or an assembly reference?)
我有像"using SQLite; using static 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);
}
我不知道问题出在哪里。也许这种方式已经过时或完全错误?
看来是因为您使用的是 SQLite 的 ORM 版本,而那些 类 来自 ADO 版本。如果您需要 ORM 版本,可能还有其他方法可以实现。例如,参见 :
您可能需要考虑使用 SQLite 的 ADO 版本,它支持您引用的那些 类。这是您要实现的目标的示例(请注意 "using" 与您的不同)。:
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")
希望对您有所帮助!
我正在尝试编写如下所示的函数以将记录插入到我的数据库中的 table。我正在为此使用 SQLite。我在这 3 行中遇到问题:
insertSQL.Parameters.Add(newUser.Username);
insertSQL.Parameters.Add(newUser.Password);
insertSQL.Parameters.Add(newUser.Email);
错误内容:
Error CS1061 'SQLiteCommand' does not contain a definition for >'Parameters' and no accessible extension method 'Parameters' accepting a >first argument of type 'SQLiteCommand' could be found (are you missing a >using directive or an assembly reference?)
我有像"using SQLite; using static 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);
}
我不知道问题出在哪里。也许这种方式已经过时或完全错误?
看来是因为您使用的是 SQLite 的 ORM 版本,而那些 类 来自 ADO 版本。如果您需要 ORM 版本,可能还有其他方法可以实现。例如,参见
您可能需要考虑使用 SQLite 的 ADO 版本,它支持您引用的那些 类。这是您要实现的目标的示例(请注意 "using" 与您的不同)。:
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")
希望对您有所帮助!