C # asp.net: ошибка - не указано значение для одного или нескольких обязательных параметров - PullRequest
0 голосов
/ 28 марта 2011

Вот код для функции слоя базы данных:

    public static dsPersonnel GetPersonnel(string Database, string strSearch)
    {
        dsPersonnel DS;
        OleDbConnection sqlConn;
        OleDbDataAdapter sqlDA;

        //create the connection string
        sqlConn = new OleDbConnection("PROVIDER=Microsoft.Jet.OLEDB.4.0;" +
            "Data Source=" + Database);

        string query;
        if (strSearch == "" || strSearch.Trim().Length == 0)
        {
            query = "SELECT * from tblPersonnel";
        }
        else
        {
            query = "SELECT * FROM tblPersonnel WHERE LastName = " + strSearch + "";
        }




        //create the adapter with query
        sqlDA = new OleDbDataAdapter(query, sqlConn);

        //create the dataset
        DS = new dsPersonnel();

        //fill the data set
        sqlDA.Fill(DS.tblPersonnel);

        //return the dataset
        return DS;
    }
}

, если постбэк отправляет пустую строку, он возвращает все записи.но когда в функцию передается настоящая строка, я получаю сообщение об ошибке «для одного или нескольких обязательных параметров не задано значение».для строки

sqlDA.Fill(DS.tblPersonnel);

В отладке я проверил, что строка строится правильно для обоих случаев, но я получаю ошибку с последним. Я понимаю, что должен использовать параметризованные запросы , но это шаг в процессе обучения в классе, в котором я учусь.Одна проблема за раз :).Любые предложения о том, что проблема здесь?

Ответы [ 4 ]

2 голосов
/ 28 марта 2011

Попробуйте

query = "SELECT * FROM tblPersonnel WHERE LastName = '" + strSearch + "'";

или лучше

query = string.Format("SELECT * FROM tblPersonnel WHERE LastName = '{0}'", strSearch);
2 голосов
/ 28 марта 2011

Вы должны заключать строки в одинарные кавычки в SQL.

query = "SELECT * FROM tblPersonnel WHERE LastName = '" + strSearch + "'"; 
2 голосов
/ 28 марта 2011
query = 
     "SELECT * FROM tblPersonnel WHERE LastName = '" + 
      strSearch + 
      "'";

Добавить кавычки вокруг критериев поиска

1 голос
/ 28 марта 2011

Не похоже, что вы цитируете параметр, который передаете в свой запрос.

Вместо

query = "SELECT * FROM tblPersonnel WHERE LastName = " + strSearch + "";

try

query = "SELECT * FROM tblPersonnel WHERE LastName = '" + strSearch.Replace("'", "''") + "'";

Обратите внимание на дополнительные одинарные кавычки, а также оператор Replace (), который корректно экранирует одинарные кавычки, содержащиеся в вашем фильтре (например, апострофы)

Необходимо повторить, что ваш пример кода содержит множество проблем и уязвимостей безопасности.

...