Почему я не могу использовать SQLite Command Builder здесь? - PullRequest
0 голосов
/ 07 ноября 2019

Когда я пытаюсь нажать Button1 после внесения изменений, я получаю эту ошибку:

System.InvalidOperationException: 'Динамическое генерирование SQL не поддерживается для нескольких базовых таблиц.'

Теперь, ошибка имеет смысл, поэтому я погуглил ее, и придумал этот Вопрос / Ответ . Я попытался выполнить рефакторинг моего исходного SQL-запроса:

SELECT T.TournamentName 'Tournament Name', R1.CharacterName Champion, R2.CharacterName 'Runner Up'
FROM SmashTournaments T 
INNER JOIN SmashRoster R1 
ON T.Champion = R1.SmashRosterID 
INNER JOIN SmashRoster R2 
ON T.RunnerUp = R2.SmashRosterID

На это, как и на другие вопросы, ответили:

SELECT DISTINCT T.TournamentName 'Tournament Name', (SELECT R1.CharacterName 
                                                     FROM SmashRoster R1
                                                     WHERE T.Champion = R1.SmashRosterID) 'Champion', 
                                                    (SELECT R2.CharacterName 
                                                     FROM SmashRoster R2
                                                     WHERE T.RunnerUp = R2.SmashRosterID) 'Runner Up'
FROM SmashTournaments T 
INNER JOIN SmashRoster R1 
ON T.Champion = R1.SmashRosterID 
INNER JOIN SmashRoster R2 
ON T.RunnerUp = R2.SmashRosterID

РЕДАКТИРОВАТЬ: Этот запрос тоже не работает, та же ошибка:

SELECT DISTINCT T.TournamentName 'Tournament Name', (SELECT R1.CharacterName 
                                                     FROM SmashRoster R1
                                                     WHERE T.Champion = R1.SmashRosterID) 'Champion', 
                                                    (SELECT R2.CharacterName 
                                                     FROM SmashRoster R2
                                                     WHERE T.RunnerUp = R2.SmashRosterID) 'RunnerUp'
FROM SmashTournaments T 

Но я все еще получаю сообщение об ошибке при запуске этого кода:

public partial class SmashTournaments : Form
{
  public SmashTournaments()
  {
     InitializeComponent();
  }
  SQLiteConnection cnn;
  SQLiteDataAdapter adapter;
  DataSet dataSetx;
  SQLiteCommandBuilder builder;

  private void SmashTournaments_Activated(object sender, EventArgs e)
  {
   LoadSmashTournaments();
  }

  public void LoadSmashTournaments()
  {
   cnn = new SQLiteConnection(@"Data Source=C:\SQLiteDB\SQLiteDB.db;Version=3;");
   adapter = new SQLiteDataAdapter(
      @"SELECT DISTINCT T.TournamentName 'Tournament Name', (SELECT R1.CharacterName 
                                                             FROM SmashRoster R1
                                                             WHERE T.Champion = R1.SmashRosterID) 'Champion', 
                                                            (SELECT R2.CharacterName 
                                                             FROM SmashRoster R2
                                                             WHERE T.RunnerUp = R2.SmashRosterID) 'RunnerUp'
        FROM SmashTournaments T 
        INNER JOIN SmashRoster R1 
        ON T.Champion = R1.SmashRosterID 
        INNER JOIN SmashRoster R2 
        ON T.RunnerUp = R2.SmashRosterID", cnn);

   dataSetx = new DataSet();
   cnn.Open();
   adapter.Fill(dataSetx);
   tournamentsGridView.DataSource = dataSetx.Tables[0];
  }

  private void button1_Click(object sender, EventArgs e)
  {
   builder = new SQLiteCommandBuilder(adapter);
   adapter.Update(dataSetx); //error thrown here
   LoadSmashTournaments();
  }
}

Итак, решение для других ответов просто не работает? Если нет, то как мне поступить так?

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...