C # передача строки параметру Sqlite - PullRequest
0 голосов
/ 25 октября 2018

Я пытаюсь передать строку (вывод функции) в запрос SqLite и заставить его обновить базу данных.Я получаю сообщение об ошибке, сообщающее, что строка не является допустимым типом данных.

  IList<string> classList = new List<string>(){ "Saber", "Archer", "Lancer", "Rider",
     "Caster", "Assassin", "Berserker", "Ruler", "Avenger", "Moon Cancer"};
    public string setClass(int uid)
    {
        string newClass;
        int remainder = uid % 10;
        newClass = classList[remainder];
        return(newClass);
    }
    [NadekoCommand, Usage, Description, Aliases]
    public async Task initialiseClasses()
    {
        using (SqliteConnection _db = new SqliteConnection(@"Filename=.\myDb.db"))
        {
            _db.Open();
            string newSQL = "ALTER TABLE DiscordUser ADD Class char";
            SqliteCommand command = new SqliteCommand(newSQL, _db);
            command.ExecuteReader();
            string tempClass = setClass(7);  //temporary input
            newSQL = "UPDATE DiscordUser SET Class = @newClass";
            command.Parameters.Add(new SqliteParameter("@newClass", SqliteType.Text).Value = tempClass);
            command = new SqliteCommand(newSQL, _db);
            command.ExecuteReader();
        }
    }

Я пытаюсь передать tempClass в запрос Sqlite.

1 Ответ

0 голосов
/ 25 октября 2018
  1. Вы создавали новую команду после того, как вы присвоили команду команде, в результате чего была выполнена команда без параметров.
  2. Add в наборе параметровможно переписать так, чтобы оно было более беглым, см. изменение ниже.
  3. ExecuteReader должно быть ExecuteNonQuery

Если вы структурируете свой код с помощью блоков using, прощесм. область действия экземпляра команды.Смотрите ниже:

public async Task initialiseClasses()
{
    using (SqliteConnection _db = new SqliteConnection(@"Filename=.\myDb.db"))
    {
        _db.Open();
        string newSQL = "ALTER TABLE DiscordUser ADD Class char";
        using(SqliteCommand command = new SqliteCommand(newSQL, _db))
        {
            command.ExecuteNonQuery();
        }

        string tempClass = setClass(7);  //temporary input
        newSQL = "UPDATE DiscordUser SET Class = @newClass";
        using(SqliteCommand command = new SqliteCommand(newSQL, _db))
        {
            command.Parameters.Add("@newClass", SqliteType.Text).Value = tempClass;
            command.ExecuteNonQuery();
        }
    }
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...