У меня есть 2 места, где мне нужно использовать SQLParameter
для разбора SQL. Один работает, а другой нет, и я не могу понять, почему второй не работает.SQLParameter неверный синтаксис
Первое, что работает следующая:
SqlCommand getShopDbNameCommand = new SqlCommand("SELECT TOP 1 [mappeddbName] FROM [ECM].[dbo].[EcmShop]" +
"WHERE [LicencePassCode] = @licCode AND [iPadLocation] = @shopId", this.mainConnection);
getShopDbNameCommand.Parameters.Add(new SqlParameter("licCode", currUser.LicCode));
getShopDbNameCommand.Parameters.Add(new SqlParameter("shopId", currUser.ShopID));
Это работает. Кроме того, большинство обучающих программ, которые я прочитал, все говорят, что мне не нужно иметь @
перед именем параметра внутри new SqlParameter
, только внутри текста команды мне нужен @
спереди имени параметра.
Вторая команда, которую я пытаюсь запустить следующий:
string getAuthCommandText = "SELECT * FROM [" + shopDbName + "].[dbo].[MessageLink]" +
"WHERE [objectname] LIKE %" + "@compareStringA"+ "% OR [objectname] LIKE %" + "@compareStringB" +"%";
SqlCommand getAuthCommand = new SqlCommand(getAuthCommandText, this.mainConnection);
getAuthCommand.Parameters.Add(new SqlParameter("compareStringA", "ABRAUTH"));
getAuthCommand.Parameters.Add(new SqlParameter("compareStringB", "ABRSAUTH"));
Это не работает и выдает неверную ошибку синтаксиса. Использование точек останова по-прежнему выглядит так, как будто команда пытается передать строку литерала @compareString
в SQL, и это вызывает проблему. Ive видел другие сообщения в SOF, которые говорят использовать имя литерала при определении объектов new SqlParameter
(имеется в виду @
), но везде вне SoF говорят иначе.
Любая причина, по которой вторая команда выдавала бы недопустимые синтаксические ошибки?
Я вижу, что вы делаете 'this.mainConnection', вы только открываете одно соединение и повторно используете соединение по всему вашему коду? 'SqlConnection' не был предназначен для использования таким образом, он использует [Пул соединений] (http://msdn.microsoft.com/en-us/library/8xx3tyca (v = vs.110) .aspx), и что должно быть сделано просто открыто и утилит много коротких замыканий. Когда вы удаляете соединение, он оставляет соединение открытым в базе данных ненадолго, если он видит, что новое соединение открывается с использованием той же строки соединения, оно будет повторно использовать старое соединение. –
Я вижу, что вы делаете 'this.mainConnection', вы только открываете одно соединение и повторно используете соединение по всему вашему коду? 'SqlConnection' не был предназначен для использования таким образом, он использует [Пул соединений] (http://msdn.microsoft.com/en-us/library/8xx3tyca (v = vs.110) .aspx), и что должно быть сделано просто открыто и утилит много коротких замыканий. Когда вы удаляете соединение, он оставляет соединение открытым в базе данных ненадолго, если он видит, что новое соединение открывается с использованием той же строки соединения, оно будет повторно использовать старое соединение. –