Когда я пытаюсь нажать 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();
}
}
Итак, решение для других ответов просто не работает? Если нет, то как мне поступить так?