【问题标题】:Why I have error " 'SQLiteCommand' does not contain a definition for 'Parameters' "?为什么我有错误“'SQLiteCommand'不包含'Parameters'的定义”?
【发布时间】:2019-06-06 21:58:25
【问题描述】:

我正在尝试编写如下这样的函数来将记录插入到我数据库中的表中。我为此使用 SQLite。我在这 3 行有问题:

 insertSQL.Parameters.Add(newUser.Username);
 insertSQL.Parameters.Add(newUser.Password);            
 insertSQL.Parameters.Add(newUser.Email);

错误内容:

错误 CS1061 'SQLiteCommand' 不包含 >'Parameters' 的定义,并且找不到接受“SQLiteCommand”类型的 >first 参数的可访问扩展方法“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);
        }

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

【问题讨论】:

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


【解决方案1】:

这似乎是因为您使用的是 SQLite 的 ORM 版本,而这些类来自 ADO 版本。如果您需要 ORM 版本,可能还有其他方法可以实现此目的。举个例子,见Xamarin Android C# SQLite Parameter Query

您可能需要考虑使用 SQLite 的 ADO 版本,它支持您引用的那些类。这是您要实现的目标的示例(请注意,“使用”与您的不同)。:

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”)

希望这会有所帮助!

【讨论】:

  • 关于ADO/ORM的资料真的很有帮助!代码示例不多,但我检查了 ADO/ORM 差异并自行解决。非常感谢!
  • 不客气,很高兴它有帮助。希望其他看到这篇文章的人也觉得它有帮助。顺便说一句,欢迎来到 StackOverflow!
猜你喜欢
  • 2020-12-31
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2019-09-16
  • 2021-08-12
  • 2018-12-25
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多