为什么出现错误“'SQLiteCommand'不包含'Parameters'的定义”?

时间:2019-06-06 21:58:25

标签: c# sqlite xamarin android-sqlite sqlite-net

我正在尝试编写以下函数,将记录插入到数据库中的表中。我为此使用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);
        }

我不知道问题出在哪里。也许这种方式已经过时或完全错误?

1 个答案:

答案 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>

希望这会有所帮助!