したがって、SQLコマンド文字列に@whateverが含まれていると、致命的なエラー(コマンドの実行中に発生した致命的なエラー)が発生しますが、MySQLクエリブラウザで同じクエリを実行した場合は発生しません。
これは、テーブル内のすべてのJohnに行番号を付けて、datagridviewに表示する簡単な例です。
private void button1_Click(object sender, EventArgs e)
{
_dataTable.Clear();
try
{
_conn = new MySqlConnection(Cs);
_conn.Open();
string name = "john";
//This is the string that gives me an error
string ConnString = "SELECT name,lastname,(@Row := @Row + 1) AS RowNumber FROM person JOIN (SELECT @Row := 0) r WHERE name = '"+name+"'";
//This one doesn't gives an error
//string ConnString = "SELECT name,lastname FROM person WHERE name = '" + name + "'";
_cmd = new MySqlCommand
{
Connection = _conn,
CommandText = ConnString
};
_cmd.ExecuteNonQuery();
_da = new MySqlDataAdapter(_cmd);
_da.Fill(_dataTable);
_cb = new MySqlCommandBuilder(_da);
dataGridView1.DataSource = _dataTable;
dataGridView1.DataMember = _dataTable.TableName;
dataGridView1.AutoResizeColumns();
_conn.Close();
}
catch (Exception ex)
{
MessageBox.Show(ex.Message);
}
finally
{
if (_conn != null) _conn.Close();
}
}
なぜこれが起こっているのですか、どうすればこれを修正できますか?私はこれについて多くの質問を見てきましたが、それに対する具体的な答えではありません。