Почему у меня ошибка «SQLiteCommand» не содержит определения «Параметры»? - PullRequest
1 голос
/ 07 июня 2019

Я пытаюсь написать функцию, подобную этой ниже, чтобы вставить записи в таблицу в моей базе данных.Я использую SQLite для этого.У меня проблема в следующих 3 строках:

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

Содержание ошибок:

Ошибка CS1061 «SQLiteCommand» не содержит определения для> «Параметры» и недоступнаМожно найти метод расширения «Параметры», принимающий> первый аргумент типа «SQLiteCommand» (отсутствует директива> using или ссылка на сборку?)

У меня есть такие же слова, как «используя SQLite; используястатический SQLite.SQLiteCommand; "Документы Microsoft и многие руководства включают свойство «Параметры» и аналогичный код.

     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 голосов
/ 07 июня 2019

Похоже, это потому, что вы используете ORM-версию SQLite, а эти классы относятся к версии ADO. Если вам требуется версия ORM, для этого могут быть другие способы. В качестве примера см. Запрос параметров Xamarin Android C # SQLite :

Вы можете рассмотреть возможность использования версии 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»)

Надеюсь, это поможет!

...