моя проблема в том, что две две нежелательные одиночные кавычки появляются в моей команде, когда я использую AddWithValue. Это, как я называю свою функцию:C# MySqlCommand.Parameters.AddWithValue, параметры для выражения таблицы, приведенная команда имеют добавленную одинарную цитату
string sqlTableName = "the_table_i_want";
DataTable myDataTable = SQLcom.SelectLastValueInTab(sqlTableName);
My Function;
public static DataTable SelectLastValueInTab(string TableName)
{
using (MySqlConnection con = new MySqlConnection(ConnStr))
{
using (MySqlCommand myCommand = new MySqlCommand("SELECT * FROM @TabName ORDER BY id DESC LIMIT 1", con))
{
myCommand.Parameters.AddWithValue("@TabName", TableName);
try
{
con.Open();
MySqlDataReader testreader = myCommand.ExecuteReader();
Приведенное команда:
"SELECT * FROM 'the_table_i_want' ORDER BY id DESC LIMIT 1"
И предполагают, чтобы быть:
"SELECT * FROM the_table_i_want ORDER BY id DESC LIMIT 1"
Это заставит программу врезаться обусловленно у меня есть:
a syntax error near ''the_table_i_want' ORDER BY id DESC LIMIT 1'
PS : если я не использую AddWithValuechange и изменения
@TabName for the_table_i_want
в MySqlCommand он отлично работает!
Большое спасибо!
Daniel G.B
Вы не можете использовать параметры для выражения имени таблицы или поля. Вы можете использовать их только для значений. – Steve
Подготовленные утверждения не предназначены для использования таким образом. Метод 'AddWithValue' видит, что это строка и цитирует ее для вас. Если 'TableName' не является пользователем, просто соедините его с вашим запросом, но окружите его квадратными скобками:' 'SELECT * FROM [" + TableName + "] ..." 'или какая бы система ваша RDBMS не использовала (backticks?). Вы также хотите иметь допустимый список имен таблиц, перечисленных где-то. Если 'TableName' не находится в этом списке, не выполняйте запрос. Это должно защитить вас от SQL-инъекции. –
@Steve благодарит много, что было именно моей проблемой! Но спецификация этого в спецификации [определение метода?] Отсутствует (https://msdn.microsoft.com/en-us/library/system.data.sqlclient.sqlparametercollection.addwithvalue (v = vs.110) .aspx) –