Действительно, вы посылаете в ваших DBMS этот запрос
SELECT ID FROM Student WHERE Name ='' divyesh ''
СУБД интерпретирует правильно СКП до
SELECT ID FROM Student WHERE Name =''
тогда он находит
divyesh ''
и пытается знать сначала, если divyesh это столбец Студента t в состоянии, так как это не вызовет ошибку, что вы видите, за исключением приложений ..
Чтобы исправить эту ошибку, вы должны дважды процитировать ваши строки, переданные в качестве фильтра в ваших динамических querys в приложении:
SELECT ID FROM Student WHERE Name =' "''+str+''" '
Как правило, при кодировании динамического запроса ваш случай предотвращается, передавая параметр фильтра «str» некоему вспомогательному методу, который проверяет наличие отдельных одинарных кавычек и, в конечном счете, удваивает их.
Это (C# или Java) тривиальное решение относительно того, что сказал:
"SELECT ID FROM Student WHERE Name ='" + str.Replace("'", "''") + "' "
Но я считаю, что это очень трудно, что в базе данных «имя» поле он хранится одинарные кавычки, так интересно, что вы Тринг делать ..
во всяком случае, что вы делаете, используя одинарные кавычки в полях фильтра, он также является элементом атак SQL-инъекций ..
вы следует избегать абсолютов этот тип динамического запроса и использовать в вашем коде некоторый api на основе объектной модели запроса запроса sql с параметрами и, таким образом, передать объект, который «содержит» ваш запрос, входные фильтры, создающие объекты параметров.
обновление после уточнений в ПО
String SName = null;
if(!string.IsNullOrEmpty(txtBox1.Text))
SName = txtBox1.Text.trim();
String sql="select id from student where name = @paramName";
SqlConnection connection = null;
SqlDataReader reader = null;
try
{
connection = GetConnection();
SqlCommand command = new SqlCommand(sql, connection);
SqlParameter param = new SqlParameter("@paramName", SqlDbType.NVarChar, 50);
param.Value = SName ?? SqlString.Null;
command .Parameters.Add(param);
if (_sqltransection != null)
{
command.Transaction = _sqltransection;
}
reader = command.ExecuteReader(CommandBehavior.CloseConnection);
}
catch (SqlException ex)
{
throw new DBException(ex);
}
обратите внимание, что SqlDbType.NVarChar, 50
относится к типу данных вашего поля БД «Name» (что я предполагаю, чтобы быть varchar), и поэтому он должен быть равен в tyope и length (для поля «name» должно быть хорошо 50 символов), во всяком случае, чем меньше длина входного фильтра параметра, тем лучше
Вам нужно добавить еще несколько одиночные кавычки, чтобы сделать его в виде строки, иначе он будет анализироваться как 'SELECT, ID FROM Student WHERE Name = divyesh' –
Plus ваш код выглядит он подвержен sql injection –
Что такое divyesh? Это имя столбца, переменная/параметр или (неудачный) строковый литерал? – jarlh