@DeboshiR
Свободу разработчикам!!!

Как исправить ошибку «No connection associated with this command»?

SQLiteConnection connect = new SQLiteConnection("Data Source=base.db;");
connect.Open();
SQLiteCommand command = new SQLiteCommand(@"UPDATE voices SET pass = '" + pass + 
      "', hash = '" + hash + 
      "' WHERE id = '" + id + "'");
command.ExecuteNonQuery();
connect.Close();

Собственно не выполняется обновление записи в таблице - завершается с ошибкой "No connection associated with this command" в 6 строке.
В чём может заключаться проблема?
  • Вопрос задан
  • 911 просмотров
Решения вопроса 1
@d-stream
Готовые решения - не подаю, но...
Ну так логично. Соединение само по-себе, команда - сама по себе.

Если просто посмотреть на описание SqlCommand (архитектура для SQLite - такая же) https://msdn.microsoft.com/ru-ru/library/system.da...

то там можно увидеть следующее:

using (SqlConnection conn = new SqlConnection(connectionString)) {
            using (SqlCommand cmd = new SqlCommand(commandText, conn)) {
               // There're three command types: StoredProcedure, Text, TableDirect. The TableDirect 
               // type is only for OLE DB.  
               cmd.CommandType = commandType;
               cmd.Parameters.AddRange(parameters);

               conn.Open();
               return cmd.ExecuteNonQuery();
            }
         }


Команда конструируется с отсылкой на соединение, которым и будет пользоваться.

Ровно такой же пример приводится и в описании SQLiteCommand
https://www.devart.com/dotconnect/SQLite/docs/Deva...

public void ReadMyData(string myConnString)
{
  string mySelectQuery = "SELECT DeptNo, DName FROM Dept";
  SQLiteConnection sqConnection = new SQLiteConnection(myConnString);
  SQLiteCommand sqCommand = new SQLiteCommand(mySelectQuery,sqConnection); // команда конструируется с указанием соединения!!!
  sqConnection.Open();
  SQLiteDataReader sqReader = sqCommand.ExecuteReader();
  try
  {
    while (sqReader.Read())
    {
      Console.WriteLine(sqReader.GetInt32(0).ToString() + ", " + sqReader.GetString(1));
    }
  }
  finally
  {
  // always call Close when done reading.
  sqReader.Close();
  // always call Close when done reading.
  sqConnection.Close();
  }
}


В общем ответ на вопрос "как исправить" один - понять суть.
Ответ написан
Пригласить эксперта
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы